Updated
S3C2240 中断机制
Table of Contents
课件内容实在头大,自己尝试梳理流程。
各组件功能
- CPU:(老板)单线程执行主程序,同时只能处理一件事。
- 中断控制器:(秘书)接收所有中断请求,协调处理顺序并负责中断 CPU 工作。
- 外设模块:(部门经理)管理具体的硬件设备,监控设备状态并报告事件。
- 中断源:(部门员工)监控事件,当事件发生时,向上发出中断请求。
完整中断流程
场景:UART 部门的小 X 监听到中断事件,向上传递。
-
向上报告
小 X 在部门内部的白板上标记,表示其负责的事件发生。
- 硬件层:
SUBSRCPND(子源未决寄存器)的INT_RXD0位变 1。 - 含义:记录“接收数据”这件事发生。
- 硬件层:
-
部门汇总
UART 部门只监测三种事件:接收数据(Rx)、发送数据(Tx)、报错(Err)。 不管哪件事发生,UART 的外设模块都会向上传递。
- 硬件层:
SRCPND(源未决寄存器)的INT_UART0位变 1。 - 含义:记录“UART 部门有事”发生。
- 硬件层:
-
查验黑名单
中断控制器先检查这件事是否在黑名单上(屏蔽寄存器
INTMSK和子屏蔽寄存器INTSUBMSK)。- 如果在黑名单上,忽略这件事。
- 如果不在黑名单上,开始处理。
-
争夺优先权
中断控制器对所有需要处理的事件决定处理顺序。 通过查询优先级表实现。
- 硬件层:仲裁器查询
PRIORITY寄存器的设置。 - 含义:确保事情可以依据优先级顺序得到处理。
- 硬件层:仲裁器查询
-
中断 CPU
轮到 UART 事件时,控制器上报 CPU。
- 硬件层:
INTPND寄存器的INT_UART0位变 1。 - 注意:
SRCPND里面可能有好几个 1(多个事件),但INTPND里只有 1 个 1。
- 硬件层:
-
CPU 处理
CPU 被中断时,先保存现场。后查询
INTPND,发现是 UART。 此时 CPU 跳转到中断向量表上对应的地址,开始执行代码(读取数据)。- 硬件层:CPU 根据中断向量表跳转到对应的中断服务程序(ISR)。
-
清除事件
CPU 处理完事件后,按“自下而上”顺序清除事件标志:
- 写 1 到
SUBSRCPND的INT_RXD0位,清除子中断源。 - 写 1 到
SRCPND的INT_UART0位,清除主中断源。 - 写 1 到
INTPND的INT_UART0位,清除当前正在服务的中断标志。
说明:这些寄存器通常是“写 1 清除”语义,写 0 无效。若不清除,中断可能会立即再次进入(假中断/重复中断)。
- 写 1 到
-
返回主程序
中断标志清除后,CPU 恢复现场并执行中断返回指令,回到被打断的位置继续运行主程序。