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初始狀態為滅。
③ 初始化中斷:
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
+關注
關注
134文章
9097瀏覽量
367585 -
計數器
+關注
關注
32文章
2256瀏覽量
94575
發布評論請先 登錄
相關推薦
評論