RT-thread——中断管理接口API

中断管理接口的作用:把操作系统和底层硬件中断、异常隔离开来,而提供的一组抽象接口。

中断管理接口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);

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 6
收藏 1
关注 135
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