各位专家与高手:
在使用官方提供的C6678开发包K1_STK_v1.1内示例程序进行EDMA测试时发现了以下现象:
EDMA调用接口:
voidedma_3D_Test (Uint32 src, Uint32 dst, Uint32 uiACount,
Uint32 uiBCount, Uint32 uiCCount, Uint32 uiBIndex, Uint32 uiCIndex,
CSL_TpccRegs* EDMACCRegs, Uint32 TC_channel)
调用实例(连续搬运1M数据):
void edma_3D_Test (0x90000000, 0x80000000, 32768,32, 1, 32768, 0, CSL_TpccRegs* EDMACCRegs, Uint32 TC_channel);
现象1:
当DMA的原地址或者目的地址位于0x80000000到0x80100000这1M byte的DDR空间范围内,EDMA搬运完成时间特别长,做过如下测试(连续搬运1M bytes数据):前三项测试我们认为DMA数据搬运的速度是正常的,但是后三项测试,源地址或目的地址都有落在0x80000000到0x80100000区间内的情况,DMA搬运则耗时过长。
起始地址 | 目标地址 | 完成时间(cycle,1G主频) | 带宽 |
0x90000000 | 0x80100000 | 320814 | 3117M bytes/s |
0x90000000 | 0x0C200000 | 116142 | 8610M bytes/s |
0x80100000 | 0x0C200000 | 116220 | 8604M bytes/s |
0x80080000 | 0x0C200000 | 130007280 | 7.69M bytes/s |
0x90000000 | 0x80080000 | 130115856 | 7.68M bytes/s |
0x80000000 | 0x0C200000 | 268558212 | 3.72M bytes/s |
现象2:
C6678片内有4M bytes的共享内存MSMC(0x0C000000到0x0C400000),当DMA的源地址和目的地址为0x0C000000时,会触发Exception,具体打印信息如下:
External exception happened. MEXPFLAG[2]=0x80000000.
EDMA module 0 error
TC 0 error happened
EDMA3TC has detected an error at source or destination address.
write error (9). TCC= 0. TCINTEN= 1. TCCHEN= 0
NRP=0x8514d4, NTSR=0x1000d, IRP=0x856fb8, ITSR=0xd, TSCH= 0x0, TSCL= 0x351fd306
B3=0x85154c, A4=0x0, B4= 0x0, B14= 0xc207188, B15= 0xc205920
希望给我专家和高手给点调试建议。