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