持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天!
系统控制模块
中断控制器
- 对SoC芯片中各个外设的中断进行管理,进行优先权排队,并送出IRQ(中断请求信号)信号给CPU 【中断控制器有三组寄存器存在:中断使能寄存器、中断状态寄存器、中断屏蔽寄存器】
- APB Slave
INTCC整体框架
- APB_interface: 是INTC与总线的接口模块;而又同时是INTC的控制模块,里面有INTC所有的寄存器信息;
- Int_gen: 用于接收中断源,选择中断源为irq或者fig;中断屏蔽;软件中断
- Priority_logic:
用于软件中断优先级屏蔽,并且在所有的未被屏蔽的中断信号里面选出优先级最高的中断源,并产生中断信号,分为irq模块和fig模块
IRQ中断产生
FIQ快速中断产生
中断源——内部中断
- RTC
- 秒中断、分中断、定时中断、Watchdog中断
- UART
- 数据发送结束中断,数据接收有效中断
- TIMER
- 定时/计时中断
- DMAC
- DMA错误和DMA传输完成
- LCDC
- 错误响应、帧结束、帧起始
- SPI
- FIFO空满、发送FIFO下溢、接收FIFO上溢
中断源——外部中断
- 比内部中断复杂,不可控
- 通常和GPIO口复用
- 中断源触发方式
- 上升沿触发
- 下降沿触发
- 高电平触发
- 低电平触发
- 外部中断信号特殊处理
- 去除毛刺、寄存、同步到总线时钟
- 外部中断需要清除
使用外部中断
- 清除外部中断
- 在使用外部中断之前,必须先清楚在此之前的中断信号
- 配置GPIO控制寄存器
- 先配置管脚方向为输入
- 再配置中断触发类型
- 最后配置管脚模式为中断模式
- 配置中断寄存器
- 设置INTC的中断屏蔽寄存器的相应位屏蔽中断
- 设置INTC的相应位以允许该中断源产生的中断
中断控制器的小结(1)
- 中断控制器
- 挂在APB总线上
- 对外部中断、内部中断、软件强制中断进行管理,送出IRQ信号给ARM
- 设计时考虑接口信号和 寄存器的设计
- APB接口信号
- 中断源信号
- 送给ARM的IRQ、FIQ信号
中断控制器的小结(2)
- 中断控制器产生IRQ中断送给ARM的过程
- 外设产生的内部中断
- 外设中断允许寄存器
- 外设中断屏蔽寄存器
- 与GPIO口复用的外部中断
- GPIO的管脚方向、管脚模式、中断触发类型
- 软件强制中断
- INTC
- 原始中断状态寄存器
- 中断允许寄存器
- 中断屏蔽寄存器
- 中断优先级寄存器
- 最终中断状态寄存器
- 送出IRQ信号给ARM
中断控制器的小结(3)
- ARM处理中断的过程
- 执行完当前指令后PC指向0x18
- 跳转指令跳转到IRQ中断服务程序
-
保存现场
-
调用C编写的中断服务程序
-
恢复现场
-
恢复PC
-
- 外设产生的内部中断