zedboard中斷例程學習

2022-08-28 21:03:17 字數 2878 閱讀 4491

參考資料ug1165、ug585

1、通過ug1165實現如下例子:

2、文件ug585中關於arm9的中斷描述:

理解為:

cpu通過gic管理中斷,中斷來自3類:軟體中斷sgi、私有外設中斷ppi、共享外設中斷spi.

各個cpu分別支援16、5、60個sgi、ppi、spi.

gic承上啟下的管理中斷。外設產生中斷------gic管理中斷-------cpu響應中斷

每個中斷都有對應的中斷號

這個例子只用到了乙個中斷,其它中斷還得查對應描述。

3、vivado連好的硬體電路圖:

4、軟體**分析:

4.1 定義axi_tmier裝置結構體,這個裝置在pl中,通過計數產生中斷訊號傳遞給ps

typedef struct xtmrctr;

它的最後兩項是函式指標和**引數,**引數會傳遞給函式指標指向的函式。

4.2 定義gic的結構體:

4.3 main函式分析

4.3.1定義引數、裝置結構體

4.3.2init_platform();

4.3.3初始化pl中的axi_gpio

4.3.4設定axi_gpio為輸入

4.3.5初始化axi_timer(找到基位址,此時它的handler指向乙個xil_asservoid,calbackref指向本身)

4.3.6再

設定axi_timer(將它的handler指向中斷服務程式,callbackref指向本身)

4.3.7設定axi_timer的初始值(計數長度)

4.3.8設定axi_timer的中斷工作模式

4.3.9找尋ps端的gpio,並初始化該裝置

4.3.10設定ps端gpio[10]為輸出;設定ps端gpio[10]的輸出使能開;

4.3.11設定ps端gpio[54]為輸入;設定ps端gpio[54]的輸出使能關;

4.3.12初始化中斷系統,然後可以開始主程式了。

4.4 中斷函式分析

4.4.1找到gic裝置

4.4.2初始化gic裝置(對4.2的結構體進行初始化)

(1)gic的icc基位址和icd基位址賦值;

(2)對中斷源(支援95個中斷)陣列進行初始化。如果中斷裝置沒有連線,先給它賦值乙個函式。

如果不連線驅動裝置,該中斷執行的中斷函式就是stubhandler,該函式完成的功能就是對該中斷計數:

(3)執行distributorinit和cpuinitialize函式,對相關暫存器賦值。(寄存去定義查詢ug585)

這裡,gic裝置就初始化完成了。此時,它要註冊cpu的異常表 和 連線中斷裝置(axi_timer),才能讓axi_timer產生的中斷傳給cpu,讓cpu執行axi_timer中斷時要執行的中斷程式。

4.4.3中斷裝置 -------- gic中斷陣列

[95] --------

異常表-------cpu執行

中斷函式

異常表的定義:

(1)將中斷函式和**引數寫入這個表(其中xil_exception_id_int是irq的異常號5;xscugic_interrupthandler是gic中斷table中的函式指標,xscugicinstanceptr是gic結構體指標)

可見,這個表註冊了函式指標(該指標指向gic結構體中中斷源的中斷函式),可**引數(gic結構體指標)

(2)cpu執行中斷函式

跳轉到了irqinterrupt函式

cpu執行的中斷函式表明:將異常表中對應的**引數傳遞給函式指標,執行該函式指標指向的函式。就是(1)中註冊的函式。

(3)gic中斷表中對應函式的主要內容

gic讀取中斷號(確定哪個中斷)interruptid

找到中斷表中的註冊函式,並將**引數傳遞給該函式,執行該函式。

(4)之前初始化時,gic的中斷登錄檔都指向了stubhandler函式(該函式只完成對中斷發生次數的統計)

(5)現在將gic的中斷登錄檔中相應的axi_timer中斷連線到實際中斷函式

axi_timer的中斷號是61.

4.4.4 axi_timer中斷函式

紅色箭頭那一句表示將axi_timer結構體中註冊的**引數傳遞給註冊的handler函式,並執行

註冊axi_timer中的中斷函式和**引數,4.3.6中描述

主函式中的中斷函式

中斷服務例程 學習

裝置觸發中斷後進入的例程 當進入中斷服務例程後,irql會提公升到裝置對應的irql級別 傳統pc用2片 中斷控制器8259a 晶元級聯 16個中斷訊號源 0 15 多個裝置可以共享乙個中斷號 新的pc使用新的中斷控制器,將中斷訊號擴充套件到24個 windows 將中斷的概念繼續擰擴充套件 32個...

DOS中斷例程應用

程式設計 在螢幕的5行12列顯示字串 wlcome to masm assume cs code data segment db welcome to masm data ends code segment start mov ah,2 呼叫第10號中斷例程的2號子程式,功能為設定游標位置 mov ...

ISR 中斷服務例程

當硬體裝置的中斷訊號發生後,irql會提公升至相應的dirql級別,作業系統會呼叫相應的中斷服務例程.如何在驅動程式中寫中斷處理程式呢?當硬體啟動的時候,會有乙個irp mn start device包傳送給驅動程式,在這個包中包含中斷資訊,驅動程式呼叫ioconnectinterrupt 函式將該...