按鍵中斷部分的理解


初始准備

  • 初始化串口

初始化Tx、Rx對應的GPIO引腳

設置1個停止位,8位數據位

發送和接收都是polling

禁止modem、afc

波特率設置

  • 初始化按鍵中斷(在key.c中:以中斷方式處理按鍵)

外部中斷對應的GPIO設置

中斷觸發模式

中斷允許

清掛起,清除是寫1

  • 綁定好異常向量表、初始化中斷控制器

綁定異常向量表

禁止所有中斷

選擇中斷類型為IRQ

清VICxADDR

  • 綁定isr到中斷控制器硬件
  • 使能中斷

運行過程:

程序運行-----> 按鍵按下-------->硬件自動跳轉到異常向量表的IRQ中斷部分 -------->由於向量表這里寫的是IRQ_handle的函數地址,所以又發生一次跳轉 ----------

---> 到匯編中執行IRQ_handle,具體作用為:保護現場、跳轉到真正的中斷處理程序、返回時的現場恢復 ---------> 到.c文件中執行IRQ_handler函數 --------->由於除了按鍵之外的其他的一些中斷也會導致發生IRQ中斷,所以不一定是按鍵中斷------->由於S5PV210幫我們硬件實現了發生的中斷位置1,所以我們只需要到vicaddr[i]中讀取函數執行就可以了。

 

 

 

 

第二次理解:

S5PV210中,有異常向量表,當出現中斷時會硬件會自動跳轉到異常向量表中,去執行向量表中對應的代碼,但是向量表中實際上每個異常只提供了4個字節,所以我們在異常向量表中存的實際上是中斷處理函數的地址。

那么分析一下,按鍵處理的中斷,首先我們做好初始工作

按鍵部分key.c:

  • 按鍵設置為中斷處理模式
  • 下降沿觸發
  • 中斷允許
  • 清掛起
  • 寫好真正的中斷處理程序以便於將來和VICnADDRESS中的中斷源編號綁定。

中斷部分int.c:

  • 寫好異常向量表中各個中斷對應的異常處理代碼,重點寫好中斷處理的代碼。
  • 綁定異常中斷處理函數的地址到異常向量表
  • 初始化中斷控制器:禁止所有中斷 VICnINTENCLEAR = 0xffffffff;選擇中斷類型為IRQ中斷,清除清VICnVECTADDR
  • 寫好綁定函數,用於綁定isr到VICnVECTADDR
  • 使能中斷函數VICnINTENABLE
  • 禁止中斷函數VICnINTENCLEAR
  • 中斷處理程序:直接到VICnVECTADDR中取出isr函數去執行

匯編文件start.S

  • 寫好中斷保護現場的過程

main函數

  • 做好中斷初始化 
  • 串口初始化
  • 調用綁定異常向量表函數
  • 調用綁定isr函數
  • 使能中斷

按鍵iRQ中斷執行步驟:

  • (1)按鍵按下
  • (2)硬件跳轉到異常向量表執行對應的中斷處理,同時將isr硬件自動推送到VICnVECTADDR
  • (3)異常向量表中是IRQ中斷地址,指向匯編文件,在匯編文件中做好現場保護工作,比如設置IRQ模式下的棧,保存r0~r12,跳轉到中斷處理程序
  • (4)從匯編跳轉到中斷處理程序中執行,使用指針的方式間接訪問VICnVECTADDR中由硬件自動推送的函數,執行。
  • (5)程序執行結束,跳轉到匯編中恢復現場

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM