问:谢谢frank!
我参考了你的代码,发现我的程序还有些问题。
我需要从外部sdram读数据到内部sram,计算好之后再将结果写到外部sdram。我配置了DDR2,我的代码类似于下面的:
DMA_Internal2External(int*Internal_buffer,int *SDRAM_buffer,int DMA_LEN)
{
while((*pDMAC0)&DMAS){asm("nop;");};
*pDMAC0 = 0;
*pIIEP0 = Internal_buffer;
*pEIEP0 = SDRAM_buffer;
*pIMEP0 = 1;
*pEMEP0 = 256; //此处我设置为256
*pICEP0 = DMA_LEN;
*pECEP0 = DMA_LEN
*pDMAC0 = DEN|TRAN|DFLSH|INTIRT;
}
DMA_External2Internal(int *SDRAM_rbuffer,int *Internal_buffer,int DMA_LEN)
{
while((*pDMAC0)&DMAS){asm("nop;")};//代码会在此处死循环,死循环的发生很随机
*pDMAC0 = 0;
*pIIEP0 = Internal_buffer;
*pEIEP0 = SDRAM_buffer;
*pIMEP0 = 1;
*pEMEP0 = 1; //此处仍为1
*pICEP0 = DMA_LEN;
*pECEP0 = DMA_LEN
*pDMAC0 = DEN|DFLSH|INTIRT;
}
调用过程类似于:
for(i = 0; i < 100; i++)
{
DMA_External2Internal();
DMA_External2Internal();
数据计算;
DMA_Internal2External();
DMA_Internal2External();
}
我配置了DDR2,不知道是不是这里有问题。
当用DMA将外部数据读入内部时发现,得到的数据里第一个数有时候会读取失败,得到数据0。
另外我用的是adsp-21469评估板
我的问题在哪里呢?谢谢!