中斷的含義是什么?如何設(shè)置ARM處理器的中斷?-設(shè)計應用_第1頁
中斷的含義是什么?如何設(shè)置ARM處理器的中斷?-設(shè)計應用_第2頁
中斷的含義是什么?如何設(shè)置ARM處理器的中斷?-設(shè)計應用_第3頁
中斷的含義是什么?如何設(shè)置ARM處理器的中斷?-設(shè)計應用_第4頁
中斷的含義是什么?如何設(shè)置ARM處理器的中斷?-設(shè)計應用_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

精品文檔-下載后可編輯中斷的含義是什么?如何設(shè)置ARM處理器的中斷?-設(shè)計應用什么是中斷?

在處理器中,所謂中斷,是一個過程,即CPU在正在執(zhí)行程序過程中,遇到外部/內(nèi)部緊急事件需要處理,暫時中止當前程序執(zhí)行轉(zhuǎn)而去

為事件服務(wù),待服務(wù)完畢,再返回到暫停處(斷點)繼續(xù)執(zhí)行原來的程序。為事件服務(wù)的程序稱之為中斷服務(wù)程序或中斷處理程序。嚴格來說上述過程是針對硬件中斷而言的,用軟件方法也可以引起中斷。硬件原因引起的中斷過程中是不可測的,隨機的,軟件中斷是可以人為控制的

斷點:一個地址,程序在該處中斷,轉(zhuǎn)而取執(zhí)行中斷程序的地址。

中斷源:引起中斷的信號源。

異常優(yōu)先級的概念

同時出現(xiàn)兩個中斷源,就會出現(xiàn)先處理哪個中斷的問題。出現(xiàn)這種問題以后,這里就產(chǎn)生一個中斷優(yōu)先級的概念。

ARM處理器中有7種類型的異常,按照優(yōu)先級從高到低的排列順序如下:

1.復位異常(reset)

2.數(shù)據(jù)異常(dataabort)

3.快速中斷異常(fiq)

4.外部中斷異常(irq)

5.預取異常(prefetchabort)

6.軟件中斷(swi)

7.未定義指令異常(undef)

中斷:

硬中斷內(nèi)部中斷(不可),外部中斷(可屏蔽),外部中斷:外部中斷一般是指由計算機外設(shè)發(fā)出的中斷請求,如:鍵盤中斷、打印機中斷、定時器中斷等。外部中斷是可以屏蔽的中斷,也就是說,利用中斷控制器可以屏蔽這些外部設(shè)備的中斷請求。內(nèi)部中斷:內(nèi)部中斷是指因硬件出錯(如突然掉電、奇偶校驗錯等)或運算出錯(除數(shù)為零、運算溢出、單步中斷等)所引起的中斷。內(nèi)部中斷是不可屏蔽的中斷。

軟中斷(不可),軟件中斷其實并不是真正的中斷,它們只是可被調(diào)用執(zhí)行的一般程序

中斷響應流程圖

通用中斷控制器genericinterruptcontrol

中斷號:每個中斷源都被分配了一個的中斷號(0-1019)

中斷掩碼:在匯編語言中進行中斷前,需要對相應的中斷狀態(tài)字進行授權(quán)允許或屏蔽相關(guān)中斷的操作。

GIC支持的三種中斷類型

軟件產(chǎn)生的中斷SGI,軟件生成的中斷寄存器(ICDSGIR)。每個SGI都可以定位多個處理器。在里面分銷商和有針對性的處理器中,SGI通過其中斷的組合來標識編號,ID0-ID15和發(fā)出處理器的處理器源ID(CPUID0-CPUID7)SGI。(SGI號0-15)

私有的外設(shè)中斷PPI,在特定模式下使用的中斷InterruptnumbersID16-ID31areusedforinterruptsthatareprivatetoaCPUinterfaceandarebankedintheDistributor。(PPI號0-15)

共享的外設(shè)中斷SPI,外設(shè)產(chǎn)生的可以發(fā)送給一個或多個處理的中斷源。InterruptnumbersID32-ID1019areusedforSPIs.(SPI號0-987)

中斷源

GIC中斷控制器框圖

ThemainblocksoftheGICare:

AMBAslaveinterfaceAMBA從屬接口

Distributor分配器

CPUinterfaceCPU接口

Clockandreset時鐘和重置

Enableandmatchsignals啟用和匹配信號

GIC主要功能模塊:分配器和CPU接口

分配器接收中斷,并向相應的CPU接口提供優(yōu)先級的中斷。一個

優(yōu)先級較低的中斷在成為優(yōu)先級時轉(zhuǎn)發(fā)到相應的CPU接口

待處理中斷。

GIC支持160個中斷,Total160interruptsincludingSoftwareGeneratedInterrupts(SGIs[15:0],ID[15:0]),PrivatePeripheralInterrupts(PPIs[15:0],ID[31:16])andSharedPeripheralInterrupts(SPIs[127:0],ID[159:32])aresupported.ForSPI,youcan

