TI中文支持网
TI专业的中文技术问题搜集分享网站

DMA地址和数据问题

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的技术支持途径,只能在这发帖子,看能不能有什么启发

我现在搬一个数只是测试,想确认一下不同的寄存器值对应怎样的搬运关系,实际用时肯定不是搬一个数

赞(0)
未经允许不得转载:TI中文支持网 » DMA地址和数据问题
分享到: 更多 (0)