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

C6747 运用EDMA3将内存中一个源数组搬到另一个目标数组失败了,麻烦大家帮我看看哪里出问题了!

最近需要利用C6747里面的EDMA3模块,刚开始调试程序,准备先实现一个简单的功能,把一个数组的数据搬到另一个数组里面去,调试了几天都没有成功,先把自己的配置流程说明一下,麻烦大家帮帮我看看哪里出问题了?

1、首先是对EDMA3模块进行初始化,利用PSC0对CC和TC0和TC1进行初始化

初始化完后,我仿真看了PSC0模块的MDSTAT0寄存器的值如下:
a1就是MDSTAT0寄存器的值,可以看到0x00001E03的03代表模块已经使能,1代表模块时钟是开启的。
2、然后初始化EDMA3模块,
我使用的是DMA的9通道,因此将DARE[1]的第九位置1,映射到阴影寄存器1,配置后利用仿真看到对应寄存器如下:
可以看到DARE[1]的值0x00000200,第九位置1了。
然后将第九通道排到队列0里面:
配置完后看对应寄存器DMAQNUM[1]的值为:
DMAQNUM[1]的的E9,即4-6位为0,即将第九通道事件设置到队列0里。
初始化完后,配置参数RAM的值,
配置完后查看对应寄存器值为:
可以看到源地址为:0x008246E0,目标地址为0X008246E8,ACNT为1,BCNT为6,SRC_BIDX和DST_BIDX都为1,CCNT为1,SRC_CIDX和DST_CIDX都为0,我设置的源数组值和目标数组值如下:
对比上面的参数RAM的值可以看到,源地址和目标地址都是正确,整个数据搬送过程我是通过手动触发的,通过将ESR寄存器的第九位置1来触发,然后调试中看到参数RAM的值为:
可以看到SRC和DST地址都在递增的,BCNT在递减的,但是最后我看到我目标数组的值仍然全是0x00,EDMA3没有用:
最后麻烦大家帮我看看是哪里出问题了!十分感谢!

Tony Tang:

是不是Cache打开了,看的是Cache的值,甩以没有更新。 或者将地址改为DDR上或ShareRAM上。

从memory browser里看一下试试, 截个屏。 

user4871655:

回复 Tony Tang:

谢谢哈,确实是Cache打开了,我现在把地址改为ShareRAM上了,可以搬数了,但是我有个新的问题,我现在准备利用EDMA控制串口0发数,但是我现在只能手动触发,将ESR寄存器第九位置1后可以串口发数。但是9通道的串口0发送中断触发不了,我虽然使能了EER寄存器的第九位,但是看ER寄存器第九位并没有置1,请问是什么原因啊

Shine:

回复 user4871655:

ER寄存器是外部触发事件,ESR寄存器和ER寄存器是对立的,不会相互影响。
The event set register operates independent of the event register (ER), and a write of 1 is always
considered a valid event regardless of whether the event is enabled (the corresponding event bits are set
or cleared in EER.En).

看一下IPR和IFR寄存器有没有置1?

赞(0)
未经允许不得转载:TI中文支持网 » C6747 运用EDMA3将内存中一个源数组搬到另一个目标数组失败了,麻烦大家帮我看看哪里出问题了!
分享到: 更多 (0)