组成原理(十八):输入输出系统之 程序查询方式及其接口
程序查询方式是主机与外设之间进行信息交换最简单方式,程序查询方式的核心问题在于需要不断的查询I/O设备是否准备就绪。
1、程序查询方式
1.1、程序查询的基本思想
由CPU执行一段输入输出程序来实现主机与外设之间数据传送的方式称为直接控制方式。由外设的不同性质,这种传送方式可分为无条件传送和程序查询方式两种。
在无条件传送方式中,I/O端口总是准备好接受主机的输出数据,或总是准备好向主机输入数据,因而CPU无须查询外设的工作状态,而默认外设时钟处于准备就绪状态。
在CPU认为需要时,随时可直接利用I/O指令,访问相应的I/O端口,实现与外设之间的数据交换。
当CPU与外设工作不同步时,很难确保CPU在执行输入操作时,外设一定是"准备好"的;而在执行输出操作时,外设一定是"缓冲器空"的。为了保证数据传送的正确进行,要求CPU在程序中查询外设的工作状态。
若外设尚未准备就绪,CPU就循环等待,只有当外设已做好准备,CPU才能执行I/O指令进行数据传送,这就是程序查询方式。
1.2、程序查询方式的工作流程
程序查询方式的工作过程如下:
1、预置传送参数,在传送数据前,由CPU执行一段初始化程序,预置传送参数,传送包括存取数据的主存缓冲区首地址和传送数据的个数。
2、向外设接口发出命令字,当CPU选中某台外设时,执行输出指令向外设接口发出命令字启动外设,为接收数据或发送数据做应有的操作准备。
3、从外设接口取回状态字,CPU执行输入指令,从外设接口中取回状态字并进行测试,判断数据传送是否可以进行。
4、查询外设标志,CPU不断查询状态标志,若外设没有准备就绪,CPU就踏步等待,转至第3步,一直到这个外设准备就绪,并发出"外设准备就绪"信号为止。
5、传送数据,只有外设准备好,才能实现主机与外设间的一次数据传送。输入时,CPU执行输入指令,从外设接口的数据缓冲寄存器中接收数据;输出时,CPU执行输出指令,将数据写入外设接口的数据缓冲寄存器。
6、修改传送参数,每进行一次数据传送后必须要修改传送参数,包括主缓冲区地址加1,传送个数计算器减1。
7、判断传送是否结束,若传送个数计数器不为0,则转第3步,继续传送,直至传送个数计数器为0,表示传送结束。
程序查询方式工作流程图如下,程序查询的核心如图中虚线框部分,真正传送数据的操作由输入或输出指令完成。
2、程序查询方式接口
程序查询方式至少有两个寄存器,一个是数据缓冲寄存器,即数据端口,用来存放与CPU进行传送的数据信息;另一个是供CPU查询的设备状态寄存器,即状态端口,该寄存器由多个标志位组成,"外设准备就绪"标志最为重要。
2.1、输入接口
查询式输入接口电路,图中Ready为准备好触发器,对应于设备装改寄存器的Do位。
再输入设备准备好数据时,发出选通信号(STB),将数据送入锁存起,同时将Ready触发器置"1",以表示接口电路中已有数据(即准备就绪)。CPU要从外设输入数据时,先执行输入指令读取状态字,如Ready=1,再执行输入指令从锁存器中读取数据,同时Ready触发器清"0",以准备从外设接收下一个数据;如Ready=0,则踏步等待,继续读取状态字,直至Ready=1为止。
2.2、输出接口
查询式输出接口电路,Busy为忙触发器,对应设备状态寄存器的D7位。
输出时,CPU首先执行输入指令读取状态字,若Busy=1,则表示接口的输出锁存器是满的,CPU只能踏步等待,继续读取状态字,直至Busy=0为止;若Busy=0,则表示接口的输出锁存器是空的,允许CPU向外设发送数据。此时,CPU执行输出指令,将数据送入锁存器,并将Busy触发器置"1"。当输出设备把CPU送来的数据真正输出后,将发出一个-ACK信号,使Busy触发器置"0",以准备下一次传送。
多个外设的查询工作流程: