This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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字节,请问哪块配置有问题?

  • C6205这芯片太老了,你既然选择了这么老的芯片,就要做好自已面对各种问题的思想准备。

    建议#1. 前后细读一下DMA的使用手册。

    http://www.ti.com/lit/ug/spru577a/spru577a.pdf

    #2. 如果真的是想一次搬一个数就没必要用DMA了。

  • 自己的项目肯定要自己解决问题,但一个人的思路有限,我又没有别的TI的技术支持途径,只能在这发帖子,看能不能有什么启发

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