簡(jiǎn)要復(fù)習(xí)一下ARM9中斷控制器的控制過程:
1.首先能識(shí)別觸發(fā)的中斷(對(duì)應(yīng)中斷源必須打開,然后查詢當(dāng)前中斷狀態(tài)寄存器),硬件會(huì)操控PC跳到中斷向量入口(IRQ_HANDLE,硬件控制的只要是IRQ中斷類型就會(huì)進(jìn)入),在中斷跳轉(zhuǎn)函數(shù)里面保存現(xiàn)場(chǎng)(保存R0等等工作寄存器)--跳到服務(wù)函數(shù)(里面進(jìn)行中斷源判斷和處理)---恢復(fù)現(xiàn)場(chǎng),基本流程是這樣。
2.中斷的觸發(fā):高低電平,上升下降沿等等,具體的設(shè)置寄存器實(shí)現(xiàn)。
3.中斷能否傳到CPU?觸發(fā)以后還要通過許多開關(guān)(寄存器設(shè)置使能與否)確保到達(dá)CPU,這樣CPU才能識(shí)別(有的中斷源是不需要的),有些中斷是二級(jí)中斷,需要開關(guān)比較多,注意芯片手冊(cè)說明
4.
比如我們要觸發(fā)的是INT_TC這個(gè)二級(jí)中斷信號(hào)。好,那么我們要打開的開關(guān)是什么呢?在二級(jí)中斷信號(hào)里,INTSUBMSK是二級(jí)中斷信號(hào)的開關(guān),我們要在里面找到INT_TC這個(gè)位并設(shè)置為1即可。二級(jí)中斷還得傳到一級(jí)中控器處理,那么我們先找出INT_TC是屬于哪個(gè)一級(jí)中斷信號(hào)的,看表里的紫色框起來的是二級(jí)屬于同一個(gè)一級(jí)信號(hào)的,一級(jí)信號(hào)處理那個(gè)也有個(gè)紫色框,INT_ADC就是我們要找到的對(duì)應(yīng)一級(jí)信號(hào)。而它也有對(duì)應(yīng)的開關(guān),那么就是INTMSK這個(gè)控制器。我們把INTMSK里的INT_ADC位設(shè)置為1就算成功了。
代碼也就是
INTSUBMSK"=(0x1<<9);//因?yàn)镮NT_TC在INTSUBMSK里的第9位,注意從0開始
INTMSK|=(0x1<<31);//INT_ADC在INTMSK里的第31位。
其他的類似外部中斷也是這樣操作。只是一級(jí)中斷的可以直接從一級(jí)中控器處理,那么就只設(shè)置一級(jí)中控器的相應(yīng)開關(guān)即可。也就是說,我們要用到的設(shè)備接口,我們就把相應(yīng)的開關(guān)打開就可以了,其他的讓ARM來處理就可以了。
5.EIN4_7屬于一級(jí)中斷源,但是該中斷源包含EIN4EIN5EIN6EIN7四個(gè)子中斷源。
SRCPND源掛起寄存器。
該寄存器在中斷源發(fā)出請(qǐng)求時(shí)候,處理器就會(huì)自動(dòng)置位該寄存器的相應(yīng)的位為1.
注意:根據(jù)三星文檔知道,該位不受寄存器影響,這個(gè)寄存器是屏蔽寄存器。在則在執(zhí)行服務(wù)程序時(shí)候,該位不許進(jìn)行清除,否則會(huì)導(dǎo)致連續(xù)中斷。清除方法是往該位寫入1。
INTMOD中斷模式寄存器
該寄存器決定中斷源為FIQ中斷還是IRQ中斷。
注意:根據(jù)三星文檔,INTPND寄存器和INTOFFSET寄存器只對(duì)IRQ模式有效
INTMSK中斷屏蔽寄存器
決定是否屏蔽某中斷源
注意:沒有
PRIORITY優(yōu)先級(jí)寄存器
決定中斷源優(yōu)先級(jí)。
INTPND中斷服務(wù)程序標(biāo)志位
根據(jù)文檔說,在中斷源沒被屏蔽,并且在等待中斷服務(wù),優(yōu)先級(jí)也是最最高的置1.啥意思,就是該寄存器對(duì)應(yīng)位置1,表示CPU已經(jīng)響應(yīng)該對(duì)應(yīng)的中斷請(qǐng)求。
注意:和SRCPND一樣,在中斷服務(wù)程序時(shí)候要清除該對(duì)應(yīng)位。
INTOFFSET寄存器
該寄存器和INTPND配合使用的。標(biāo)明INTPND寄存器里對(duì)應(yīng)IRQ中斷反映在INTOFFSET寄存器的值
注意:也需要清除位
SUBSRCPND寄存器
該寄存器與.SRCPND寄存器配合使用,在子中斷源發(fā)出請(qǐng)求時(shí)候,處理器就會(huì)自動(dòng)置位該寄存器的相應(yīng)的位為1.
INTSUBMSK寄存器
該寄存器和INTMSK寄存器一樣,只不過是相對(duì)于子中斷而言而已。
6.借用別人網(wǎng)站的圖
其中深黑色的就是編程要用的寄存器,而淺黑色的寄存器時(shí)CPU根據(jù)我們配置的寄存器產(chǎn)生的標(biāo)志位寄存器。
7.最后我感覺和51還是比較類似的,設(shè)置引腳為外部中斷(有的是內(nèi)部中斷),使能,確定優(yōu)先級(jí),識(shí)別到觸發(fā),保存現(xiàn)場(chǎng),處理,恢復(fù)現(xiàn)場(chǎng)。嵌入式linux的程序需要和匯編一起組織,目前不是特別熟悉,學(xué)習(xí)ing~