您的位置:首页 > 编程语言

保护模式下8259A芯片编程及中断处理探究(上)【4】

2013-04-25 15:05 183 查看
EOI也是OCW2型命令中的一种,当EOI位被置1,这就是一个EOI消息。SL是指定级别位,如果SL被置位,则表明这是一个指定级别的EOI消息,这个消息可以指定将ISR中的哪一位清零,即告诉8259A应当清除哪一个IRQ信号。L2、L1、L0就用来指定IRQ的编号。而在实际运用中我们却将SL及L2、L1、L0全置零。

SL置零表示这是一个不指定级别的EOI消息,则8259A芯片自动将ISR中所有被置位的IRQ里优先级最高的清零,因为它是正在被处理及等待处理的中断中优先级最高的,也就一定是CPU正在处理的中断。

现在再来看看优先级控制命令。

当R为0时,表明这是一个固定优先权方式,IRQ0最高,IRQ7最低。

当R为1时,表明这是一个循环优先权,比如,如指定IRQ2最低,则优先级顺序就为:

IRQ2 < IRQ1 < IRQ0 < IRQ7 < IRQ6 < IRQ5 < IRQ4 < IRQ3

(编者注:可以将其记忆为“IRQ7<IRQ6<IRQ5<IRQ4<IRQ3<IRQ2<IRQ1<IRQ0”进行循环左移后的结果)

也即,如果IRQ( i )最低,那么IRQ( i + 1 )就最高。

所以,在这种方式下需要先行指定一个最低优先级。如果SL被清零,则表示使用自动选择方式,那么正在被处理的中断服务在下一次,就被自动指定为最低优先级。如果SL被置位,那么L2、L1、L0所指定的IRQ就被指定为最低优先级。

在指定优先级的时候,也可通过置位EOI,即可以将指定优先级命令与中断结束消息同时发送。

上面的描述看起来很复杂,其实对于一般的操作系统编写来说大多就使用一种形式:0010 0000,我也很乐意将其称为EOI消息。

还有一个OCW3命令字,可以指定特殊的屏蔽方式及读出IRR与ISR寄存器,不过一般在操作系统中并不需要这样的操作。在操作系统编写中一般只用到前面两个命令字的格式(至少pyos是这样:))由于本文并非硬件手册,只想为操作系统的编写提供一点帮助,因此,如果你想了解完整的OCW3命令字格式,请查阅相应的硬件手册,或本文的参考资料1。

五、上篇结束语

在这一篇中,较为详细的描述了对8259A中断控制器芯片编程所需具备的基础知识,在编写操作系统的过程中,我们就需要向相应端口发送相应的ICW或OCW,完成对8259A的操作,具体的代码将在下篇中描述。

在下篇中将更主要的描述操作系统对中断服务程序的处理及安排,并以开发中的pyos做为例子进行实验。

参考文献

1. 张昆藏. 《IBM PC/XT微型计算机接口技术》. 清华大学出版社. 1991.3.

[1] 谢煜波,哈尔滨工业大学计算机科学与技术学院硕士研究生,电子邮件:xieyubo@126.com

保护模式下的8259A芯片编程及中断处理探究(上)(Version0.02)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: