DMA操作
DMA 为其运行使用 3态 FSM(有限状态机),相关描述如下面三个阶段:
状态1. 作为一个初始状态,DMA等待DMA 请求。一旦请求到达则跳到状态 2。在此状态下DMA ACK和 INT REQ 为 0。
状态2. 在此状态,DMA ACK变为 1而且计数器(CURR_TC)从DCON[19:0]寄存器中加载。注意 DMA ACK 保 持为1 直到之后将其清除。
状态3. 在此状态,处理DMA的原子操作的 sub-FSM启动。sub-FSM从源地址读取数据,接着写入目标地址。在 此操作中考虑数据大小和传输大小(单次或突发)。此操作在全服务模式中一直重复直到计数器(CURR_TC) 变为0,在单服务模式只执行一次。当sub-FSM完成了每个原子操作时主FSM (此FSM)倒计数CURR_TC。 此外当 CURR_TC 变为 0并且DCON[29]寄存器的中断设置置位为 1时主FSM 发出 INT REQ信号。
另外 如果遇到以下状况之一则清除了 DMA ACK。
1) 在全服务模式中 CURR_TC 变为 0;
2) 在单服务模式中完成原子操作。 注意在单服务模式中有三个主FSM 的状态要执行并且接着要停止和等待其它DMA REQ。如果DMA REQ 出 现了要重复所有的三个状态。所以发出DMA ACK并接着取消原子传输。与之对比,在全服务模式中,主FSM在 状态3 中等待直到CURR_TC 变为 0。所以在所有传输期间发出DMA ACK并接着在当 TC 到达0 时取消。 总之当且仅当在 CURR_TC 变为 0时才发出 INT REQ,与服务模式(单顾服务模式或全顾服务模式)无关。