中断响应模块目前使用了8259A PIC芯片进行中断处理。使用两块8259A芯片级联,并采用AEOI、FNM全嵌套、无缓冲模式进行处理。
端口:
主芯片的IO端口号为0x20、0x21, 从芯片的IO端口号为0xa0、0xa1.
级联结构:
中断引脚与外部设备对照表
8259A | PIN | 中断请求源 |
---|---|---|
主芯片 | IR0 | timer时钟 |
| IR1 | 键盘 |
| IR2 | 级联从8259A芯片 |
| IR3 | 串口2 |
| IR4 | 串口1 |
| IR5 | 并口2 |
| IR6 | 软驱 |
| IR7 | 并口1 |
从芯片 | IR0 | CMOS RTC实时时钟 |
| IR1 | 重定向到主芯片的IR2引脚 |
| IR2 | 保留 |
| IR3 | 保留 |
| IR4 | PS/2鼠标 |
| IR5 | 协处理器 |
| IR6 | SATA主硬盘 |
| IR7 | SATA从硬盘 |
初始化中断处理模块
- 定义了保存寄存器的宏定义
- 使用Build_IRQ宏,创建每个中断号的中断入口函数。
- 初始化中断门(使用ist=2)
- 设置主、从芯片的ICW1-4以及OCW1.
中断处理流程
- 在中断入口处,保存寄存器
- 将返回地址压入堆栈
- 跳转到do_IRQ()函数
- 发送EOI到PIC,结束中断。
返回,恢复寄存器
转载请注明来源:https://longjin666.cn/?p=1338