中斷管理接口的作用:把操作系統和底層硬件中斷、異常隔離開來,而提供的一組抽象接口。
中斷管理接口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);