今天來看兩個(gè)特殊的指令,WFI(Wait For Interrupt)和WFE(Wait For Event)。這兩條指令的語法非常簡單,不需要帶任何參數(shù)。如果大家讀過前面文章,肯定對中斷(interrupt)不陌生。至于事件(event),與中斷有點(diǎn)像,不同的是處理器對二者的處理方式不一樣??梢韵葘⑹录斫獬商厥獾闹袛?。
先看WFI,首先,我們研究一下ARM處理器進(jìn)入低功耗狀態(tài)的機(jī)制。當(dāng)一個(gè)處理器核的工作負(fù)載不高時(shí),可以通過降壓降頻(DVFS)的方式來讓處理器運(yùn)行在較低的頻率,從而降低整個(gè)芯片的功耗。如果處理器的沒有工作負(fù)載,完全空閑下來,這時(shí)就需要其它方法讓處理器進(jìn)入更低的功耗模式。如果大家對ACPI有一些了解,就知道其中定義的“睡眠(sleep)”模式就有好幾種,每種模式對應(yīng)的電源和時(shí)鐘狀態(tài)不同。處理器芯片進(jìn)入空閑狀態(tài)的大體順序應(yīng)該是這樣的,應(yīng)用處理器(Application Processor)判斷是否具備進(jìn)入空閑狀態(tài)的條件,如果滿足條件則進(jìn)行一些準(zhǔn)備工作;發(fā)消息給系統(tǒng)控制器(System control processor);等待全部操作執(zhí)行完;執(zhí)行WFI進(jìn)入空閑狀態(tài);等待系統(tǒng)控制器做出下一步動(dòng)作,或者關(guān)閉時(shí)鐘,或者關(guān)閉電源等等。
從WFI這個(gè)名字可以看出,喚醒(wake up)處理器的一個(gè)機(jī)制就是發(fā)送中斷給處理器。與A系列處理器搭配的中斷處理器是GIC,這在前面介紹過。GIC接到中斷后,產(chǎn)生喚醒信號(hào)給系統(tǒng)控制器或者是電源管理模塊(PowerManagement Unit),系統(tǒng)控制器或者PMU根據(jù)處理器核的狀態(tài)以及系統(tǒng)狀態(tài),決定下一步的動(dòng)作。如果喚醒信號(hào)是給系統(tǒng)控制器,則可以考慮接到系統(tǒng)控制器的中斷處理接口,比如,采用M系列作為系統(tǒng)控制器時(shí),可以接到NVIC(Nested Vectored Interrupt Controller)。喚醒機(jī)制要根據(jù)具體情況具體分析,法無定法。
WFE與WFI很像,只不過等待的是事件,也就是說系統(tǒng)可以通過發(fā)送事件來喚醒應(yīng)用處理器。WFE的一個(gè)典型應(yīng)用場景是自旋鎖。當(dāng)多個(gè)應(yīng)用處理器競爭同一個(gè)臨界區(qū)資源時(shí),只有一個(gè)應(yīng)用處理器能獲得權(quán)限,其它的應(yīng)用處理器需要等待臨界區(qū)資源被釋放,也就是這些應(yīng)用處理器“自旋”。當(dāng)然操作系統(tǒng)也可以采取其它的處理方式,比如把時(shí)間片分給其它的應(yīng)用程序,不過這不在今天的研究范疇。顯然,應(yīng)用處理器簡單的“自旋”對于功耗不友好,一個(gè)解決辦法就是讓這些“自旋”的應(yīng)用處理器進(jìn)入一種低功耗模式,獲得臨界區(qū)資源的應(yīng)用處理器在完成當(dāng)前進(jìn)程后,喚醒這些應(yīng)用處理器去重新競爭臨界區(qū)資源。這時(shí)的喚醒機(jī)制不宜采取中斷方式,因?yàn)樾什桓?。ARM中采用的是事件方式,即通過執(zhí)行SEV(Send Event)指令向其它應(yīng)用處理器發(fā)送喚醒的事件。
WFI和WFE還有一種變體形式,WFIT和WFET,其中的T是超時(shí)(timeout)的意思,也就是說,喚醒機(jī)制多了一種超時(shí)的方式,沒有中斷或者事件產(chǎn)生,時(shí)間到了也會(huì)發(fā)出喚醒。
審核編輯:湯梓紅
-
處理器
+關(guān)注
關(guān)注
68文章
20248瀏覽量
252146 -
指令
+關(guān)注
關(guān)注
1文章
623瀏覽量
37529 -
中斷
+關(guān)注
關(guān)注
5文章
917瀏覽量
43752 -
wfi
+關(guān)注
關(guān)注
0文章
2瀏覽量
1598
原文標(biāo)題:ARM系列 -- WFI和WFE
文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
L138-arm不能進(jìn)入wfi模式
ARM 無法進(jìn)入WFI 模式
ARM是怎樣使用多種低功耗模式來節(jié)省功耗的
求分享基于WFE的睡眠示例
詳解ARM常用的偽指令資料下載
ARM系列-WFI和WFE指令介紹
ARM系列—WFI和WFE特殊指令
STM32的三種低功耗模式介紹
詳解ARM WFI和WFE指令
評論