前言
在RT-Thread中,全局中斷的操作很多,大家都知道全局中斷的【disable】與【enable】
需要正確的理解全局中斷的disable與enable。
如下,保證鏈表的正確操作,【中斷保護(hù)】
/* lock interrupt */
temp = rt_hw_interrupt_disable();
/* remove from old list */
rt_list_remove(&(object- >list));
/* unlock interrupt */
rt_hw_interrupt_enable(temp);
問(wèn)題與分析:
rt_hw_interrupt_disable后,就無(wú)法觸發(fā)中斷了嗎?
經(jīng)過(guò)實(shí)際的驗(yàn)證,與分析rt_hw_interrupt_disable的實(shí)現(xiàn)方法:得到如下結(jié)論:
rt_hw_interrupt_disable 只是屏蔽了全局【中斷請(qǐng)求】,配置使能的中斷,依舊可以【中斷】,只是,中斷處理函數(shù)ISR,暫不執(zhí)行。
也就是說(shuō),如果硬件配置使能了中斷,rt_hw_interrupt_disable 后,依舊具備【中斷】功能。如你配置一個(gè)GPIO外部中斷,并使能中斷。rt_hw_interrupt_disable 后,外部中斷可以產(chǎn)生,只是不觸發(fā)執(zhí)行【ISR】。
【重點(diǎn)】:當(dāng)rt_hw_interrupt_disable 后,觸發(fā)的中斷,ISR暫時(shí)無(wú)法執(zhí)行,但硬件正常置【pending】中斷標(biāo)志位。
當(dāng)rt_hw_interrupt_enable后,【pending】的中斷,會(huì)執(zhí)行中斷【ISR】處理程序。
概念的梳理
單個(gè)中斷的產(chǎn)生:配置使能硬件中斷,如按鍵,GPIO外部中斷,按下觸發(fā)中斷,硬件置【pending】中斷標(biāo)志位,并執(zhí)行中斷【ISR】
單個(gè)中斷的禁止:配置禁能硬件中斷,如按鍵,按下不再觸發(fā)中斷。即使有【ISR】中斷處理函數(shù),不會(huì)執(zhí)行。
全局中斷的禁止:也就是不再觸發(fā)任何物理中斷,【沒(méi)找到這個(gè)功能函數(shù)】!
全局中斷請(qǐng)求的屏蔽:rt_hw_interrupt_disable,觸發(fā)的中斷,只能置【pending】中斷標(biāo)志位,CPU繼續(xù)執(zhí)行操作。
互斥或是臨界值的操作,可以使用屏蔽全局中斷請(qǐng)求+處理+打開(kāi)全局中斷請(qǐng)求的方式,讓操作獨(dú)占的方式完成操作。
梳理RT-Thread PM中睡眠流程
睡眠操作執(zhí)行在:idle線程(最低線程優(yōu)先級(jí))
進(jìn)入SLEEP前,是禁止全局中斷請(qǐng)求的!rt_hw_interrupt_disable
睡眠前的引腳處理等,進(jìn)入睡眠,CPU停止運(yùn)行,【凍結(jié)】在這里!!
睡眠過(guò)程中,依舊可以被【使能的中斷】,如按鍵GPIO外部中斷、LPTimer等觸發(fā)并喚醒CPU。
CPU喚醒后,繼續(xù)下一條操作,【睡眠后的處理】
PM退出睡眠,開(kāi)啟全局中斷請(qǐng)求rt_hw_interrupt_enable,此時(shí),開(kāi)啟響應(yīng)中斷ISR。
根據(jù)中斷【pending】標(biāo)志位,進(jìn)入喚醒中斷處理函數(shù)【ISR】并執(zhí)行。
如此,深睡眠時(shí),系統(tǒng)時(shí)鐘停了,引腳關(guān)了,喚醒時(shí),恢復(fù)時(shí)鐘與引腳即可!【睡眠整個(gè)流程是完整的】
不用擔(dān)心會(huì)被中斷切出去,甚至任務(wù)切換,造成系統(tǒng)運(yùn)行在錯(cuò)誤的時(shí)鐘下。
不用擔(dān)心關(guān)閉了全局中斷請(qǐng)求,按鍵、LPTimer等,無(wú)法觸發(fā)中斷,喚醒MCU。
總結(jié)
需要正確的理解中斷的觸發(fā)及執(zhí)行流程
正確的理解RT-Thead 全局中斷的操作:rt_hw_interrupt_disable 與 rt_hw_interrupt_enable.
-
GPIO
+關(guān)注
關(guān)注
16文章
1176瀏覽量
51515 -
ISR
+關(guān)注
關(guān)注
0文章
38瀏覽量
14360 -
外部中斷
+關(guān)注
關(guān)注
1文章
131瀏覽量
15739 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1239瀏覽量
39445 -
MCU芯片
+關(guān)注
關(guān)注
3文章
244瀏覽量
11258
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論