1.DMA概括
DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率,可以大大节省系统资源。上节我们做的串口驱动就是由CPU完成数据的传输的,现在我们打开DMA,让DMA去完成这项工作,这样就可以解放CPU,让CPU去做其他的事情。
2.关于DMA控制器
(1)通道数:6410有4个DMA控制器(初始化的时候要选择),每个控制器有8个通道,所以一共有32个通道。
(2)请求源:这里列出部分请求源,从图中可以看出每个串口源对应的控制器有两个DMAx和SDMAx,但是在实际中只能选择一个控制器来用,默认情况下使用SDMAx。
(3)基本时序
nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输
(4)工作模式:
•Demond模式:
如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输
•Handshake模式:
DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。
3.初始化DMA
DMA控制器的作用就是将内存中的数据放到串口中去,所以其实主要就是对源地址和目的地址的初始化。初始化工作分为以下几个步骤。
选择DMA控制器
由上文可知,使用串口时有两个控制器,但是只能用一个,这里引入SDMA_SEL寄存器。
因为使用串口0,选择SDMA控制器,所以应该选择SDMA_SEL寄存器中第0位,写入0即可。