一、鋪墊引入中斷 → 按鍵
?1、概要:
????????????實現按鍵控制發光二極管和蜂鳴器
?????????????輸入類型的外設:按鍵(key)
2、參考手冊內容完成配置過程
(1)key 按鍵原理圖
(2)core 內核中命名 -- UART1 CTS
(3)復用功能設置
(4)電氣特性配置
? ? ? ? 一般順序:12 - -> 13 - -> 14-15
? ? ? ? 阻值不明確時通常選擇10K,如若沒有選擇阻值相近于10k的(所以選擇22k的[11])
1)上拉電阻
2)速率
3)綜合
(5)引腳方向配置
? ? GPIO1->GDIR &= ~(1 << 18);? ? ? ? //僅需要將GPIO的第18號引腳 置1
3、代碼實現
4、實驗現象
? ? ? ? 能夠實現按下按鍵是,蜂鳴器響應,led亮。但是會出現按下按有時無法立刻響應,是由于現有模式是輪詢模式,cpu無法在按鍵按下時就立刻進行響應,也許在你按下按鍵時刻,cpu正在別的地方檢測,所以會出現延時性。
? ? ? ? 由此引出,引入中斷。當按下按鍵時刻,能夠立刻響應。中斷:cpu在輪詢中有更為緊要的事情打斷,保護現場,去執行中斷任務,當執行完畢后,回到現場,恢復形成繼續進行剛剛被打斷前的任務。
二、中斷的引入
1、概念
????????中斷:CPU能打斷當前正在進行的工作,去處理更為緊急的任務,并且在處理完中斷任務后,能回到原先的地方繼續工作
2、流程
????????(1)中斷源發出中斷請求。
????????(2)CPU檢查是否響應中斷以及該終端是否被屏蔽。
????????(3)檢查當前產生的中斷的中斷優先級。
????????(4)保護現場
????????(5)執行中斷服務函數
????????(6)恢復現場
3、流程圖
? ? ? ? 由下圖可知:想要實現中斷還需要GIC控制器作為中間橋梁進行傳遞(秘書處)
?(1)中斷基本流程
? (2)?三類分發器 SGI、PPI、SPI
4、中斷控制器GIC
(1)概念
????????ARM處理器中管理中斷的硬件模塊,負責接收外設中斷請求(IRQ),根據優先級、目標核和安全屬性分發到CPU核心;
(2)類型
????????SGI(Software Generated Interrupt):核間通信中斷(ID0-15),通過寫寄存器,觸發由軟件觸發引起的中斷,通過向寄存器GICD_SGIR?寫入數據來觸發,系統會使用?SGI?中斷來完成多核之間的通信
????????PPI(Private Peripheral Interrupt):核私有中斷(ID16-31),如定時器中斷,我們說了?GIC?是支持多核的,每個核肯定有自己獨有的中斷。這些獨有的中斷肯定是要指定的核心處理,因此這些中斷就叫做私有中斷
????????SPI(Shared Peripheral Interrupt):共享外設中斷(ID32-1019),如GPIO、UART中斷,(注意!不是?SPI?總線那個中斷),這類中斷泛指所有的
(3)功能
?????中斷觸發、優先級仲裁、CPU響應、中斷完成
5、協處理器:cp0 - cp15
????????內核中的用到的ARM Cortex-A7內核GIC(通用中斷控制器)的關鍵寄存器
C_IAR
- 全稱:Interrupt Acknowledge Register(中斷應答寄存器)
- 功能:讀取時返回當前最高優先級的中斷ID,表示處理器已接受該中斷
- 訪問權限:只讀(
__IM
)- 偏移地址:
0x200C
C_EOIR
- 全稱:End Of Interrupt Register(中斷結束寄存器)
- 功能:寫入中斷ID以通知GIC中斷處理完成
- 訪問權限:只寫(
__OM
)- 偏移地址:
0x2010
無法直接知道基地址,引入協處理器
- GIC的地址保存在協處理器的cp15中
(1)協處理器概念
(2)核心指令
cond
:省略表示無條件執行。p15
:指定協處理器 CP15(系統控制協處理器)。opc1
:操作碼1,此處為0
(CP15 規定opc1
必須為 0,否則結果不可預測)。Rt
:目標寄存器,示例中為r0
(ARM 核心寄存器)。CRn
:協處理器主寄存器編號,示例中為c0
。CRm
:附加寄存器或操作數,示例中為c0
(若無需附加信息,通常設為c0
)。opc2
:次要操作碼,示例中為0
(用于區分同一編號寄存器的不同功能)
示例:
eg:MRC p15, 0, r0, c0, c0, 0
// 指令從 CP15 的?
c0
?寄存器(主標識符寄存器)讀取數據到 ARM 的?r0
?寄存器。c0
?是只讀寄存器? ? ? ? ?
(3)異常向量表基地址的配置實現過程
6、詳細藍圖
7、代碼實現
interrupt.c interrupt.h
start.S