参考
https://blog.51cto.com/13475106/category6.html及狄泰软件相关课程
Q:不同外设如何下个处理器发送中断信号?当多个外设同时产生中断时,如何进行处理?
已知可以通过引脚与外设相连,但是实际上外设过多,同时产生中断,会产生错误,同时高速的CPU与低速的外设相连也是不符合实际的。这时需要一个中间代理来处理中断-8259A(两者之间的交互变简单)
一.8259A-可编程中断控制器
1.可通过编程对8259A进行功能设置
2.屏蔽外设中断,对中断进行优先级判决
3.向处理器通过中断向量
过程为:当一个外设与8259A相接时,首先会通过中断屏蔽寄存器(8个字节),在这里进行配置屏蔽(为0时放行,1时屏蔽),剩下的中断会进入中断请求寄存器,接下来通过INT引脚通知处理器,处理器进行应答,接下来会会通过PR优先判别,最后通过ISP对其寄存器进行处理(置1),最后处理器通过中断服务程序对外设进行处理,结束之后会在ISP将其置0.
8259A工作方式
a.中断触发方式
1.边沿触发-中断引脚电平变化的一瞬间认为中断申请到来(上升沿触发)
2.电平触发-中断引脚上的信号保持稳点电平一定时间后认为中断申请到来
b.数据连接方式
1.非缓存方式-将8259A直接与数据总线相连
2.缓冲方式-将8259A通过总线驱动器和数据总线相连
c.中断优先方式
1.固定优先级方式-优先级由高到低(这样会使得最低位的中断永远不会实现)
2.自动循环方式-某一中断请求被响应后,该中断源优先级自动为最低
3.特殊循环方式-通过编程指点其中断源优先级称为最低,其他中断源优先级自动改变
d.中断嵌套方式
1.完全嵌套方式(默认)-执行中断服务程序期间,不响应本级中断和较低级中断
2.特殊完全嵌套方式-执行中断服务程序期间,可响应本级中断,不想要较低级中断
e.中断屏蔽方式
1.普通屏蔽方式-将IMR中的某一位置为1,屏蔽掉相应级别的中断请求
2.特殊屏蔽方式-未被屏蔽的中断源均可在某个中断服务程序中相应,即低优先级中断可以打断正在服务的高优先级中断
f.中断结束方式
1.自动结束方式(适用于非多重中断的情况)-8259A自动清除ISR中已制位的优先级最高的位
2.手动结束方式-在中断服务程序的最后,向8259A发中断结束命令,将ISR中相应的位清除,表明中断服务程序已完成