第六章 输入/输出接口
1.输入/输出接口基础
- 输入/输出接口:简称I/O接口,I/O接口不仅包括包括外部设备与CPU或计算机之间的硬件电路,也包括相应的驱动程序。
1.1 接口和端口的概念
- 接口:微处理器通过接口电路可以接受外部设备送来的信息或将信息发送给外部设备。对于输入设备来说,能将输入设备送来的信息转换为CPU能接受的形式。对于输出设备来说,接口能将CPU送来的输出数据变为外部设备所需的形式。
- 端口:端口指的是接口电路中的一些寄存器。若干个端口加上相应的控制逻辑才能组成接口。
1.2 输入/输出接口功能与结构
- I/O接口的功能:
- ①设备选择功能(或称为地址译码功能)
- ②数据收发和格式转换功能
- ③接收解释执行CPU的控制命令的功能
- ④接收外设状态信息并发送给CPU的功能
- ⑤支持主机的程序查询、中断和DMA等接口信息传输控制方式的功能
- ⑥提供CPU和外设所需的缓冲、暂存、驱动能力,满足一定给的负载要求和时序要求
- ⑦错误检测功能
- ⑧复位功能
- I/O接口的结构:
下面是一种简单的I/O接口:
1.3 端口的编址方法和分配原则
- 统一编址:将存储器和I/O端口统一编址,即在存储器空间中划分出一段地址空间作为访问I/O端口的地址空间。这种方式可以充分利用存储器访问指令的强大功能,编写程序方便,但是减少了有效的存储器空间。如:ARM
- 独立编址:存储器和I/O端口分开编址,即存储器和I/O端口的地址空间彼此独立。这种方式使得程序员无序兼顾考虑I/O端口的地址空间和存储器的地址空间分配情况,但需要专门的I/O访问指令,不能利用灵活的存储器访问指令访问I/O端口。如:80x86
2.接口地址译码
接口地址译码:与存储器空间译码类似,包括片选和字选两部分。字选由芯片内部地址译码电路实现,用来确定接口芯片内部端口的具体地址。片选由外部译码电路实现,用来确定接口芯片内的所有端口所占用的地址范围,全译码、部分译码和线译码同样适用。
3.接口信息传输方式
3.1 程序查询传输方式
- 程序查询传输方式:是指CPU直接通过程序指令对I/O接口进行操作访问,CPU与外部设备交换信息的每一过程均在程序中直接表现出来。
- 特点:有效的解决了CPU与外设之间的同步和可靠数据传输问题,但CPU势必花费了许多时间用于查询外设的工作状态,工作效率低。
- 程序流程:
- ①从状态口中读取状态字
- ②根据约定的状态字格式,判断外设是否已就绪
- ③若外设没有准备好,重复前两步,直至就绪为止
- ④CPU执行输入/输出指令,从数据口读数据(或向数据口写数据)
- ⑤使状态字复位,为下次数据传输做好准备
3.2 程序中断传输方式
- 程序中断传输方式:是把程序查询传输方式中的I/O端口状态查询工作交给中断控制器去完成。
- 特点:解决了程序查询传输方式的问题。
- 中断的概念
- (1)中断源:指引起中断的时间或发出中断请求的来源。
- (2)中断向量:即中断服务子程序的入口地址。
- (3)断点:通常是指被中断的主程序正待执行的指令第一字节的存放地址。
- (4)现场:指中断发生前程序的运行状态,一般主要指系统标志寄存器和相关数据寄存器中的内容。
- (5)中断优先级:系统多个中断源可能同时提出中断请求时,需要按照中断的轻重缓急给每个中断源指定一个优先级别,这就是中断优先级。
- (6)中断嵌套:系统在为某个中断请求服务时,可能再次接收到其他中断请求信号,如果后来的中断请求的优先级比正在处理的中断请求的优先级高,则中断系统应该能再次中断正在执行的中断服务子程序,转去处理新的、优先级更高的中断请求,这就是中断嵌套。
- (7)中断屏蔽:在某些情况下,CPU可能暂时不对中断信号做出响应或处理,这种情况称为中断屏蔽。
3.3 直接存储器访问(DMA)方式
- DMA是通过硬件控制实现主存与I/O设备间的直接数据传送,在传送过程中无序CPU程序干扰。能够满足高速的批量数据传输。
- 特点:
- ①可在I/O设备和存储器之间直接传送数据
- ②传送时,源和目的均直接由硬件指定
- ③传输的数据块长度需要指定,技术由硬件自动进行
- ④在一批数据传输完成后,一般通过中断方式通知CPU进行后续处理
- ⑤CPU和I/O设备能在一定程度上并行工作,效率高
- ⑥一般用于高速批量数据的传输
4.并行接口
-
定义:CPU与外设交换数据的方式有两种:一种是串行传送,另一种是并行传输,即数据的各位同时传送,实现并行传送的接口电路称为并行接口。
-
根据有无握手信号,可分为:
- 无握手信号的并行接口
- 键盘接口
- 数码显示接口
- 带握手信号的并行接口
- 打印机
- ADC(数模转换器)
- 可编程并行接口(GPIO):允许用户通过写入不同的控制字改变其工作方式,从而适应更多的应用场合。
- 8255并行接口
- 无握手信号的并行接口
-
8255方式控制字
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
标志位 | A组控制 | A组控制 | A口 | C口高4位 | B组控制 | B口 | C口低4位 |
D7:标志位,D7=1
D6、D5:A组的工作方式选择
0 0 A端口工作在方式0
0 1 A端口工作在方式1
1 X A端口工作在方式2
D4:D4=0,A端口输出;D4=1,A端口输入
D3:D3=0,C口高4位输出;D3=1,C口高4位输入
D2:B组工作方式选择
0 B端口工作在方式0
1 B端口工作在方式1
D1:D1=0,B端口输出;D1=1,B端口输入
D0:D0=0,C口低4位输出;D0=1,C口低4位输入
- 8255复位控制字
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
标志位 | 未用 | 未用 | 未用 | C口 | 引脚 | 选择 | 置位/复位 |
D7:标志位,D7=0
D6、D5、D4:未使用
D3、D2、D1:C口引脚选择
0 0 0:选中PC0
0 0 1:选中PC1
0 1 0:选中PC2
0 1 1:选中PC3
1 0 0:选中PC4
1 0 1:选中PC5
1 1 0:选中PC6
1 1 1 :选中PC7
D0:D0=0,选中C口引脚输出0;D0=1,选中C口引脚输出1
5.串行接口
- 同步串行接口
- I2C接口
- SPI接口
- 异步串行接口
- UART