1. DMA的含义:Direct Memory Acess ,可以不通过CPU而在DMA控制器的控制下,高速地和I/O设备和存储器之间交换数 据。 ② 源设备和目标都在外围总线APB上 ③ 源设备在系统总线,而目标设备位于外围总线 ④ 源设备在外围总线,而目标设备位于系统总线 ② 连续模式:一次DMA请求将产生连续的的DMA传输,直到规定的DMA传输数据传输完,在DMA传输周期间,nXDACK一直有效。DMA请求信号被释放。并且每次传输一个数据单元后,释放一次总线控制权,以让其他总线控制器有机会可以占有总线。 4. DMA操作 State-1:初始状态,DMA等待DMA请求,若请求到达,进入状态2。此阶段,DMA AC和INT REQ 为0 State-2:DMA ACK 变为1,计数器CURR_TC的值从DCON[19:0 ]装载。DMA ACK保持1,直到它被清0 State-3:对DMA进行原子操作的sub-FSM(子状态机)进行初始化。sub-FSM 从源地址读取数据后将数据写入目标地址。对于这种操作方式,数据大小和传输大小应给予考虑。在整体服务方式中(whole service mode),这种操作重复直到计数器CURR_TC变为0,然而在单一模式中只进行一次。当子FSM完成每个原子操作,主FSM倒计CURR_TC。另外,当CURR_TC为0 和中断设置DCON[29]为1时,主FSM发出INT REQ(中断请求信号),同时清除DMA ACK 假如以下任一种情况发生 ① 在整体服务模式(Whole service mode)CURR_TC变为0 ② 在单一模式(Single service mode)原子操作完成 在单一模式,主FSM的三个状态进行后停止,等待另外的DMA REQ。如果DMA REQ到达,就重复三个状态。因此,DMA ACK被声明后进行每个原子操作。 相反,在整体服务模式(Whole service mode),主FSM在状态3等待直到CURR_TC变为0。所以DMA ACK 在传输区间被声明后进行原子操作当TC达到0时。 有可能有些朋友对“原子操作”有疑问,我没有找到标准的定义,按我的理解就是操作不可间断,一定要完成这个操作才能进行另外的操作。 相反,在整体服务模式(Whole service mode),主FSM在状态3等待直到CURR_TC变为0。所以DMA ACK 在传输区间被声明后进行原子操作当TC达到0时。 5. 外DMA 请求/应答协议,有三种 ① Single service Demand ② Single service Handshake ③Whole service Handshake Demand 和 Handshake 模式的区别主要是XnXDREQ 和 XnXDACK时序,datasheet中有具体实例 6. 操作设置 ① DMA通道初始化:rDISRC 、 rDISRCC 、 rDCON0 、 rDIDST 、 rDIDSTC 、 rDMASKTRIG0 ② DMA中断初始化 ③ 设置DMA请求源,如:Uart设置成DMA形式 rUCON0 = rUCON0 & 0xff3 | 0x8; ④ 设置DMA中断服务程序 实例: //------------系统初始化--------------------------------------------------------------- */ } 中断初始化 static void __irq Dma1Done(void) //DMA1中断(DMADONE) } |
S3C2410 DMA原理与实例
最新推荐文章于 2014-11-23 21:59:52 发布
S3C2410 DMA原理与实例