一.I/O控制方式概述
(一).课程地位与编程层级
《微机接口原理》是cs/ee专业的一门重要基础核心课程,该课程中涉及的计算机体系结构层次是软件层与硬件层的交界面,抽象层级高的语言是“面向对象编程”,类比固件编程就是“面向硬件编程”。从这个角度出发,不懂硬件就没办法编程设计。所以说接口编程是具象编程,没有抽象层级高的概念。
本课程是《计算机组成原理》、《汇编语言程序设计》的进阶课,为后续理解《计算机操作系统原理》的I/O控制打下底层基础。
(二).I/O控制方式与基本概念
在《计算机组成原理》中,讨论过接口的基本定义:(不是软件接口API,是硬件接口部件)
接口是介于总线与外设之间,与外设互联的标准化逻辑部件。
此外,对标准化总线也有总线接口,在本课程中不详细讨论。
接口逻辑功能主要有:
1.完成处理器指令
2.返回外设状态
3.数模转换
4.数据交互于缓存
5.设备片选
接口的功能决定了其硬件总是存在面向处理器、面向外设两个方向的管脚
如上图intel 8255A,其左侧管脚面向8086处理器,右侧管脚面向外设。
在《计算机组成原理》中,讨论过几种基本I/O控制方式如下所示:其中轮询方式和中断方式主要由软件实现:
轮询方式为“应答”逻辑,处理机循环等待外设输入,直至其有效输入时,退出循环。
中断方式为“程序切换”,处理机在无中断源时,按其主程序运行,响应中断时由中断隐指令(硬件)完成程序指针的切换和保存。中断子程序由软件编写
DMA(直接存储器访问)方式可以直接将数据直接通过总线送往主存,主要由DMAC(DMA控制器)进行控制。
通道方式由协处理器完成数据交互的控制,在微型计算机一般不使用,故在本课程中不详细讨论。
I/O控制 | 核心由软件实现 | 轮询方式(查询) | 微型计算机 | ||||
中断方式 | |||||||
核心由硬件实现 | DMA方式 | ||||||
通道方式 | 大型计算机 |
二.端口寻址
端口(port):计算机接口中可以由处理机直接访问的寄存器。
按其逻辑功能分为以下几类:
1.命令端口:接口芯片的工作方式可能多种多样,其命令字由CPU写入。
2.状态端口:寄存外设状态,CPU可以读取以获取其状态。
3.数据端口:数据缓存寄存器。
其中,每个端口有其唯一地址。
(一).端口编址方式
1.统一编址
将CPU寻址空间划分一部分给端口使用,内存地址和端口地址就不存在交集了,这样设计的目的是可以像访问内存单元一样访问端口。即使用MOV指令进行数据交互。
其优势是地址不重复,不用特殊的访问端口,对大型计算机很实用。
其缺陷是压缩了CPU的寻址空间,接口为了兼容传送指令,增加了地址译码电路。
2.独立编址
目前个人PC微机均采用独立编址方式:接口芯片内的端口地址,与主存分开编址,会出现地址重复,故要使用不同的指令访问端口:
如MOV 20H,AL和OUT 20H,AL访问的分别是主存20H单元、接口芯片20H端口。
其优势是不占用主存地址
其缺陷是要使用专用I/O指令访问端口
(二).端口访问
1.I/O指令(intel 8086)
在访问端口的指令中,最常用的是reg型外设指令:在8086下,其助记符如下
IN Reg , PORT
OUT PORT , Reg
IN指令是将数据从端口输入8086的寄存器,OUT指令则恰好相反。可以发现:所谓“in”、“out”是从处理器的角度出发命名的。
2.寻址方式
a.直接寻址
在指令中直接给出端口地址,对端口进行访问。
但是由于指令位长限制,IN、OUT指令直接地址只可以访问00H----FFH,即访问地址超过八位时,不可以使用直接寻址方式
b.间接寻址
将访问地址存入DX寄存器,对端口进行访问。
由于8086处理器中DX寄存器位长16位,故其寻址空间远远大于直接寻址范围。
3.地址选用原则
端口编址不可以出现冲突,系统设置的外部资源地址不可以使用、计算机厂家申明保留的地址不可以使用。在IBM体系结构下,用户原则上可以使用300H---31FH。
4.地址译码电路
a.全译码
将完整地址送入译码器用于译码
一般用于访问只有一个端口的接口芯片时使用,若一个接口芯片内有多个端口,接口芯片自身必然有选择线,采用全译码方式硬件过于冗余。
b.部分译码
只有高位地址参与译码,产生接口芯片使能信号,低位直接送入接口芯片
部分译码是最常用的端口寻址方式
如下图所示,A2--A4译码产生8255A使能信号 ~CS。
而A1、A0送入8255A,以选择其中的端口。
c.开关式译码
在部分译码的基础上,增加地址开关来改变端口地址,这一方式不常用。