一、蜂鳴器學習(中斷)
二、BSP工程管理
利用BSP工程管理,使文檔顯示不雜亂;
?將這些文件分為4類,并保存到4個不同的文件夾里。
????????首先在新的工程文件夾里創建一個之后我們編寫的類似led驅動,clk驅動等等外設驅動程序都放在這文件夾里面,創建名為bsp文件夾;
??再創建project文件夾,存放 start.s和 main.c 文件,也就是應用文件;
? ? ? ? 一個imx6ull文件夾,用來保存NXP的相關庫cc.h、fsl_common.h、fsl_iomuxch和 MCIMX6Y2.h 這四個文件;
????????最后再創建一個obj文件夾,用來存放編譯生成的.o?文件。
三、 按鍵練習
代碼實現(GPIO):
四、中斷
4.1 GIC控制器(通用中斷控制器)
VFIQ/VIRQ中V指虛擬化的;
多數情況下我們使用IRQ:
作用:
作用是中斷優先級排序;
中斷屏蔽的控制;
? ? ? ? GIC控制器(v2版本)最多處理8個內核;最多有1020個中斷源:SGI ?(軟件中斷):( 0 - 15 ),由軟件產生的中斷;用于實現多核通信
PPIs(私有中斷):(16 - 31),每個核都有自己獨有的中斷;這里的私有指內核
SPI(共享中斷):(32-1019),外設中斷,如定時器、外部中斷、串口中斷等。? ? ? ? 實際用到的只有(32-159)128個,這128是imx6ull所支持的
? ? ? ? PS:GIC也可以屏蔽不需要的中斷
? ? ? ? ? ? ? ? V2版本的GIC不在ARM內部,V3、V4版本的是64位
4.2?異常向量表
????????異常向量表重映射(__set_VBAR)是指在處理器發生異常時,通過改變異常向量表的物理地址與邏輯地址之間的映射關系
????????目的:確保系統能夠正確響應和處理異常。
異常狀態返回地址偏移量:當異常狀態發生以后,返回地址和lr中保留的地址偏移量
4.3 協處理器
????????協處理器:用于減輕系統微處理器特定處理任務的芯片;
? ? ? ? cortex A7 共16個協處理器,CP0~CP15
????????每個soc中都有一個kernel,也是處理器,有時候處理不過來了,ARM就再設計了一堆協處理器,我們大多數情況下只用P15
4.3.1 mcr指令與mrc指令?
用mcr與mrc來訪問協處理器;
????????eg:mrc p15, 0, r0, c0, c0, 0(mrc指令讀取MIDR(主ID)寄存器,讀出來的結果放入了寄存器R0中)
mcr寫入協處理器;
mrc讀取協處理器;
? ? ? ? CPSR分為I位(bit[7](0不屏蔽? 1屏蔽))、F位(bit[6] 0不屏蔽 1屏蔽)
協處理器編號p0-p15;
讀取出來的寄存器內容:
SCTLR寄存器:
CPS指令
????????這里的 effect 分為倆個bit[7](IE使能 cpsie(0)、ID失能cpsid(1)),使用了effect的話就不能省略iflags,i位指irq,f位指frq
PS:在匯編中調main.c中的函數時,要先保護現場
? ? ? ? GIC首地址不確定,由P15保存
獲取中斷號,并記錄?
? ? ? ? C_IAR 讀寫中斷? ? ? ? ? ? ? ? ? C_EOIR? 寫回去
GPIOx_ICR? ? ? ? //GPIO中的中斷配置寄存器
GPIOx_IMR? ? ? ? //GPIO中的中斷屏蔽寄存器,0失能,1使能(默認失能)
GPIOx_ISR? ? ? ? //設置中斷標記寄存器 ,若為1,則說明該位產生中斷,但要手動清零(第幾位為1,第幾位就中斷)
.
4.4? 搶占優先級
????????Cortex——A7 有32個搶占優先級(誰數小,誰的優先級就高)
????????1 1111 ---> 32個
????????0(組優先級) xxxx(子優先級)