中斷管理接口的作用:把操作系統(tǒng)和底層硬件中斷、異常隔離開來,而提供的一組抽象接口。
中斷管理接口API有哪些?
1.裝在中斷服務(wù)例程API作用:將硬件中斷向量與用戶的中斷服務(wù)函數(shù)連接起來:
/*注:這個 API 并不會出現(xiàn)在每一個移植分支中,例如通常 Cortex-M0/M3/M4 的移植分支中就沒有這個 API。*/
/*return:掛載這個中斷服務(wù)程序之前掛載的中斷服務(wù)程序的句柄*/
rt_isr_handler_t rt_hw_interrupt_install(int vector, /*vector 是掛載的中斷號*/
rt_isr_handler_t handler,/*新掛載的中斷服務(wù)程序*/
void *param, /*param 會作為參數(shù)傳遞給中斷服務(wù)程序*/
char *name); /*中斷的名稱*/
2.屏蔽中斷源API:可以保證在接下來的處理過程中硬件狀態(tài)或者數(shù)據(jù)不會受到干擾。
/*注:這個 API 并不會出現(xiàn)在每一個移植分支中,例如通常 Cortex-M0/M3/M4 的移植分支中就沒有這個 API。*/
void rt_hw_interrupt_mask(int vector);/*要屏蔽的中斷號*/
3.打開屏蔽的中斷API:
/*注:這個 API 并不會出現(xiàn)在每一個移植分支中,例如通常 Cortex-M0/M3/M4 的移植分支中就沒有這個 API。*/
void rt_hw_interrupt_umask(int vector);/*要打開屏蔽的中斷號*/
4.全局中斷關(guān)API:
/*return :rt_hw_interrupt_disable 函數(shù)運行前的中斷狀態(tài)*/
rt_base_t rt_hw_interrupt_disable(void);
5.全局中斷開API:
void rt_hw_interrupt_enable(rt_base_t level);/*前一次 rt_hw_interrupt_disable 返回的中斷狀態(tài)*/
備注,中斷的開關(guān)一般是成對出現(xiàn)的,并且支持中斷開關(guān)嵌套:
rt_base_t level0;
rt_base_t level1;
/* 第一次關(guān)閉全局中斷,關(guān)閉之前的全局中斷狀態(tài)可能是打開的,也可能是關(guān)閉的 */
level0 = rt_hw_interrupt_disable();
/* 第二次關(guān)閉全局中斷,關(guān)閉之前的全局中斷是關(guān)閉的,關(guān)閉之后全局中斷還是關(guān)閉的 */
level1 = rt_hw_interrupt_disable();
do_something();
/* 恢復全局中斷到第二次關(guān)閉之前的狀態(tài),所以本次 enable 之后全局中斷還是關(guān)閉的 */
rt_hw_interrupt_enable(level1);
/* 恢復全局中斷到第一次關(guān)閉之前的狀態(tài),這時候的全局中斷狀態(tài)可能是打開的,也可能是關(guān)閉的 */
rt_hw_interrupt_enable(level0);
6.中斷通知(當系統(tǒng)進入/退出硬件中斷時,需要給RTT發(fā)出一個通知,用于記錄中斷嵌套的深度):
void rt_interrupt_enter(void);
void rt_interrupt_leave(void);
7.獲取系統(tǒng)當前的中斷嵌套深度API:
/*返回 描述
0 當前系統(tǒng)不處于中斷上下文環(huán)境中
1 當前系統(tǒng)處于中斷上下文環(huán)境中
大于 1 當前中斷嵌套層次*/
rt_uint8_t rt_interrupt_get_nest(void);