#C0304
沧海茫茫千钟粟,且拾吾昧一微尘
——《沧海拾昧集》@CuPhoenix
【阅前敬告】
沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系
如有问题定为本集记录有谬,切勿深究
目录
引言:CPU与I/O接口
外设具有多样性,如信息传送形式(数字、模拟)、信息传输方式(串行、并行)、工作速度等方面,为了使CPU能适应多样的外设,需要在CPU与外设之间增加一个接口电路,起到信号转换、速度匹配、数据缓冲的功能,实现CPU与I/O设备之间的信息传输。
接口电路可以控制外设,有效提高CPU的传输效率。此外,还可以解决速度不匹配、信号不匹配、信号格式不匹配的问题。
CPU与I/O设备之间需要传输的信息有:数据信息(通常为8位或16位)、状态信息(反映了当前外设所处的工作状态,由外设通过接口传往CPU供其查询)、控制信息(由CPU通过接口传送给外设的控制其工作)。
一、微机接口技术
1、接口的功能
- 寻址功能:识别是否是I/O口的操作信号,识别是否为端口的片选信号,识别是芯片的哪个寄存器被访问。
- 输入/输出功能:根据CPU通过控制总线送来的读写信号决定是输入操作还是输出操作。
- 可编程功能:有些接口具有可编程特性,可以通过指令设定接口的工作方式,工作参数,以满足不同外设的要求。
- 数据转换功能:当外设提供的数据形式不是CPU能直接接受的形式时,则通过接口转换成CPU可接受的形式。如A/D,串/并转换等,反之也一样。
- 联络功能:当CPU要访问外设时,首先要查询外设状态,能否接受访问,接口应将外设状态准备好,供CPU查询;或向CPU发特定的信号通知外设已准备好。
- 数据缓冲功能:主机与外设速度相差很大,为了防止数据丢失,I/O接口均设有双向数据缓冲器。
- 中断管理功能:有专门的中断管理接口,能完成中断判优、中断屏蔽,向CPU送入中断类型码等功能。
- 错误检测功能:多数可编程芯片都能自动检测出传输过程中出现的错误。 传输错误:如串口中的奇偶校验,覆盖错误。
- 复位功能:能接受主机的复位信号,使系统重新启动。
- 时序控制功能:接口电路具有自己的时钟,以满足外设在时序方面的要求。
2、I/O接口的基本结构
- 端口
端口是接口电路或扩展部件中能被微处理器CPU直接访问(读/写)的寄存器,每个端口都有一个端口地址。在接口电路中,把分配了地址的寄存器或缓冲电路称为端口。每个端口都有一个地址。
数据信息、状态信息和控制信息可以分别有不同的寄存器,有的接口电路也共用寄存器。
- 地址译码电路
CPU在执行输入/输出指令时,首先要向地址总线发送端口地址,这些地址信号分为两部分,高位地址经过译码电路,用来选择不同的接口电路(片选),而低位地址用来选择接口电路内部的不同端口。
- 数据缓冲器与锁存器
接口电路内部具有数据缓冲器和数据锁存器,一方面协调CPU和外部设备之间的速度;另一方面,使得数据传输端在不传输数据时呈高阻状态。
3、端口的分类
数据端口 | 数据端口分为数据输入端口和数据输出端口。在输入时,保存外设发往CPU或内存的数据;在输出时,保存CPU或内存发往外设的数据。可读可写。 |
---|---|
状态端口 | 状态端口用来保存外部设备和接口电路本身的工作状态。CPU通过读取状态端口,就可以了解当前外设和接口电路的状态。只读不写。 |
控制端口 | 控制端口用来存放CPU发来的控制指令,初始化接口电路,确定接口电路的工作方式和功能。只写不读。 |
4、I/O端口的编址方式
- 统一编址
I/O与存储器的地址不重复,读写指令一致,只是根据地址来区分操作对象是存储器还是I/O。无需专门的I/O指令,对I/O操作指令丰富,可进行算术和逻辑运算。但占用存储器地址,因外设功能各不相同,需要复杂的电路进行时序配合。
- 单独编址
I/O与存储器的地址重复,用不同的读写信号和指令区分。 不占用存储器空间;I/O端口的地址空间独立;控制和地址译码电路相对简单;专门的I/O指令使程序清晰易读。但I/O指令单一。
二、程序方式传输数据
用程序来控制进行输入/输出数据传输的方式。分为无条件传送方式和条件传送方式(查询方式)两种。
1、无条件传送方式
假设外设已经准备就绪,不查询外设状态,直接执行I/O指令进行数据传输。
- 外设作输入设备:输入数据的保持时间相对于CPU的处理时间长,可以用缓冲器。
- 外设作输出设备:外设速度比较慢,CPU的数据必须在接口保持一段时间,必须采用锁存器。
无条件传输时,输出时,必须确认输出锁存器的原数据无效,才能正确输出;输入时,必须认为输入缓冲器中的数据已准备好,否则读取错误。
示例:如下图二极管接口电路,欲使LED自上而下依次发光2s,编写控制程序。
MOV AL,7FH
LOP: OUT 10H,AL
CALL delay2s
ROR AL,1
JMP LOP
2、条件传送方式
也称查询方式,一般查询传输时一个I/O设备有两个端口地址,一个为数据口地址,一个为状态口地址。CPU先读取状态口的数据,查询当前外设的状态是否为准备好,若准备好则开始读写数据口,传输数据;若未准备好则循环读取状态口地址等待外设准备好。
- 查询式输入
- STB*:在输入时随着数据一起从输入端口出现,表示输入数据已就绪的状态信号;
- 状态线占用一根数据线D0;
示例:从输入设备上输入1000个字节的数据,传送到存储器的缓冲区BUFFER中,外设数据端口42H,状态端口40H,状态线为DB0。
LEA SI,BUFFER
MOV CX,1000
LOP: IN AL,40H ;读状态口,仅D0有用
TEST AL,01H ;判断数据是否就绪
JZ LOP ;未就绪,重复读取
IN AL,42H ;读数据口
MOV [SI],AL
INC SI
LOOP LOP ;完成读入1字节,返回查询读入下一字节
HLT
- 查询式输出
- ACK*:输出信号,应答,为0表示数据已被外设取走,可以发送下一个数据;
- OBF:输入信号,为1表示输出缓冲器满,即数据已经到外设输入口;
示例:将内存中BUFFER开始的50个字节输出,外设数据端口62H,状态端口60H,状态线为DB0。
LEA SI,BUFFER
MOV CX,50
LOP: MOV AL,[SI]
OUT 62H,AL ;输出数据
LOP1: IN AL,60H ;读取状态口,仅D0有用
TEST AL,01H ;判断外设是否已取走
JNZ LOP1 ;未取走,等待
INC SI ;取走,输出下一个
LOOP LOP
HLT
3、条件传送方式的优先级
当系统较大时,CPU需对多台设备进行查询服务,就出现了设备的优先级的问题,即究竟先为哪台设备服务。
为了保证每台设备都有被查询服务的可能,系统可以采用轮流查询的方法来解决。先查询的设备具有较高的优先级,可以得到较早的服务,而后查询到的设备则具有较低的优先级。
三、中断方式传输数据
1、中断
当CPU正常运行程序时,由于内部或外部的随机事件,引起CPU暂时中止正在运行的程序,转而去执行请求中断的外设(或内部事件)的中断服务程序,中断服务结束后再返回被中止的程序。这一过程称为中断。
中断可以实现主机可以与外设同步并行操作。
- 中断源:能够引起程序中断的事件
- 已知的中断源:例如指令中断源,这类中断源是以指令的形式给出的。(如INT 20H,这条指令如同其它的汇编指令一样,是出现在程序中的,所以这个中断源什么时候发生是预先知道的)
- 随机的中断源:提出中断请求的时刻是未知的,例如硬件中断,中断源是通过中断控制接口电路输入至CPU的,中断源具体的发生时刻与外部硬件电路有关。
- 中断优先级
当系统中有多个中断源同时到来时,就需要将中断源排队,优先级高的中断服务程序先执行,执行完优先级别高的中断服务程序,再执行优先级别低的中断服务程序。
- 中断嵌套
高优先级别的中断打断当前低优先级的中断服务程序的执行。
- 中断类型码
中断类型码是指每个中断源的编号。每个中断源都有唯一的编号,每一个编号都对应各自的中断服务子程序。当响应中断时,必须首先获得中断类型码,有了中断类型码,才能找到对应的中断服务子程序。
2、中断响应过程
- 中断请求:外设(中断源)需要CPU服务时,要发出中断请求;
- 中断判优:同时有多个中断源同时发出中断请求,判别优先级最高的中断源并响应之;
判优方法 | 判优方式 | 判优电路 |
---|---|---|
软件查询法 | CPU响应中断后,在中断服务程序中用软件判断中断源。软件查询法只需有简单的硬件电路支持。简单易行,适合中断源数量较少的小系统。但速度慢,相对来说效率较低,对中断源多的系统该方法不可取。 | |
简单硬件方式 | 将所有的设备连成一条链,最靠近CPU的设备优先级最高,离CPU越远的设备优先级别越低。此方式下的硬件电路不是很复杂,也很容易实现。但链不能太长,否则链尾的设备就可能总是得不到服务。 | |
专用硬件方式 | 用可编程中断控制器作为专用的中断优先权管理电路,管理多级中断请求,进行优先权排队,设有中断屏蔽字寄存器,支持中断的嵌套,硬件的连线也发生了改变。由于中断控制器芯片可以通过编程来设置或改变其工作方式,因此使用起来方便灵活。 |
- 中断响应:CPU中断现在正在进行的处理任务,转向中断请求相对应的中断处理程序的过程;
响应过程: ①保护断点;
②保护现场;
③CPU关中断(不允许此时被新的中断源所打断);
④转入中断请求对应的处理程序(由中断源得到相应服务程序的入口地址)。
- 中断处理:执行中断服务子程序,以完成中断源提出的处理要求;
注:在中断服务程序中,用STI指令开中断,以实现中断嵌套,并对服务程序中的所用的寄存器应预先保护(若中断响应中CPU不是自动保护的话),而在服务程序后面加入恢复现场的语句。
- 中断返回:控制权由中断服务程序转移到被中断的程序(包含恢复现场的过程)。
四、DMA方式传输数据
1、DMA简介
DMA即存储器直接存取,外部设备利用专门的接口电路直接和存储器进行高速数据传送,不需经过CPU,不必进行现场保护等一系列额外操作,数据传输的速度基本上取决于外设和存储器的速度,效率大大提高。
存储器直接存取需要有专门的控制电路,用来控制外设与存储器之间的数据传输,这种设备称为DMA控制器。
DMA方式格外适用于高速外设及大量数据块传输的场合。
2、DMA传输流程
- 当外设准备就绪时,向DMA控制器发DMA请求,DMA控制器接到此信号后,经过优先级排队(如需要的话),向CPU发DMA请求(送至CPU的HOLD引脚)。
- CPU在完成当前总线周期后会立即对DMA请求做出响应。CPU的响应包括两个方面:一方面将控制总线、数据总线和地址总线置高阻,另一方面将有效的HLDA信号加到DMA控制器上,以此来通知DMA控制器,CPU已经放弃了对总线的控制权。
- DMA控制器收到HLDA信号后,即取得了总线控制权。这时,它往地址总线上发送地址信号(指出本次数据传输的位置),同时,发出相应的读/写信号(决定是进行输入还是输出操作)。
- 每传送一个字节,DMA控制器会自动修改地址寄存器的内容,以指向下一个要传送的字节。同时,修改字节计数器的内容,判别本次传输是否结束。
- 当字节计数器的值达到计数终点时,DMA过程结束。DMA控制器通过使HOLD信号失效,撤消对CPU的DMA请求。CPU收到此信号,一方面使HLDA无效,另一方面又重新开始控制总线,实现正常的运行。
敬谢诸君。
于金陵钟山之阳。