310 likes | 486 Views
第六章 I/O 接口. 6 - 2 , 6 - 7. 第一节 概 述. 一、 I/O 接口的功能 二、 I/O 接口的一般结构. 第二节 I/O 端口的寻址方式和指令. 一 . I/O 指令寻址. 二 . 存储器映象寻址. 三、 8086 的 I/O 指令. 第三节 CPU 与外设间的数据传送方式. 一、无条件传送. 二、查询传送. 三、 中断传送. 四、直接存储器存取 DMA. 第四节 I/O 译码电路和 PC 机的 I/O 地址分配. 一、译码电路举例.
E N D
第六章 I/O接口 6-2,6-7 第一节 概 述 一、I/O 接口的功能 二、I/O接口的一般结构 第二节 I/O端口的寻址方式和指令 一. I/O指令寻址 二. 存储器映象寻址 三、8086的I/O指令 第三节 CPU与外设间的数据传送方式 一、无条件传送 二、查询传送 三、 中断传送 四、直接存储器存取DMA 第四节 I/O译码电路和PC机的I/O地址分配 一、译码电路举例 二、 PC机的I/O端口地址分配
第一节 概 述 一、I/O接口的功能 1. 采用I/O接口的必要性 * 外围设备的品种繁多 机械,电子,机电,磁电,光电 * 所传输的信息的要求不同 数字,模拟,电压,电流等 2. 计算机与外设之间的信息交换应解决的问题: * 速度不匹配 * 信号电平不匹配 * 信号格式不匹配 * 时序不匹配
输出: CPU DB 锁存器 输出设备数据线 * 设置数据缓冲器以解决两者速度差异所带来的不协调问题; 输入: 输入设备数据线 三态缓冲器 DB CPU 寻 址 输出数据 等待数据输出 确定输出端口地址 AB、M/IO、ALE、DT/R CPU DB 输出锁存器 等待输出设备 从锁存器取走数据 寻 址 等待数据输入 读入数据 确定输入端口地址 AB、M/ IO、ALE、DT/R 等待数据输入 输入缓冲器 输入缓冲器 DB CPU 3. I/O接口应具有的功能(解决的方案)
* 设置信号电平转换电路以解决两者之间信号电平的不一致问题 例如:在串行通信中,常采用MC1488,MC1489等芯片实现 电平转换。 * 设置信息转换逻辑以满足对各自信号格式的要求 例如:A/D转换,D/A转换,串/并转换,并/串转换等。 * 设置时序控制电路以同步CPU和外设的工作 接口电路接收CPU送来的命令或控制字,实施对外设的控 制和管理;外设的工作状态和应答信号也通过接口及时返 回给CPU(设备就绪,忙,缓冲器满,空),保证CPU与 外设工作实现同步。
* 提供地址译码电路 CPU与多个外部设备交换信息; 每个外部设备通常包含若干个端口(数据,控制,状态)。 * 最好可编程应用
二、I/O接口的一般结构 信号: CPU与外设之间传送的信号有:数据、状态、控制 状态信号:反映外设当前所处的工作状态。 输入设备数据准备好,READY=1 输出设备正忙于处理,BUSY=1。 控制信号:控制外设的工作。 CPU启动或停止外设工作,CPU确定外设的工作方式。 端口:一般接口电路中通常设置三个端口:数据端口(输入/输出);状态端口;控制或命令端口。 C P U 接 口 外 部 设 备 AB 数据 DB 状态 M / IO WR RD 控制
存储器和I/O端口共用一个地址空间, I/O端口的读、写用RD和WR控制信号实现,所有访问存储器的指令都可以用于I/O端口。 存储器和I/O端口在两个独立的地址空间中, I/O端口的读、写用IOR和IOW控制信号实现,访问I/O端口用专用的IN或OUT指令。 C P U AB DB 存储器 I/O口 RD WR 第二节 I/O端口的寻址方式和指令 一. I/O指令寻址 二. 存储器映象的 I/O寻址 C P U AB DB 存储器 I/O口 IOW MEMR MEMW IOR 控制逻辑 CB
三、8086的I/O指令 输入输出端口地址在指令中以立即数 n (8bit) 表明。直接寻址可寻址256个输入/输出端口。 IN AL, n 字节输入 (n 端口数据) AL IN AX, n字输入 (n+1):(n) AX OUT n,AL 字节输出 (AL) n 端口 OUT n,AX字输出 (AX) n+1:n 输入输出端口地址由DX寄存器(16bit)间接寻址。间接寻址可寻址64K个输入/输出端口。 IN AL, DX 字节输入 ((DX)) AL IN AX, DX字输入 ((DX)+1):((DX)) AX OUT DX,AL 字节输出 (AL) (DX) OUT DX,AX字输出 (AX) (DX)+1:(DX)
输出外设数据 三态缓冲器 外设输入数据 锁 存 器 DB DB AB AB 地址译码 地址译码 n n 输出 端口 n 输入 端口 n WR RD 无条件输出 无条件输入 M/IO M/IO 第三节 CPU与外设间的数据传送方式 一、无条件传送 输出:CPU在执行OUT指令前,输出锁存器已空。 输入:CPU在执行IN指令前,输入三态缓冲器已准备好。
DB CPU 8 8 8 M/IO^WR^20 10 11 20 8 8 8 8位 8位 功率放大器 M/ IO^RD^10 M/ IO^RD^11 缓冲寄存器 K0 K7 K1 . . . P7 P1 P0 . . . 输入数据(模拟量) 例:有8个模拟电压,共用一个4 位十进制 BCD(16bit,2byte)A/D转换器。由CPU控制8个继电器,依次实现8个模拟电压的A/D转换,并把数据存储在DSIO为首地址的内存单元。
P0初始吸合代码01HDH 继电器全释放00H DL DSIO首地址BX AGAIN 断开所有继电器 等待触点释放 选择继电器,开始A/D转换 等待触点闭合和A/D转换结束 数据输入并存放 修改下一闭合继电器 修改存放地址 N 判终点 Y 输入数据口地址: 11H(高8位)、10H(低8位) 输出控制口地址: 20H 注意:1、继电器触点闭合和释放需要时间等待。 2、A/D转换器转换需要时间等待。 实现无条件传送的方法: CPU以足够延时等待使外设数据准备好
查询输入 查询输出 输入外设状态 信号Busy 输入外设状态信号Ready Y N Busy=1 Ready=1 Y N 输出数据 输入数据 二、查询传送 CPU需不断查询外设的状态,一旦外设满足数据传送的条件,就执行IN或OUT指令,读入或输出数据。
RD 输 入 装 置 锁 存 器 三态 缓冲 器 数据 DB D7 数据端口 +5V 地址 译码 状态端口 AB 三态 缓冲 器 D R Q Ready 选通 RD M/ IO M/ IO 查询输入接口电路(组成) IN AL, DATA_PORT 工作原理 IN AL, STATUS_PORT
1、数据准备好,选通信号输出正跳变将 数据锁存器 D触发器置1,作为Ready信号,D7=1 查询输入的编程 2、查询状态信号,执行 IN AL,状态口 Ready(bit7) AL 3、若Ready=1,执行 IN AL,数据口 输入数据AL; D触发器复位,Ready=0 POLL: IN AL STATUS_PORT TEST AL,80H JE POLL IN AL,DATA_PORT
查询输出接口电路(组成) WR 输 出 装 置 锁 存 器 数据 DB D7 VCC 启动 数据端口 Q D R 地址 译码 器 状态端口 三态 缓冲 器 AB Busy ACK RD M/IO M/IO 工作原理 OUT DATA_PORT, AL IN AL, STATUS_PORT
查询输出的编程 1、查询状态信号,执行 指令 IN AL,状态口 Busy(bit7) AL 2、若Busy =0,执行指令 OUT 数据口,AL, 输出数据AL DB 锁存器 输出装置; D触发器置1,即置Busy=1,表示忙碌,禁止输出 3、输出设备取走数据,应答信号ACK的负跳变(恢复)使D触发器清“0”,即置Busy=0,允许CPU送出下一个数据 POLL: IN AL,STATUS_PORT TEST AL,80H JNE POLL MOV AL,STORE ;从数据区取数 OUT DATA_PORT,AL
DB CPU 数据 8 8bit bit0 M/ IO^RD^2 3 2 4 八个模拟量 输入数据 D4 数据 READY 启动 A/D转换 D2 D1 D0 M/IO^RD^3 多路开关 1个模拟量 例:查询数据输入,有8 个模拟电压,一个8bitA/D转换器。由CPU控制一个8选1多路开关,以及A/D转换启动。依次实现8个模拟电压的A/D转换,并把数据存储在DSTORE为首地址的内存单元中。(组成) M/ IO^WR^4
关于多路开关选择和A/D转换启动信号 DL D7 D6 D5 D4 D3 D2 D1 D0 模拟0 1 1 1 1 1 0 0 0 ………………………………… 模拟7 1 1 1 1 1 1 1 1 终点 0 0 0 0 0 0 0 0 CF=1 START:MOV DL,0F8H LEA DI,DSTORE AGAIN:MOV AL,DL AND AL,0EFH;使bit4=0 OUT 4,AL;停止A/D CALL DELAY;延时等待 A/D 结束 MOV AL,DL OUT 4,AL;启动A/D POLL: IN AL,2;输入状态信号 SHR AL,1;将状态信号 ;移到CF JNC POLL;状态信号=0, IN AL, 3; 转POLL STORB ;(AL) (DI) INC DL;改变模拟信号 ;编号 JNE AGAIN;判终点 输入数据口地址:3 输入状态口地址:2 bit0,A/D转换结束信号 输出控制口地址:4 bit0~2,多路开关选择输入端 bit4,A/D转换启动信号
主程序 中断服务程序 启动外设 中断响应 数据IN/OUT 外设准备好 输入设备Ready=1 输出设备Busy=0 中断请求 中断响应 中断请求 IRET 外设又一次准备好 三、 中断传送 无条件、查询传送都需要CPU的等待或不断查询,使CPU的效率降低。中断传送:外设需要传送数据时,申请中断;当CPU允许中断,在中断服务程序中执行IN /OUT指令;然后返回主程序。
M/IO RD 输 入 装 置 锁 存 器 三态 缓冲 器 DB 数据 地址 译码 器 数据端口 D R Q INTR 选通 装置中断允许 DB 三态缓冲器 中断类型号 INTA 中断输入接口电路(组成) 中断服务程序中,读入数据 AB 向CPU发中断请求 数据准备就绪,发选通信号 CPU响应中断,进入中断响应周期 工作原理
四、直接存储器存取DMA 1、DMA传送的基本概念 无条件、查询、中断传送,每传送一个数据都需要CPU干预一次,限制了数据传送的速度。 输入设备 CPU 内存 输出设备 DMA(Direct Memory Access):是一种不需要CPU干预也不需要软件介入的高速数据传送方式。在外设(如磁盘)与内存之间成批传送数据时,完全由硬件完成外设与内存的数据传送,而不必 CPU的干预。对这一数据传送过程进行控制的硬件称为DMA控制器(DMAC)。
问题:(1) 数据传送需AB、DB、CB的参与; (2) 通常情况下,AB、DB、CB由CPU控制。 解决 :(1) 设置DMA控制器DMAC。当需要DMA时,由DMAC提供内存的地址线、数据串长度和必要的控制信号。 (2) 外设在需要进行DMA传送数据时,向DMAC发出DMA请求。 然后DMAC向CPU提出HOLD总线请求。 (3)CPU响应后,发HLDA响应给DMAC,并将总线暂交DMAC管理。当DMAC接收到HLDA后就可以接管总线,进行DMA传送。 (4) DMAC完成数据串传送后撤销HOLD请求,CPU恢复对总线的控制。
2、DMA操作的基本方法 (1). 周期挪用 (Cycle Stealing) 利用CPU不访问存储器的那些周期来实现DMA操作。此时,DMAC可以使用总线而不通知CPU也不会妨碍CPU的工作。但关键是如何识别CPU可挪用的周期,以免与CPU的操作发生冲突。某些CPU能产生一个表示存储器是否正在被使用的信号(M6800的VMA)。 特点:不影响不减慢CPU的操作; 需要复杂的时序电路; 数据传送过程是不连续的和不规则的
(2). 周期扩展 当需要进行DMA操作时,由DMAC发出请求信号给专门的时钟电路,时钟电路将供给CPU的时钟周期加宽,而提供给存储器和DMAC的时钟周期不变。CPU在加宽的时钟周期内操作不往下进行,而这加宽的时钟周期相当于若干个正常的时钟周期,用于进行DMA操作。加宽的时钟周期结束后,CPU仍按正常的时钟继续操作。 特点:降低了CPU的处理速度; 需要专门的时钟发生器/驱动电路; 数据一次只能传送一个字节。
(3). CPU停机 当需要进行DMA操作时,DMAC向CPU发出DMA请求信号,迫使CPU在先行的机器周期结束后,使地址、数据和部分控制信号线处于三态,即让出总线控制权,并给出一个DMA响应信号,使DMAC可以控制总线进行数据传送。直到DMA操作完成,CPU再恢复对总线的控制权,继续执行被中断的程序。 特点:在进行DMA传送期间,CPU处于空闲状态,降低 了CPU的利用率; 影响CPU对中断的响应和对动态RAM的刷新; 可进行单字节传送,也可进行数据块传送。
3. DMA传送方式: (1). 单字节方式: 每次DMA请求只传送一个字节数据,每传送一个字节,都撤消DMA请求信号并释放总线。 (2). 字节(字符)组方式: 每次DMA请求连续传送一个数据块,待规定长度的数据块传送完了以后才撤消DMA请求信号并释放总线。
DMA控制器(Intel8237) Intel8237/8237-2是可编程的DMA控制器,主要功能: (1) 有4个独立的DMA通道; (2) 各通道可分别允许和禁止; (3) 各通道的DMA请求的优先权可编程控制(固定/循环); (4) 各通道传送数据的最大长度可达64KB,字节计数器16bit; (5) 四种工作方式: 单字节传送、数据块传送、请求传送、级连 (6) 允许外界通过EOP信号来结束DMA传送或重新初始化。
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 A15 A14 & G1 G2A G2B C B A A13 A12 M/IO A5 A4 A3 & 第四节 I/O译码电路和PC机的地址分配 一、 I/O端口译码电路举例
I/O译码电路的端口地址分配表 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 地址范围(H) 1 1 0 0 0 0 0 0 0 0 0 0 0 C000C007 1 1 0 0 0 0 0 0 0 0 0 0 1 C008C00F 1 1 0 0 0 0 0 0 0 0 0 1 0 C010C017 1 1 0 0 0 0 0 0 0 0 0 1 1 C018C01F 1 1 0 0 0 0 0 0 0 0 1 0 0 C020C027 1 1 0 0 0 0 0 0 0 0 1 0 1 C028C02F 1 1 0 0 0 0 0 0 0 0 1 1 0 C030C037 1 1 0 0 0 0 0 0 0 0 1 1 1 C038C03F
AEN G1 G2A G2B C B A DMACS(8237) INTRCS(8259) Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 A9 A8 A7 A6 A5 T/CCS(8253) PPICS(8255) WRTDMAPG (写DMA页面寄存器) WRTNMIREG (写NMI屏蔽寄存器) IOW & & 二、 PC机的I/O端口地址分配 系统板上I/O端口的译码电路
地址范围(H) I/O设备(端口) 000—01F(00—0F) 8237A-5 DMA控制器 020—03F(20—21) 8259A 中断控制器 040—05F(40—43) 8253-5 计数器/定时器 060—07F(60—63) 8255A-5 并行接口 080—09F(80—83) DMA页寄存器 0A0—0BF(A0) NMI屏蔽寄存器 0C0—0DF 保留 0E0—0FF 保留 PC/XT机的系统板地址分配表