目录
- 一、中断基础概念
- 二、中断管理使用说明
- 三、中断管理模块接口
- 四、代码分析(待续...)
- 坚持就有收获
一、中断基础概念
- 在程序运行过程中,出现需要由 CPU 立即处理的事务时,CPU 暂时中止当前程序的执行转而处理这个事务,这个过程叫做中断。当硬件产生中断时,通过中断号查找到其对应的中断处理程序,执行中断处理程序完成中断处理。
- 通过中断机制,在外设不需要 CPU 介入时,CPU 可以执行其它任务;当外设需要 CPU 时,CPU 会中断当前任务来响应中断请求。这样可以使 CPU 避免把大量时间耗费在等待、查询外设状态的操作上,有效提高系统实时性及执行效率。
- 当硬件产生中断时,通过中断号查找到其对应的中断处理程序,执行中断处理程序完成中断处理。
中断的相关概念:
- 中断号:中断请求信号特定的标志,计算机能够根据中断号判断是哪个设备提出的中断请求。
- 中断请求:紧急事件向 CPU 提出申请(发一个电脉冲信号),请求中断,需要 CPU 暂停当前执行的任务处理该紧急事件,这一过程称为中断请求。
- 中断优先级:为使系统能够及时响应并处理所有中断,系统根据中断事件的重要性和紧迫程度,将中断源分为若干个级别,称作中断优先级。
- 中断处理程序:当外设发出中断请求后,CPU 暂停当前的任务,转而响应中断请求,即执行中断处理程序。产生中断的每个设备都有相应的中断处理程序。
- 中断触发:中断源向中断控制器发送中断信号,中断控制器对中断进行仲裁,确定优先级,将中断信号发送给 CPU。中断源产生中断信号的时候,会将中断触发器置“1”,表明该中断源产生了中断,要求 CPU 去响应该中断。
- 中断向量:中断服务程序的入口地址。
- 中断向量表:存储中断向量的存储区,中断向量与中断号对应,中断向量在中断向量表中按照中断号顺序存储。
二、中断管理使用说明
- 根据具体硬件,配置支持的最大中断数及可设置的中断优先级个数。
- 中断处理程序耗时不能过长,否则会影响 CPU 对中断的及时响应。
- 中断响应过程中不能直接、间接执行引起调度的 LOS_Schedule 等函数。
- 中断恢复 LOS_IntRestore()的入参必须是与之对应的 LOS_IntLock()的返回值(即关中断之前的 CPSR 值)。
Cortex-M 系列处理器中 0-15 中断为内部使用,因此不建议用户去申请和创建。
三、中断管理模块接口
功能类别 | 接口函数 | 描述 |
---|---|---|
创建和删除中断 | LOS_HwiCreate | 中断创建,注册中断号、中断触发模式、中断优先级、中断处理程序。中断被触发时,handleIrq会调用该中断处理程序 |
LOS_HwiDelete | 删除中断 | |
打开和关闭所有中断 | LOS_IntUnLock | 打开当前处理器所有中断响应 |
LOS_IntLock | 关闭当前处理器所有中断响应 | |
LOS_IntRestore | 恢复到使用LOS_IntLock关闭所有中断之前的状态 | |
使能和屏蔽指定中断 | LOS_HwiDisable | 中断屏蔽(通过设置寄存器,禁止CPU响应该中断) |
LOS_HwiEnable | 中断使能(通过设置寄存器,允许CPU响应该中断) | |
设置中断优先级 | LOS_HwiSetPriority | 设置中断优先级 |
触发中断 | LOS_HwiTrigger | 触发中断(通过写中断控制器的相关寄存器模拟外部中断) |
清除中断寄存器状态 | LOS_HwiClear | 清除中断号对应的中断寄存器的状态位,此接口依赖中断控制器版本,非必需 |