问题
不同外设怎么向处理器发送中断信号?
当多个外设同时产生中断时,如何进行处理?
想象中的连接方式
处理器只有一个INTR引脚,超高速的处理器也没有必要和超低速的外设直接相连,所有就需要一个中间代理8259A 。
处理器的中断代理 (8259A)
8259A是处理器的中断功能模块,用于管理和裁决外部设备的中断请求。
8259A是专为处理器设计的中断管理芯片
可通过编程对8259A进行功能配置
屏蔽外设中断,对中断进行优先级裁决
向处理器提供中断向量
对8259A的编程控制是操作系统内核的重要工作
8259A芯片的内部结构
IMR中的位与引脚一一对应;被设置为1的位,其对应引脚的中断被屏蔽;被设置为0的位,其对应引脚的中断被放行。
IRR中的位与引脚一一对应;被设置为1的位,代表其对应引脚有中断请求。
ISR中的位与引脚一一对应;如果被置1,表明其对应引脚的中断正在被处理。
8259A关键组成简介
INT:选出优先级最高的中断请求后,发信号通知CPU
INTA:中断响应信号,接受来自CPU的INTA接口的中断响应信号
PR:优先级仲裁器,当多个中断同时发生时,找出优先级最高的中断
IMR:中断屏蔽寄存器,用来屏蔽某个外设的中断
ISR:中断服务寄存器,当某个中断正在被处理时,保存在此寄存器
IRR:中断请求寄存器,用来接收经过IMR寄存器过滤后的中断信号并锁存,此寄存器中全是等待处理的中断
中断响应流程
8259A工作方式
中断触发方式
边沿触发 (推荐)
- 中断引脚电平变化的一瞬间认为中断申请到来 (上升沿触发)
电平触发
- 中断引脚上的信号保持稳定电平一定时间后,认为中断申请到来
数据连接方式
非缓存方式
- 将8259A直接与数据总线相连
缓存方式
- 将8259A通过总线驱动器与数据总线相连
中断优先方式
固定优先级方式
- 优先级由高到低的方式是:IR0,IR1,IR2,...,IR7
自动循环方式
- 某一中断请求被响应后,该中断源自动成为最低
特殊循环方式
- 通过编程指定某中断源优先级成为最低
- 其他中断源优先级自动改变
中断嵌套方式
完全嵌套方式 (默认方式)
- 执行中断服务程序期间,不响应本级中断和较低级中断
特殊完全嵌套方式
- 执行中断服务程序期间,可响应本级中断,不响应较低级中断
中断屏蔽方式
普通屏蔽方式
- 将IMR中的某一位或几位置为1,屏蔽相应级别的中断请求
特殊屏蔽方式
- 未被屏蔽的中断源均可在每个中断服务程序中被响应,即低优先级中断可以打断正在服务的高优先级中断
中断结束方式
自动结束方式 (只适用于非多重中断的情况)
- 8259A自动清除ISR中已置位的优先级最高的位
手动结束方式
- 在中断服务程序的最后,向8259A发中断结束命令,将ISR中相应的位清除,表明中断服务程序已完成