serviceamaximal32*4=128interruptrequests(SPI號)

分配器框架圖

TheDistributorprovidesaprogramminginterfacefor:

EnablingtheforwardingofinterruptstotheCPUinterfacesglobally.

Enablingordisablingeachinterrupt.

SetTIngtheprioritylevelofeachinterrupt.

SetTIngthetargetprocessorlistofeachinterrupt.

SetTIngeachperipheralinterrupttobelevel-sensiTIveoredge-triggered.

SettingeachinterruptaseithersecureorNon-secureiftheGICimplementstheSecurityExtensions.

SendinganSGItooneormoretargetprocessors.

啟用全局中斷向CPU接口的轉(zhuǎn)發(fā)。

啟用或禁用每個中斷。

設(shè)置每個中斷的優(yōu)先級。

設(shè)置每個中斷的目標處理器列表。

將每個外設(shè)中斷設(shè)置為電平敏感或邊沿觸發(fā)。

如果GIC執(zhí)行安全擴展,則將每個中斷設(shè)置為安全或不安全。

將SGI發(fā)送到一個或多個目標處理器。

查看任意中斷的狀態(tài)

提供軟件方式設(shè)置或清除任意中斷的掛起狀態(tài)

中斷使用中斷號進行標識,每個接口可以處理多達1020個中斷

InterruptsfromsourcesareidentifiedusingIDnumbers.EachCPUinterfacecanseeupto1020interrupts.The

distributorsupportsupto1244interruptsbecauseofbankingofSPIsandPPIs.

CPU接口

Programminginterfacefor:

EnablingthesignalingofinterruptrequestsbytheCPUinterface.

Acknowledginganinterrupt.

Indicatingcompletionoftheprocessingofaninterrupt.

Settinganinterruptprioritymaskfortheprocessor.

Definingthepreemptionpolicyfortheprocessor.

Determiningthehighestprioritypendinginterruptfortheprocessor.

編程接口

通過CPU接口發(fā)出中斷請求的信號。

確認中斷。

指示完成中斷的處理。

為處理器設(shè)置一個中斷優(yōu)先級掩碼。

為處理器定義搶占策略。

確定處理器的待處理中斷。

中斷狀態(tài)轉(zhuǎn)換圖

中斷狀態(tài)

inactive(無效)中斷沒有發(fā)生

pending(待處理)中斷發(fā)生,等待處理,待處理的中斷都作為通過CPU接口發(fā)送到處理的候選者。

active(正在處理)中斷給了,目前正在進行中斷處理

activeandpending(處理和待處理)一個中斷源正在被處理而GIC又接收到來自同一中斷源的中斷觸發(fā)信號。

轉(zhuǎn)換A1或A2,添加掛起狀態(tài)

對于SGI:

在寫入指定處理器為目標的ICDSGIR時發(fā)生轉(zhuǎn)換。

只有在指定SGI的安全配置(適用于CPU接口)對應于ICDSGIR.SATT位值。如果GIC執(zhí)行安全擴展和在Secure中寫入ICDSGIR。

對于SPI或PPI,如果出現(xiàn)以下情況,則發(fā)生轉(zhuǎn)換:

外設(shè)發(fā)出中斷信號或

軟件寫入ICDISPR。

轉(zhuǎn)換B1或B2,刪除掛起狀態(tài)

過渡不適用于SGI:

待處理的SGI應該通過活動狀態(tài)進行轉(zhuǎn)換或重置以刪除其掛起狀態(tài)。

處于活動狀態(tài)的待處理SGI應該通過掛起狀態(tài)進行轉(zhuǎn)換,或者進行重置以刪除掛起狀態(tài)。

對于SPI或PPI,如果出現(xiàn)以下情況,則發(fā)生轉(zhuǎn)換:

電平敏感的中斷僅在輸入信號有效時才處于等待狀態(tài),斷言或由于觸發(fā)了一個邊沿觸發(fā)的中斷信號,或者寫入一個中斷,中斷處于待處理狀態(tài)

ICDISPR。該軟件然后寫入相應的ICDICPR。

過渡C.

如果中斷被啟用并且具有足夠的優(yōu)先級來向處理器發(fā)送信號,則軟件轉(zhuǎn)換發(fā)生從ICCIAR讀取。

過渡D.

對于SGI,如果關(guān)聯(lián)的SGI被啟用并且分發(fā)器將其轉(zhuǎn)發(fā)到CPU接口,則發(fā)生轉(zhuǎn)換同時處理器讀取ICCIAR以確認先前的SGI實例。是否

這種轉(zhuǎn)變的發(fā)生,取決于ICCIAR的閱讀時間與重新規(guī)定SGI的時間。

對于SPI或PPI:

轉(zhuǎn)換發(fā)生在

