专题5-快车道DMA
1.为何使用DMA:为了提高CPU的工作效率,避免多余的等待时间
2.关于DMA控制器:
(1)通道数:2440有4个通道,6410有4个DMA控制器(初始化的时候要选择),32个通道。210有两种DMA一种是内存与内存之间,另外则是普通的内存与外设之间。
(2)请求源:
(3)基本时序
nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输
(4)工作模式:
•Demond模式:
如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输
•Handshake模式:
DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。
3.初始化
(1)源地址寄存器初始化(总线模式以及地址是否增加,还有选择通道,指定地址)
(2)目的地址寄存器初始化
(3)控制寄存器初始化(选择DMA请求源,选择源是软件还是硬件,是否重加载以及计数值决定发送多少数据)
4.DMA传输
用置位寄存器的方式打开
5.用到的datashhet
(1)
(2)
(3)
(4)
(5)
(6)
(7)
6.代码实现
7.
(1)期初不能实现,怀疑DMA工作模式设置不对,再次检查代码
(2)发现代码正确,于是怀疑时钟设置,查看时钟,发现正确
(3)怀疑老师的时钟设置错误,应该用AHB的时钟,改了以后还是不行
(4)怀疑启动代码阶段代码,查看以后找不出毛病
(5)怀疑只能用中断方式使用mini2440的DMA,怀疑硬件与tq2440不一样导致,但是用了网上的中断代码,还是不行。
(6)怀疑开发板坏掉,换了开发板还是不行,证明硬件完好,至于软件有关
(7)怀疑串口初始化---------------------------真相大白了,就是串口初始化,之前做串口的时候,使用的轮询或者中断,在这里要配合DMA使用
所以修改串口初始化,将UCON0的【3:2】改为10
8.实现效果终于来了,这么个小错误,花了小君君宝贵的一个下午

浙公网安备 33010602011771号