微机原理(学习笔记):第6章输入输出技术(车向泉版)

考纲:

第10周周四上:

http://newesxidian.chaoxing.com/live/viewNewCourseLive1?liveId=10492963

程序查询IO方式:

无条件传送方式:

有一些外设不需要查询它是否忙,直接对它读写,例如:开关、发光二极管、继电器

如何读开关的状态呢?

设置一个三态门,当我们给三态门加一个有效信号的时候,三态门就将开关的状态输出出来

(防止总线竞争)

这个有效信号如何生成呢?

可以用一个接口地址译码电路 来生成一个信号。也就是说我们用in指令来读接口的状态,给三态门发一个接口的地址,接口地址经过接口地址译码电路(如果地址正确)生成一个有效信号给三态门,让三态门导通。

注意:x86 接口地址只有16位

8086CPU 会在IOR信号的上升沿采样数据总线的低8位,将其送到寄存器

读输入设备 设计框图:

输出设备:

以最简单的指示灯为例:

要稳定的控制输出设备,输出接口上必须接一个具有存储功能的东西。

例如用D触发器,向D触发器写入一个0,那么只要CLK没有遇到上升沿,那么D触发器中

一直保持0,一直让指示灯亮

当然也可以用锁存器来替换D触发器

注意 数据线低8位一定是接偶地址单元 高8位一定是接奇地址单元

锁存器作为数据输出接口的一般连接模式

查询方式:

传输数据前先判断设备忙不忙

例如:

首先读取BUSY,如果BUSY是低电平

就加载数据到数据线,直到数据稳定时

加载一个STB 写信号,向外设写入,

此时外设的BUSY变为高电平,表示忙

如何读BUSY是否忙不忙:

第10周周四下:

多外设查询:

中断方式

标志寄存器入栈

关中断,响应中断过程不允许被再次中断

CS,IP入栈

第一次INTA:CPU通过INTA 中断应答引脚 发送一个负脉冲,告诉可编程中断控制器8259 :你刚才发出的中断请求我正在响应,你把中断向量码准备好

第二次INTA:CPU向8259发送第二次负脉冲,这时8259收到后,就应该将中断向量码放在

第8位的数据总线上,发送给CPU,CPU采样低8位的数据总线。

计算向量地址

查中断向量表,得到中断处理程序的内存首地址

STI 开中断指令:允许中断

第11周上:

可编程中断控制器8259

SP/EN:区分主片还是从片

IRR :中断请求寄存器

IR2 IR3 IR5 三个中断源 同时发来中断请求,所以这三位为1

IMR 中断屏蔽寄存器

IR2 的中断请求被被屏蔽了

ISR 中断服务寄存器

说明当前CPU正在执行IR6和IR4的中断请求,只能被有限级更高的中断源打断

比如说我们采用固定优先级,IR0优先级最高,IR7优先级最低

因为IR3 的优先级比IR4和IR6更高,所以8259会替IR3向CPU发送中断请求INT

为什么ISR中有多个1呢?

一定是中断嵌套,即正在执行中断时,被更高优先级的中断源给中断。

当8259收到INTA 中断应答时,会将IRR中对应位清0

将ISR中对应位置1

当CPU执行到中断例程的末尾时,将会向8259发送EOI命令

8259收到EOI命令后,就会将ISR中对应位置为0,表示中断例程已经执行结束

EOI命令:一般中断结束命令 End Of Intercept,因为有优先级的概念,所以

中断嵌套的情况下,先结束的必然是优先高的中断请求,所以不需要明确告诉

8259将哪一位清0,只需要从右向左清0即可。

特殊中断结束命令:允许中断中断嵌套,但是没有正常优先级的概念,需要明确告诉8259该把哪一位清0

自动结束方式:不允许中断嵌套,所以ISR中只可能有一位为1,这种情况下不需要CPU向

8259发送EOI命令,8259会自动在第二个INTA信号后,直接将该位清0。

8259工作方式:

加电后默认是固定优先级

