中断响应模块目前使用了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
欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~