各位大佬好,如下是關于中斷喚醒系統的一個流程上的總結,由于這方面知識過于複雜,又牽扯到SOC廠商的設計,而且我也沒有做過這方面工作,是以一半來自文檔一半靠猜測,都不一定對,反正自己給自己解釋得通了。希望大佬們不小心刷到了本文,如果覺得是合理的,給個贊,如果看出明顯的錯誤,也幫忙指出下,不勝感激,多謝!
當一個
藍牙中斷
(如NS group 1中斷)做為喚醒源産生中斷時,此時的流程應當是這樣的:
- Redistribute發生一個Wake Request給Power controller,Power controller給PE上電,即reset
- 此時PE為最高異常級别,即EL3,PC指針指向RVBAR_EL3中的位址,也就是之前寫入的bl31_warm_entrypoint
- 然後PE在ATF中繼續執行,在ATF(EL3)中, PE不會taken該
,因為SCR_EL3.IRQ=0,目前有處于EL3級别,是以中斷不會被taken,中斷保持remains pending藍牙中斷
- 當ATF相關邏輯執行完畢後,退出ATF,傳回到REE側時,此時異常級别不再是EL3,變成了EL1,該中斷則會變為pending狀态,繼而再根據中斷優先級排序置為Active,然後檢查PSTATE,進而中斷被taken
- 此時跳轉到REE側的中斷向量表,然後跳轉到
注冊的handler函數藍牙中斷
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxCMy8VZ6l2csMjUzkVTXVTNXlGT1kVLZVTNTBXNCNkN1oWdMVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLyQWOwczNjFGZzUTN2M2N4cjMiRzN4QGM5IzYlJGNkN2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)