熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > ARM11---中斷---向量中斷控制器(VIC)---結合s3c6410

ARM11---中斷---向量中斷控制器(VIC)---結合s3c6410

作者: 時間:2016-11-09 來源:網絡 收藏
(一)、首先說一下PL192向量中斷控制器

一個中斷控制器是用來處理多個中斷源的外圍設備,通常包含以下幾個特性:

本文引用地址:http://www.bjwjmy.cn/article/201611/317819.htm

1.為每個中斷源分配一個中斷請求輸入端口。為每個中斷請求分配一個中斷請求輸出端口,以能連接到處理器的VIC端口。

其實手冊上說的這么多,我感覺其實就是這樣的:要保證每個中斷都能:

************************************************

中斷源-------->PL192 VIC--------->處理器VIC端口

************************************************

2.可以用軟件屏蔽掉任意制定的中斷源的中斷。

3.可以為每個中斷設置優(yōu)先級。

以上是中斷控制器做的事情,但是我們的軟件方還要做:

1.確定請求服務的中斷源。

2.確定中斷處理程序的地址。

但是一個向量中斷控制器可以在硬件上,把所有的上述功能都實現了,他可以提供當前最高優(yōu)先級的中斷的ISR的起始地址和向量地址。

PL192 VIC和處理器VIC端口的連接:

處理器可以通過VICVECTADDROUT[31:0]這個端口獲取當前中斷的ISR,不用向以前(比如ARM9)那樣,采用0x00000018或者

0xffff0018的策略了。但是處理器的VIC端口不支持讀 FIQ 的向量地址。

以下是引腳的解釋:

IRQACK是由處理器發(fā)出的信號,用來告訴VIC:我想讀取某某中斷的中斷處理程序的地址(IRQADDR)

IRQADDRV是由VIC發(fā)出的信號,告訴處理器:ISR的地址已經發(fā)送,而且有效,你就放心的讀吧!

IRQACK和IRQADDRV在VIC和處理器之間實現了一個四次握手的機制。(后面有解釋。)

(二)、中斷處理函數的退出:

往中斷對應的向量地址寄存器里執(zhí)行寫操作。

(三)、處理器和VIC之間的時序:

下面這個圖是VIC端口操作時序的例子,情況是這樣的:先有了一個 IRQC,后來了一個 IRQB,而且IRQB的優(yōu)先級比較高。

 

 這個圖表解釋了基本的處理器和VIC之間基本的握手機制。

 1.IRQC中斷請求發(fā)出,導致PL192 VIC設置處理器的nIRQ為低。

2.處理器得知nIRQ為低,然后初始化一個中斷序列。

3.然后就在這關鍵的時候,突然來了一個中斷IRQB,它告訴PL192 VIC,我比IRQC更急!!

4.在B3和B4之間,處理器判斷來的這個中斷是不是IRQ,如果是則發(fā)送IRQACK 信號(高電平)。

5.在B4,PL192 VIC得到IRQACK 高電平信號,然后把IRQADDR改成IRQB的ISR地址。

6.在B6階段,VIC發(fā)出IRQADDRV信號(置高),IRQADDRV在處理器得到正確的ISR地址之前,一直是高電平,在這期間,就算來個更高優(yōu)先級的中斷要置高!不然IRQB這次中斷就

丟失了。

7.在B8階段左右,處理器讀取IRQADDR的值,正確讀取后,就將IRQACK置低,因為他的使命已經完成了!

8.當PL192 VIC發(fā)現IRQACK是低電平的時候,it stacks the priority of the IRQB interrupt(這句大家自己理解吧,應該是保存IRQ的優(yōu)先級,具體什么用我還不清楚。)然后將

IRQADDRV置低,如果沒有更高優(yōu)先級的中斷,他也把nIRQ置高。

9.當處理器得知IRQADDRV是低電平的時候,他就知道他又可以檢測nIRQ了,所以如果VIC要停一段時間再將nIRQ置高的時候,必須保證IRQADDRV是高電平,不然,處理器就一直檢測到

有中斷,其實是中斷源發(fā)出的同一次中斷。

我們寫中斷程序需要注意的:

**********************************************************************************************************************************************

中斷處理程序要保證在程序的最后進行中斷的清除,這樣可以保證多個中斷源共享一個中斷線。另外,中斷處理程序要通知PL192 VIC當前的中斷的ISR已經結束.

原文是這樣的:

The clearing of the interrupt is handled in software by the interrupt handling routine,this enable multiple interrupt sources to share a

signal interrupt priority,In addition,the interrupt handling routine must communicate to the VIC that the interrupt currently being handled

is complete,using the memory-mapped or coprocessor-mapped interface,to enable the interrupt masking to be unwound.

**********************************************************************************************************************************************

PL192 VIC是不支持快速中斷的,所以s3c6410中斷流程圖就這樣畫:

所有的快速中斷跑到VCI1,又通過VIC0,來到了TZIC0,最終都由TZIC0一個個的發(fā)送到ARM1176了。

下面這個圖是中斷發(fā)出到被執(zhí)行的流程圖:

這里涉及到ARM模式的轉換。

到了這里我們應該清楚中斷的產生和中斷處理程序的執(zhí)行的流程了。

注:VE是VIC ENABLE

mrc p15,0,r0,c1,c0,0
orr r0,r0,#(1<<24)
mcr p15,0,r0,c1,c0,0

這樣我們的PL192 VIC就可以用了。

今天寫到這里,太累了,以后再寫寫內部中斷(watch dog)和外部中斷( key )具體流程。都是基于OK6410,今天的算是補充下理論知識。

個人認為這些東西對中斷的理解挺重要的!



評論


技術專區(qū)

關閉