Return
Updated

S3C2240 中断机制

Table of Contents

课件内容实在头大,自己尝试梳理流程。

各组件功能

  1. CPU:(老板)单线程执行主程序,同时只能处理一件事。
  2. 中断控制器:(秘书)接收所有中断请求,协调处理顺序并负责中断 CPU 工作。
  3. 外设模块:(部门经理)管理具体的硬件设备,监控设备状态并报告事件。
  4. 中断源:(部门员工)监控事件,当事件发生时,向上发出中断请求。

完整中断流程

场景:UART 部门的小 X 监听到中断事件,向上传递。

  1. 向上报告

    小 X 在部门内部的白板上标记,表示其负责的事件发生。

    • 硬件层:SUBSRCPND(子源未决寄存器)的 INT_RXD0 位变 1。
    • 含义:记录“接收数据”这件事发生。
  2. 部门汇总

    UART 部门只监测三种事件:接收数据(Rx)、发送数据(Tx)、报错(Err)。 不管哪件事发生,UART 的外设模块都会向上传递。

    • 硬件层:SRCPND(源未决寄存器)的 INT_UART0 位变 1。
    • 含义:记录“UART 部门有事”发生。
  3. 查验黑名单

    中断控制器先检查这件事是否在黑名单上(屏蔽寄存器 INTMSK 和子屏蔽寄存器 INTSUBMSK)。

    • 如果在黑名单上,忽略这件事。
    • 如果不在黑名单上,开始处理。
  4. 争夺优先权

    中断控制器对所有需要处理的事件决定处理顺序。 通过查询优先级表实现。

    • 硬件层:仲裁器查询 PRIORITY 寄存器的设置。
    • 含义:确保事情可以依据优先级顺序得到处理。
  5. 中断 CPU

    轮到 UART 事件时,控制器上报 CPU。

    • 硬件层:INTPND 寄存器的 INT_UART0 位变 1。
    • 注意:SRCPND 里面可能有好几个 1(多个事件),但 INTPND 里只有 1 个 1。
  6. CPU 处理

    CPU 被中断时,先保存现场。后查询 INTPND,发现是 UART。 此时 CPU 跳转到中断向量表上对应的地址,开始执行代码(读取数据)。

    • 硬件层:CPU 根据中断向量表跳转到对应的中断服务程序(ISR)。
  7. 清除事件

    CPU 处理完事件后,按“自下而上”顺序清除事件标志:

    • 写 1 到 SUBSRCPNDINT_RXD0 位,清除子中断源。
    • 写 1 到 SRCPNDINT_UART0 位,清除主中断源。
    • 写 1 到 INTPNDINT_UART0 位,清除当前正在服务的中断标志。

    说明:这些寄存器通常是“写 1 清除”语义,写 0 无效。若不清除,中断可能会立即再次进入(假中断/重复中断)。

  8. 返回主程序

    中断标志清除后,CPU 恢复现场并执行中断返回指令,回到被打断的位置继续运行主程序。