微型计算机系统原理(第五版)周明德 第7章.ppt
文本预览下载声明
传送过程由8个时钟周期组成。前4个周期S11、S12、S13、S14用于从源区读出数据。从S11周期开始,通道0现行地址的高8位通过DB0~DB7输出,由ADSTB锁存至外部锁存器中,地址的低8位由A0~A7输出,自S12周期开始使MEMR#信号有效,在S14周期的时钟上升沿把从源区读出的数据,通过DB0~DB7送至8237的临时寄存器中。接着的4个周期S21、S22、S23、S24用于把数据写入至目的区。先在S21周期把通道1地址的高8位通过DB0~DB7输出,由ADSTB锁存至外部锁存器,地址的低8位由A0~A7输出,使MEMW#信号有效,同时把在8237的临时寄存器中的数据由DB0~DB7输出,由MEMW#信号将其写入至目的区,待整个数据块传送完了发出EOP#信号,结束DMA传送。 表7-4 8237内部寄存器口地址分配 主片的I/O口地址(H) 从片的I/O口地址(H) 寄存器 IN(读, ) OUT(写, ) 000 0C0 CH0当前地址寄存器 CH0基址与当前地址寄存器 001 0C2 CH0当前字节计数器 CH0基字节计数器与当前字节计数器 002 0C4 CH1当前地址寄存器 CH1基址与当前地址寄存器 003 0C6 CH1当前字节计数器 CH1基字节计数器与当前字节计数器 004 0C8 CH2当前地址寄存器 CH2基址与当前地址寄存器 005 0CA CH2当前字节计数器 CH2基字节计数器与当前字节计数器 006 0CC CH3当前地址寄存器 CH3基址与当前地址寄存器 007 0CE CH3当前字节计数器 CH3基字节计数器与当前字节计数器 表7-4 8237内部寄存器口地址分配 008 0D0 状态寄存器 命令寄存器 009 0D2 ? 请求寄存器 00A 0D4 ? 写屏蔽寄存器单个屏蔽位 00B 0D6 ? 模式寄存器 00C 0D8 ? 清除字节指令器(软命令) 00D 0DA 暂存寄存器 主清除指令(软命令) 00E 0DC ? 清除屏蔽寄存器(软命令) 00F 0DE ? 写全部屏蔽位寄存器 3. 8237的编程步骤 (1) 输出主清除命令; (2) 写入基址与当前地址寄存器; (3) 写入基址与当前字节数地址寄存器; (4) 写入模式寄存器; (5) 写入屏蔽寄存器; (6) 写入命令寄存器; (7) 写入请求寄存器。 若有软件请求,就写入到指定通道,可以开始DMA传送过程;若无软件请求,则在完成(1)~(7)的编程后,由通道的DREQ启动DMA传送过程。 例如,若要利用通道0,由外设(磁盘)输入32 KB的一个数据块,传送至内存8000H开始的区域(增量传送),采用块连续传送的方式,传送完不自动初始化,外设的DREQ和DACK都为高电平有效。 编程首先要确定端口地址。地址的低4位用以区分8237的内部寄存器,高4位地址A7~A4经译码后,连至选片端CS,假定选中时高4位为5。 (1) 模式控制字 D7 D6 D5 D4 D3 D2 D1 D0 1 0 0 0 0 1 0 0 (2) 屏蔽字 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 (3) 命令字 D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 0 0 0 0 0 初始化程序如下: OUT 5DH,AL ;输出主清除命令 MOV AL,00H OUT 50H,AL ;输出基址和当前地址的低8位 MOV AL,80H OUT 50H,AL ;输出基址和当前地址的高8位 MOV AL,00H OUT 51H,AL ;给基址和当前字节数赋值低8位 MOV AL,80H OUT 51H,AL ;给基址和当前字节数赋值高8位 MOV AL,84H OUT 5BH,AL ;输出模式字 MOV AL,00H OUT 5AH,AL ;输出屏蔽字 MOV AL,0A0H OUT 58H,AL ;输出命令字 7.3.6 Intel 8237的应用举例 1. 8088访问8237的寻址 当8237处于SI空闲状态时,CPU可以对它进行访问,但是否访问此8237,这要取决于它的片选引脚CS是否出现低电平。主系统板内部的8237片选引脚CS,接到系统板中I/O接口电路的选中信号产生电路的译码输出(Y0)DMACS上。由I/O接口片选信号产生电路,及I/O接口使用的I/O地址表可知,当出现I/O地址为00H~1FH时,DMACS为低电平,此时8237被选中。若CPU执行的是OUT指令,则IOW有效
显示全部