中断管理接口的作用:把操作系统和底层硬件中断、异常隔离开来,而提供的一组抽象接口。
中断管理接口API有哪些?
1.装在中断服务例程API作用:将硬件中断向量与用户的中断服务函数连接起来:
/*注:这个 API 并不会出现在每一个移植分支中,例如通常 Cortex-M0/M3/M4 的移植分支中就没有这个 API。*/
/*return:挂载这个中断服务程序之前挂载的中断服务程序的句柄*/
rt_isr_handler_t rt_hw_interrupt_install(int vector, /*vector 是挂载的中断号*/
rt_isr_handler_t handler,/*新挂载的中断服务程序*/
void *param, /*param 会作为参数传递给中断服务程序*/
char *name); /*中断的名称*/
2.屏蔽中断源API:可以保证在接下来的处理过程中硬件状态或者数据不会受到干扰。
/*注:这个 API 并不会出现在每一个移植分支中,例如通常 Cortex-M0/M3/M4 的移植分支中就没有这个 API。*/
void rt_hw_interrupt_mask(int vector);/*要屏蔽的中断号*/
3.打开屏蔽的中断API:
/*注:这个 API 并不会出现在每一个移植分支中,例如通常 Cortex-M0/M3/M4 的移植分支中就没有这个 API。*/
void rt_hw_interrupt_umask(int vector);/*要打开屏蔽的中断号*/
4.全局中断关API:
/*return :rt_hw_interrupt_disable 函数运行前的中断状态*/
rt_base_t rt_hw_interrupt_disable(void);
5.全局中断开API:
void rt_hw_interrupt_enable(rt_base_t level);/*前一次 rt_hw_interrupt_disable 返回的中断状态*/
备注,中断的开关一般是成对出现的,并且支持中断开关嵌套:
rt_base_t level0;
rt_base_t level1;
/* 第一次关闭全局中断,关闭之前的全局中断状态可能是打开的,也可能是关闭的 */
level0 = rt_hw_interrupt_disable();
/* 第二次关闭全局中断,关闭之前的全局中断是关闭的,关闭之后全局中断还是关闭的 */
level1 = rt_hw_interrupt_disable();
do_something();
/* 恢复全局中断到第二次关闭之前的状态,所以本次 enable 之后全局中断还是关闭的 */
rt_hw_interrupt_enable(level1);
/* 恢复全局中断到第一次关闭之前的状态,这时候的全局中断状态可能是打开的,也可能是关闭的 */
rt_hw_interrupt_enable(level0);
6.中断通知(当系统进入/退出硬件中断时,需要给RTT发出一个通知,用于记录中断嵌套的深度):
void rt_interrupt_enter(void);
void rt_interrupt_leave(void);
7.获取系统当前的中断嵌套深度API:
/*返回 描述
0 当前系统不处于中断上下文环境中
1 当前系统处于中断上下文环境中
大于 1 当前中断嵌套层次*/
rt_uint8_t rt_interrupt_get_nest(void);