中斷使能。

從ICCIAR讀取軟件。該讀取將激活狀態(tài)添加到中斷。

-中斷信號保持有效,用于電平敏感中斷。這是因為外設(shè)沒有中斷中斷直到處理器服務(wù)中斷。

對于邊沿觸發(fā)中斷,是否發(fā)生此轉(zhuǎn)換取決于讀取的時序ICCIAR相對于檢測到重新中斷的中斷。否則會導致ICCIAR的讀取

過渡C,可能之后是過渡A2。轉(zhuǎn)換E1或E2,刪除活動狀態(tài)

當軟件寫入ICCEOIR時發(fā)生轉(zhuǎn)換。

外設(shè)和中斷控制器處理流程

按鍵狀態(tài)

低電平(按下去狀態(tài))

高電平(彈起來狀態(tài))

下降沿(高電平向低電平跳變的過程)

上升沿(低電平向高電平跳變的過程)

寄存器描述

ICCICR_CPUn0x0000CPUinterfacecontrolregister0x0000_0000CPU接口控制寄存器(CPU接口內(nèi)中斷送到相應CPU)

ICCPMR_CPUn0x0004Interruptprioritymaskregister0x0000_0000中斷優(yōu)先級過濾寄存器(255所有中斷都被相應,0不相應任何中斷)

ICDISERm_CPUn0x0100Interruptset-enableregister(SGI,PPI)0x0000_FFFF中斷使能寄存器(使能相應中斷到分配器)

ICDIPTRm_CPUn0x0800Processortargetsregister(SGI[3:0])0x0101_0101中斷目標CPU配置寄存器(選擇CPU接口)

ICDDCR0x0000Distributorcontrolregister0x0000_0000分配器控制器(打開分配器)

ICCIAR_CPUn0x000CInterruptacknowledgeregister0x0000_03FF中斷響應寄存器

ICCEOIR_CPUn0x0010EndofinterruptregisterUndefined中斷處理結(jié)束寄存器(清除CPU內(nèi)部相應的中斷號)

ICDICPRm_CPUn0x0280Interruptpending-clearregister(SGI,PPI)0x0000_0000中斷狀態(tài)清除寄存器(清除相應的中斷標志位)

按鍵的寄存器配置

EXT_INT41_PEND0x0F44ExternalinterruptEXT_INT41pendingregister0x0000_0000(配置按鍵的中斷pending)

EXT_INT41_CON0x0E04ExternalinterruptEXT_INT41configurationregister0x0000_0000(配置按鍵的觸發(fā)方式)

EXT_INT41_MASK0x0F04ExternalinterruptEXT_INT41maskregister0x0000_00FF(按鍵使能中斷)

按鍵的觸發(fā)方式

具體寄存器

ICDSER根據(jù)中斷號選擇對應的專門管理所有中斷使能寄存器使能中斷

ICDPTRm_CPUn,中斷號為57-32=25,選ICDIPTR14

根據(jù)GICInterruptTable查出EINT[9]中斷號為57,SP1號為57-32=25,根據(jù)下圖,八位控制CPU的接口,這里我們的CPU只有四核,每個寄存器控制四個中斷的CPU接口選擇,SPI號為25,在SPI[27:24],這里我們的CPU接口為0,八位的值為0x00000001(選擇哪個接口哪個接口置1),所以這里配置為ICDIPTR.ICDIPTR14=0X1《《8

具體事例代碼

/*

*main.c

*

*Createdon:2022-12-4

*Author:Administrator

*/

#include“exynos_4412.h”

voiddo_irq()

{

unsignedintirq_num;//獲取中斷號

irq_num=CPU0.ICCIAR0X3FF;

switch(irq_num)

{

case57:

printf(“i‘mkey2interrupter!interrupteridis%d\n”,irq_num);

GPF3.DAT=0x1《《4;

EXT_INT41_PEND=0X1《《1;//中斷重啟

ICDICPR.ICDICPR1=0X1《《25;//清理相應的中斷標志位

break;

case58:

printf(“i’mkey3interrupter!interrupteridis%d\n”,irq_num);

GPF3.DAT=0x1《《5;

EXT_INT41_PEND=0x1《《2;//清除相應中斷源

ICDICPR.ICDICPR1=1《《26;

break;

default:

printf(“interrupternotexist\n”);

break;

}

CPU0.ICCEOIR=(CPU0.ICCEOIR~(0x3ff))|irq_num;//清理相應的中斷號

}

voidmydelay_ms(inttime){

inti,j;

while(time--){

for(i=0;i《5;i++)

for(j=0;j《514;j++)

;

}

}

voidperipheral_init()

{

GPF3.CON=GPF3.CON(~(0xf《《16))|0x1《《16;//燈

GPF3.CON=GPF3.CON(~(0xf《《20))|0x1《《20;

GPX1.CON=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論