第六章 I/O 接口
第一节 概 述一、 I/O 接口的功能 二、 I/O 接口的一般结构
第二节 I/O 端口的寻址方式和指令一 . I/O 指令寻址 二 . 存储器映象寻址 三、 8086 的 I/O 指
令第三节 CPU 与外设间的数据传送方式
一、无条件传送 二、查询传送三、 中断传送 四、直接存储器存取 DMA
第四节 I/O 译码电路和 PC 机的 I/O 地址分配
一、译码电路举例 二、 PC 机的 I/O 端口地址分配
6 - 2 , 6 -7
第一节 概 述
一、 I/O 接口的功能
1. 采用 I/O 接口的必要性* 外围设备的品种繁多 机械,电子,机电,磁电,光电
* 所传输的信息的要求不同 数字,模拟,电压,电流等
2. 计算机与外设之间的信息交换应解决的问题:* 速度不匹配
* 信号电平不匹配
* 信号格式不匹配
* 时序不匹配
3. I/O 接口应具有的功能(解决的方案)
* 设置数据缓冲器以解决两者速度差异所带来的不协调问题; 输入: 输入设备数据线 三态缓冲器 DB CPU
寻 址 等待数据输入 读入数据
确定输入端口地址
AB 、 M/ IO 、 ALE 、 DT/R
等待数据输入
输入缓冲器
输入缓冲器
DB CPU
输出: CPU DB 锁存器 输出设备数据线
寻 址 输出数据 等待数据输出
确定输出端口地址
AB 、 M/IO 、 ALE 、 DT/R
CPU DB
输出锁存器
等待输出设备
从锁存器取走数据
* 设置信号电平转换电路以解决两者之间信号电平的不一致问题
例如:在串行通信中,常采用 MC1488 , MC1489 等芯片实现
电平转换。
* 设置信息转换逻辑以满足对各自信号格式的要求
例如: A/D 转换, D/A 转换,串 / 并转换,并 / 串转换等。
* 设置时序控制电路以同步 CPU 和外设的工作
接口电路接收 CPU 送来的命令或控制字,实施对外设的控
制和管理;外设的工作状态和应答信号也通过接口及时返
回给 CPU (设备就绪,忙,缓冲器满,空),保证 CPU
与
外设工作实现同步。
* 提供地址译码电路
CPU 与多个外部设备交换信息;
每个外部设备通常包含若干个端口(数据,控制,状态)。
* 最好可编程应用
信号: CPU 与外设之间传送的信号有:数据、状态、控制状态信号:反映外设当前所处的工作状态。 输入设备数据准备好, READY = 1 输出设备正忙于处理, BUSY = 1 。控制信号:控制外设的工作。 CPU 启动或停止外设工作, CPU 确定外设的工作方式。端口:一般接口电路中通常设置三个端口:数据端口 ( 输入 / 输出 ) ;状态端口;控制或命令端口。
二、 I/O 接口的一般结构
C P U
AB
DB
M / IO
WR
RD
接
口
数据
状态
控制
外部设备
第二节 I/O 端口的寻址方式和指令
一 . I/O 指令寻址
存储器和 I/O 端口在两个独立的地址空间中, I/O端口的读、写用 IOR 和 IOW 控制信号实现,访问I/O 端口用专用的 IN 或 OUT 指令。
CPU
存储器 I/O 口
AB
DB
控制逻辑CB
MEMR MEMW IOR IOW
二 . 存储器映象的 I/O 寻址
存储器和 I/O 端口共用一个地址空间, I/O 端口的读、写用 RD 和 WR 控制信号实现,所有访问存储器的指令都可以用于 I/O端口。
CPU
存储器 I/O 口
AB
DB
RD
WR
输入输出端口地址在指令中以立即数 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)
三、 8086 的 I/O 指令
第三节 CPU 与外设间的数据传送方式
输入: CPU 在执行 IN指令前,输入三态缓冲器已准备好。
输出: CPU 在执行 OUT 指令前,输出锁存器已空。
一、无条件传送
AB
外设输入数据
三态缓冲器
地址译码
RD
DB
n
输入端口 n
无条件输入
M/IO
输出外设数据 锁
存
器 地址译码
WR
DB
AB
n输出
端口 n
无条件输出
M/IO
例:有 8 个模拟电压,共用一个 4 位十进制 BCD(16bit,2byte)A/D 转换器。由 CPU 控制 8 个继电器,依次实现 8 个模拟电压的 A/D 转换,并把数据存储在 DSIO 为首地址的内存单元。
11 20
8 位 8 位
8 8 8
88 8
P0P1P7
K0K1K7
输入数据 ( 模拟量 )
DB
M/ IO^RD^10 M/ IO^RD^11
M/IO^WR^20
CPU
缓冲寄存器功率放大器
10
. . . . . .
输入数据口地址:
11H( 高 8 位 ) 、 10H( 低8 位 )
输出控制口地址: 20H注意: 1 、继电器触点闭合和释放需要时间等待。
2 、 A/D 转换器转换需要时间等待。
实现无条件传送的方法:
CPU 以足够延时等待使外设数据准备好
P0 初始吸合代码 01HDH
继电器全释放 00H DLDSIO 首地址 BX
断开所有继电器等待触点释放
选择继电器 , 开始 A/D 转换
等待触点闭合和 A/D 转换结束
数据输入并存放修改下一闭合继电器
修改存放地址
判终点
AGAIN
N
Y
二、查询传送
CPU 需不断查询外设的状态,一旦外设满足数据传送的条件,就执行 IN 或 OUT 指令,读入或输出数据。
输入外设状态信号 Ready
Ready=1
输入数据
N
查询输入
Y
输入外设状态信号 Busy
Busy=1
输出数据
Y
查询输出
N
查询输入接口电路(组成) IN AL , DATA_PORT
工作原理IN AL , STATUS_PORT
输入装置
锁存器
D R Q
三态缓冲
器
三态缓冲
器
地址译码
AB
数据端口
状态端口
D7
数据
选通
DB
Ready
RD
M/ IO
RD
+5V
M/ IO
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
查询输入的编程
IN AL , STATUS_PORT
OUT DATA_PORT , AL 查询输出接口电路(组成)
工作原理
锁存器输
出装置
Q DR
三态缓冲
器
地址译码
器AB
数据端口
状态端口
D7
数据
启动
DB
ACKBusy
VCC
M/IO
RD
WR
M/IO
3 、输出设备取走数据,应答信号 ACK 的负跳变 (恢复 ) 使D 触发器清“ 0” ,即置 Busy=0 ,允许 CPU 送出下一个数据
1 、查询状态信号,执行 指令 IN AL ,状态口 Busy(bit7) AL
2 、若 Busy =0 ,执行指令 OUT 数据口, AL , 输出数据 AL DB 锁存器 输出装置; D 触发器置 1 ,即置 Busy=1 ,表示忙碌,禁止输出
POLL : IN AL , STATUS_PORT TEST AL , 80H JNE POLL MOV AL , STORE ;从数据区取数 OUT DATA_PORT , AL
查询输出的编程
例:查询数据输入,有 8 个模拟电压,一个 8bitA/D 转换器。由 CPU 控制一个 8 选 1 多路开关,以及 A/D 转换启动。依次实现 8 个模拟电压的 A/D 转换,并把数据存储在 DSTORE为首地址的内存单元中。(组成)
M/ IO^WR^43 2 4
A/D 转换
8bit bit0 8
D4
数据 READY
DB
M/IO^RD^3
M/ IO^RD^2CPU 数据
启动
输入数据
八个模拟量
D2
D1
D0
1 个模拟量 多路开关
输入数据口地址: 3
输入状态口地址: 2
bit0 , A/D 转换结束信号
输出控制口地址: 4
bit0~2 ,多路开关选择输入端
bit4 , A/D 转换启动信号
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 ;判终点
关于多路开关选择和 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
无条件、查询传送都需要 CPU 的等待或不断查询,使CPU 的效率降低。中断传送:外设需要传送数据时,申请中断;当 CPU允许中断,在中断服务程序中执行 IN /OUT指令;然后返回主程序。
启动外设
主程序
外设准备好输入设备 Ready=
1输出设备 Busy=0
中断请求 中断响应 数据 IN/OUT
中断服务程序
IRET
中断响应
外设又一次准备好中断请求
三、 中断传送
中断输入接口电路(组成)
数据准备就绪,发选通信号
向 CPU发中断请求
CPU响应中断,进入中断响应周期
中断服务程序中,读入数据
工作原理
AB
中断类型号 INTA
输入装置
锁存器
D R Q
三态缓冲
器
装置中断允许
地址译码
器
数据端口
数据
选通
DB
INTR
RD
M/IO
三态缓冲器DB
1 、 DMA 传送的基本概念 无条件、查询、中断传送,每传送一个数据都需要 CPU干预一次,限制了数据传送的速度。
输入设备
输出设备CPU 内存
DMA ( Direct Memory Access ):是一种不需要 CPU
干预也不需要软件介入的高速数据传送方式。在外设 ( 如磁盘 ) 与内存之间成批传送数据时,完全由硬件完成外设与内存的数据传送,而不必 CPU 的干预。对这一数据传送过程进行控制的硬件称为 DMA 控制器( DMAC )。
四、直接存储器存取 DMA
问题: (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请求信号并释放总线。
(1) 有 4 个独立的 DMA 通道;
(2) 各通道可分别允许和禁止;
(3) 各通道的 DMA请求的优先权可编程控制 (固定 /循环 ) ;
(4) 各通道传送数据的最大长度可达 64KB ,字节计数器 16bit ;
(5) 四种工作方式:
单字节传送、数据块传送、请求传送、级连
(6) 允许外界通过 EOP 信号来结束 DMA 传送或重新初始化。
DMA 控制器 (Intel8237)
Intel8237/8237-2是可编程的 DMA 控制器,主要功能:
第四节 I/O 译码电路和 PC 机的地址分配
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
&
&
A15A14
A13A12
A5
A4
A3
M/IO
G1
G2A
G2B
C
B
A
一、 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
I/O 译码电路的端口地址分配表
二、 PC 机的 I/O 端口地址分配
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
A9
A8
A7
A6
A5
G1
G2A
G2B
C
B
A
&
&
AEN
IOW
DMACS ( 8237 )
WRTDMAPG(写 DMA页面寄存器)
T/CCS ( 8253 )PPICS ( 8255 )
INTRCS ( 8259 )
WRTNMIREG(写 NMI屏蔽寄存器)
系统板上 I/O 端口的译码电路
PC/XT 机的系统板地址分配表
地址范围( 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 保留