如果8259的数据总线如果要加双向驱动器,就让8259工作在缓冲方式下。

这时SP/EN引脚就是EN功能,双向驱动器的OE 引脚的信号由8259的EN引脚来提供。

那么如何区分主片还是从片呢?这时需要向特定寄存器中的某一位写入0或者1来区分主片

还是从片。

否则就让8259工作在非缓冲方式下:

SP/EN 加高电平就是主片,加低电平就是从片

优先级规定:

今年补考题考过自动循环优先级:

比如说IR4被处理后,其优先级会自动被降为最低,即IR7之后。

题目可能让你写出现在的优先级顺序

指定循环优先级:想要修改默认的优先级,修改完成后,就固定下来。

例如指定IR3 的优先级最高,那么优先级的顺序就为IR3 IR4 IR5 IR6 IR7 IR0 IR1 IR2

如果不需要级联:一般嵌套方式

如果需要级联,级联方式下的主片应该设置为特殊全嵌套方式

如果设置为一般嵌套方式(只允许高优先中断请求来中断当前中断例程),就会存在以下问题:

特殊全嵌套方式:

同级和更高级都能中断当前中断例程

从片以及单片工作时都设置为一般嵌套方式

主片和从片如何嵌套工作的?

从片的两个SP必须接地,表示是从片

ICW3 3号初始化命令字,是8259内部的一个寄存器

这个寄存器要针对电路的连法设置为相应的内容,

例如两个从片分别接到了主片的IR3和IR6上

所以主片的ICW3的3和6位上应该为1,告诉主片IR3和IR6接的是从片

而不是中断源

上面的从片接的是主片的IR3 ,所以ICW3应该设置为011

下面的从片接的是主片的IR6,所以它的ICW3应该设置为110

中断应答:

主片在收到中断应答之后,当然会将中断服务寄存器相应位置1,中断请求寄存器相应位清0

但是两个从片都收到了中断应答,谁来响应这个中断应答呢?

主片在收到中断应答后,CAS引脚三根线会发送一个级联地址出来

比如说送一个011,那么从片1就会响应中断应答,将自己的

中断服务寄存器相应位置1,中断请求寄存器相应位置0

当8086送第二个INTA 负脉冲来的时候,由从片来提供中断向量码

8086的第一个INTA负脉冲相当于将从片1选中了,

所以当第二个INTA负脉冲来的时候,

从片1就会将中断向量码送到D0到D7上发送给CPU

8086CPU在INTA的上升沿采样低8位的数据总线就可以得到中断向量码

OCW1 中断屏蔽寄存器

第11周下:

ICW2:中断向量码的高5位是可以写入的,低3位是写入不了的

低3位是由8个中断源的编号决定的。

比如说,向高5位写入01001 那么IR0中断源对应的中断向量码

就是01001 000 就是48H

ICW4:

如果8259级联工作,主片的SFNM一定要写1,让它工作在特殊全嵌套方式下

单片工作和多片级联下的从片工作在一般嵌套方式下,SFNM一定要写0

ocw1:

OCW2:通过写这个寄存器可以给8259发EOI命令,设置优先级

OCW3:

使用8259:

8259的A0接的是系统总线的A1

数据总线接的是8086数据总线的低8位

8086CPU不论是访问接口还是访问内存:

如果访问的偶地址的字节,一定会通过低8位来传输

如果访问的奇地址的字节,一定会通过高8位来传输

由此我们推断8086访问8259,访问的接口地址一定是偶地址

也就说A0一定是0

读信号写信号一定要连接接口读,接口写,去读和写接口芯片内部的寄存器

分析占用的接口地址为:

FF00H 和 FF02H

13 0001 0011

单片工作不需要写ICW3 ,ICW3要跳过

测试程序:

第12周上:

http://newesxidian.chaoxing.com/live/viewNewCourseLive1?liveId=10492965

第12周下:

http://newesxidian.chaoxing.com/live/viewNewCourseLive1?liveId=10492966
 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值