
首先 CPU 配置 DMA 控制器寄存器,包括源地址、目的地址、传输长度以及传输方向,然后启动 DMA 控制器。DMA 控制器会向 CPU 请求系统总线访问,CPU 可以在 任何一个机器周期结束后 响应该请求,一旦允许,DMA 接管总线进行数据传输。在 DMA 传输期间,CPU 可以执行其他程序,实现与 DMA 并行操作。
DMA 通过总线访问外设寄存器或数据端口,获取外设数据并暂存到 DMA 数据寄存器(DR),然后将数据写入内存,同时更新 DMA 控制器寄存器中的剩余传输字节数和内存目标地址。根据外设设计,DMA 控制器可能在每次传送前向外设发请求,也可能外设主动提供数据。DMA 重复这一过程,直到所有待传输数据搬运完成。
传输完成后,DMA 向 CPU 发送中断请求,CPU 在当前指令周期结束后响应中断,进入内核态进行后续处理,例如通知相关进程或启动下一步 I/O。至此,整个 DMA 数据传输过程完成。
DMA 通过总线访问外设寄存器或数据端口,获取外设数据并暂存到 DMA 数据寄存器(DR),然后将数据写入内存,同时更新 DMA 控制器寄存器中的剩余传输字节数和内存目标地址。根据外设设计,DMA 控制器可能在每次传送前向外设发请求,也可能外设主动提供数据。DMA 重复这一过程,直到所有待传输数据搬运完成。
传输完成后,DMA 向 CPU 发送中断请求,CPU 在当前指令周期结束后响应中断,进入内核态进行后续处理,例如通知相关进程或启动下一步 I/O。至此,整个 DMA 数据传输过程完成。


