01、ARM中斷體系
① ARM體系中,在存儲地址的低位,固化了一個32字節的硬件中斷向量表。
② 異常中斷發生時,程序計數器PC所指的位置不同,異常中斷就不同。中斷結束后,中斷不同,返回地址也不同。但是,對于系統復位中斷,不需要返回,因為整個應用系統就是從復位中斷中開始的。

數據訪問終止:數據訪問的地址不存在,或者當前地址不允許訪問。
快速中斷請求:外部引腳的快速中斷請求,比外部中斷請求等級高,但是一般外設的中斷請求使用外部中斷請求。
指令預取終止:預取指令的地址不存在,或者當前地址不允許訪問。
未定義的指令:ARM或協處理器認為當前指令未定義。
ARM中斷流程:

首先在主程序中發生IRQ中斷請求,程序跳到中斷向量表找IRQ中斷對應的解析程序地址,然后再跳到中斷解析程序,進而執行中斷程序。
02、ZYNQ中斷體系
ZYNQ包括三種中斷:私有中斷,軟件中斷和共享中斷。
1)私有中斷:每個CPU連接5個私有中斷,中斷ID27—31。

2)軟件中斷:16個,中斷號:0—15。通過CPU私有總線向ICDSGIR寄存器寫中斷號,并且制定CPU。
3)共享中斷:接收來自如GPIO、DMA、定時器等模塊的中斷信號。中斷號32-95。
它們之間的關系:

03、PL端的一個按鍵,點亮PS端LED。
首先還是硬件配置,加入ZYNQ的軟核,配置一下DDR和UART。
然后,因為要用到PL端的按鍵,所以要建立PL與PS之間的聯系,通過EMIO或者AXI總線,EMIO能不能中斷還沒有研究,這里用的AXI。
① 加AXI_GPIO IP核,設置GPIO端口中斷使能,GPIO寬度為1(只用了一個按鍵),設置方向為全輸入。

(如果想控制PL端LED,就再加一個AXI_GPIO核),設置輸出就可以了。
② 打開中斷

IRQ_F2P是PL與PS的共享中斷,下面的是兩個ARM核的快速中斷和外部中斷(都來自PL屬于CPU私有中斷),私有中斷如何點亮LED還沒有測試。
③ PS端LED,設置I/O外設,GPIO里勾選MIO,點亮的LED管腳為MIO0。
然后自動連接,(手動連接AXI_GPIO ip2intc_irpt),綁定gpio_rtl的管腳為T17(按鍵),3.3V,然后輸出,生成HDL Wrapper,導出硬件(包含比特流文件),載入SDK。

04、各種初始化:
① 初始化按鍵:

設置單通道,方向為輸入。
② 初始化LED:

設置MIO0為輸出,使能引腳(不使能不能點亮,與AXI接PL端LED有點區別,后者不需要使能)。然后引腳寫高電平,使LED初始狀態為滅。
③ 初始化中斷:

中斷初始化寫成一個函數,傳入參數是中斷的ID,另外以上各種初始化,需要實例化XGpio、XGpioPs、XScuGic類型的變量,直接定義為全局變量,這樣會比較方便。
④中斷函數:

A. 函數首先是中斷初始化,與先前的按鍵初始化與LED初始化差不多。
B. 接著是定義了一個InterruptSystemSetup函數,定義為:

C.連接,我理解的就是,將這個中斷與按鍵的行為,連接起來。XScuGic_Connect(&gpio_intr, INTR_GPIO, (Xil_ExceptionHandler)BTN_Intr_Handler, (void*)&key),這個函數中參數的意思,第一個參數就是實例化的XScuGic對象了,第二個參數,是對應的XPAR_FABRIC_AXI_GPIO_0_IP2INTC_IRPT_INTR,也就是定義的那個中斷IRQ_F2P,定義在xparameters.h里。

定義為61,這也就是IRQ_F2P的中斷號為61-68和84-91,共同組成了IRQ_F2P[15:0]。
第三個參數,調用的中斷處理函數,發生的中斷操作寫在里面。第四個參數,連接的對象,這里是按鍵,即將中斷行為與按鍵行為連接起來。
-
ARM
+關注
關注
135文章
9580瀏覽量
393286 -
計數器
+關注
關注
32文章
2320瀏覽量
98465
發布評論請先 登錄
一文看懂PCIe中斷機制
Linux中斷“搬家”指南:從應用到操作,手把手教你轉移中斷核心(RK3588)
操作系統體系結構
成都觀巖科技ISO體系認證加持!以體系實力筑牢服務根基
RISC-V怎么實現核間中斷?核心本地中斷控制器(CLINT)深度解析
電能質量在線監測裝置是如何實現對電壓中斷事件的識別的?
SysTick初始化函數和中斷服務函數詳解
瑞薩RA系列MCU的外部引腳中斷詳解
英威騰為智慧安防基地提供零中斷電力保障
Linux權限體系解析
第六章 外部中斷
AS32X601驅動系列教程 PLIC_中斷應用詳解
ARM中斷體系和ZYNQ中斷體系詳解
評論