色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM11---中斷---向量中斷控制器(VIC)---結(jié)合s3c6410

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

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

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

          本文引用地址:http://cafeforensic.com/article/201611/317819.htm

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

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

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

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

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

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

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

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

          1.確定請求服務(wù)的中斷源。

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

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

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

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

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

          以下是引腳的解釋:

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

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

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

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

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

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

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

           

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

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

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

          3.然后就在這關(guān)鍵的時候,突然來了一個中斷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置低,因為他的使命已經(jīng)完成了!

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

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

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

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

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

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

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

          原文是這樣的:

          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模式的轉(zhuǎn)換。

          到了這里我們應(yīng)該清楚中斷的產(chǎn)生和中斷處理程序的執(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就可以用了。

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

          個人認(rèn)為這些東西對中斷的理解挺重要的!



          評論


          技術(shù)專區(qū)

          關(guān)閉