C6205的DMA寄存器配置如下:
DMA_Config MyDMAConfig = {
0x0B0002FF,//0x09000050, /* prictl */
0x00000008,//0x000000A8, /* secctl */
0x01400000, /* src */
0x80000400, /* dst */
0x00010001 /* xfrcnt */
};
Uint32 dmaGblRegMsk;
Uint32 dmaGblRegId = DMA_GBLADDRB | DMA_GBLADDRC | DMA_GBLIDXA | DMA_GBLCNTA;
DMA_GlobalConfig dmaGblCfg = {
0x00000000, /* Global Address Register A */
0x01400000, /* Global Address Register B */
0x80000400, /* Global Address Register C */
0x00000000, /* Global Address Register D */
0x00010000, /* Global Index Register A */
0x00000000, /* Global Index Register B */
0x00010001, /* Global Count Reload Register A */
0x00000000 /* Global Count Reload Register B */
};
初始化如下:
dmaGblRegMsk = DMA_globalAlloc(dmaGblRegId);
DMA_globalConfig(dmaGblRegMsk, &dmaGblCfg);
hDma = DMA_open(DMA_CHA0,DMA_OPEN_RESET);
DMA_config(hDma,&MyDMAConfig);
DMA_autoStart(hDma);
源地址0x01400000通过EMIF接口外接8位norflash
现在的问题是:
程序每次进中断,应该搬移1字节数据吧?现在的测试结果是初次搬移7字节,后续每次搬19字节,请问哪块配置有问题?
Tony Tang:
C6205这芯片太老了,你既然选择了这么老的芯片,就要做好自已面对各种问题的思想准备。
建议#1. 前后细读一下DMA的使用手册。
http://www.ti.com/lit/ug/spru577a/spru577a.pdf
#2. 如果真的是想一次搬一个数就没必要用DMA了。
Yujing Wang:
回复 Tony Tang:
自己的项目肯定要自己解决问题,但一个人的思路有限,我又没有别的TI的技术支持途径,只能在这发帖子,看能不能有什么启发
我现在搬一个数只是测试,想确认一下不同的寄存器值对应怎样的搬运关系,实际用时肯定不是搬一个数