初级会员
- 积分
- 66
- 金钱
- 66
- 注册时间
- 2016-8-11
- 在线时间
- 16 小时
|
1金钱
使用官方的SDK包中的MemoryToMemory的示例代码,是使用eDMA拷贝SDRAM的数据到SDRAM,示例中只传输了4*4字节的数据。我把代码移到原子开发板,并把传输的数据量增大到800*480*2,结果无法正常传输(Test_EDMA_Callback回调没有进入)。把传输数据减少到320*240*2又能正常传输。请问1052的eDMA有传输数据长度限制吗?如果我确实需要在SDRAM中拷贝大量数据怎么办呢?
例程代码如下:
edma_handle_t g_TestEDMA_Handle;
__align(64) u16 DMATestSouse[480*800] __attribute__((section("NonCacheable"), zero_init));
__align(64) u16 DMATestTarget[480*800] __attribute__((section("NonCacheable"), zero_init));
void Test_EDMA_Callback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds)
{
if (transferDone)
{
}
}
#define Test_DMA_CHANNEL 0
void TestDMAConfig()
{
edma_transfer_config_t transferConfig;
edma_config_t userConfig;
DMAMUX_Init(DMAMUX);
//DMAMUX_EnableAlwaysOn(DMAMUX, Test_DMA_CHANNEL , true);
DMAMUX_SetSource(DMAMUX, Test_DMA_CHANNEL , (u32)DMATestSouse);
DMAMUX_EnableChannel(DMAMUX, Test_DMA_CHANNEL );
EDMA_GetDefaultConfig(&userConfig);
EDMA_Init(DMA0, &userConfig);
EDMA_CreateHandle(&g_TestEDMA_Handle, DMA0, Test_DMA_CHANNEL );
EDMA_SetCallback(&g_TestEDMA_Handle, Test_EDMA_Callback, NULL);
EDMA_PrepareTransfer(&transferConfig, DMATestSouse, 2 DMATestTarget, 2,
2, sizeof(DMATestSouse), kEDMA_MemoryToMemory);
EDMA_SubmitTransfer(&g_TestEDMA_Handle, &transferConfig);
}
|
|