DMA工作过程
扫描二维码
随时随地手机看文章
预处理阶段测试设备状态;向DMA控制器的设备地址寄存器中送入设备号,并启动设备;向主存地址计数器中送入欲交换数据的主存起始地址;向字计数器中送入欲交换的数据个数 。
外部设备准备好发送的数据(输入)或上次接收的数据已处理完毕(输出)时,将通知DMA控制器发出DMA请求,申请主存总线。数据传送输入操作 ①.首先从外部设备读入一个字(设每字16位)到DMA数据缓冲寄存器IODR中(如果设备是面向字节的,一次读入一个字节,需要将两个字节装配成一个字)。②.外部设备发选通脉冲,使DMA控制器中的DMA请求标志触发器置“1”。③.DMA控制器向CPU发出总线请求信号(HOLD)。④.CPU在完成了现行机器周期后,即响应DMA请求,发出总线允许信号(HLDA),并由DMA控制器发出DMA响应信号,使DMA请求标记触发器复位。此时,由DMA控制器接管系统总线。
⑤.将DMA控制器中主存地址寄存器中的主存地址送地址总线,⑥.将DMA数据缓冲寄存器中的内容送数据总线。⑦.在读/写控制信号线上发出写命令。⑧.将DMA地址寄存器的内容加1,从而得到下一个地址,字计数器减1。⑨.判断字计数器的值是否为“0”。若不为“0”,说明数据块没有传送完毕,返回⑤,传送下一个数据;若为“0”,说明数据块已经传送完毕,则向CPU申请中断处理。输出操作①.当DMA数据缓冲寄存器已将输出数据送至I/O设备后,表示数据缓冲寄存器为“空”;②.外部设备发选通脉冲,使DMA控制器中的DMA请求标志触发器置“1”;③.DMA控制器向CPU发出总线请求信号(HOLD);④.CPU在完成了现行机器周期后,即响应DMA请求,发出总线允许信号(HLDA),并由DMA控制器发出DMA响应信号,使DMA请求标记触发器复位。此时,由DMA控制器接管系统总线;⑤.将DMA控制器中主存地址寄存器中的主存地址送地址总线,在读/写控制信号线上发出读命令;⑥.主存将相应地址单元的内容通过数据总线读入到DMA数据缓冲寄存器中;⑦.将DMA数据缓冲寄存器的内容送到输出设备;⑧.将DMA地址寄存器的内容加1,从而得到下一个地址,字计数器减1;⑨.判断字计数器的值是否为“0”。若不为“0”,说明数据块没有传送完毕,返回到⑤,传送下一个数据;若为“0”,说明数据块已经传送完毕,则向CPU申请中断处理。
传送后处理校验送入主存的数据是否正确。决定是否继续用DMA传送其他数据块。测试在传送过程中是否发生错误。
原理一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据),它会先向CPU发送DMA请求信号。外设通过DMA的一种专门接口电路――DMA控制器(DMAC),向CPU提出接管总线控制权的总线请求,CPU收到该信号后,在当前的总线周期结束后,会按DMA信号的优先级和提出DMA请求的先后顺序响应DMA信号。CPU对某个设备接口响应DMA请求时,会让出总线控制权。于是在DMA控制器的管理下,外设和存储器直接进行数据交换,而不需CPU干预。数据传送完毕后,设备接口会向CPU发送DMA结束信号,交还总线控制权。
中断处理过程基本上由3部分组成,第一部分为准备部分,其基本功能是保护现场,对于非向量中断方式则需要确定中断源,最后开放中断,允许更高级的中断请求打断低级的中断服务程序;第二部分为处理部分,即真正执行具体的为某个中断源服务的中断服务程序;第三部分为结尾部分,首先要关中断,以防止在恢复现场过程中被新的中断请求打断,接着恢复现场,然后开放中断,以便返回原来的程序后可响应其他的中断请求。中断服务程序的最后一条指令一定是中断返回指令。