來自老師第4章_第1頁
來自老師第4章_第2頁
來自老師第4章_第3頁
來自老師第4章_第4頁
來自老師第4章_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

復(fù)習(xí):ARM異常中斷處理,保存子程序的返回地址ARM體系中的異常中斷的種類ARM的處理器模式各異常中斷對應(yīng)著一定的處理器模式應(yīng)用程序通常運行在用戶模式下不同的處理器模式對應(yīng)有該處理器模式的物理寄存器組外部中斷模式=通用中斷模式ARM的各異常中斷向量地址、對應(yīng)的模式及優(yōu)先級中斷向量表的大小32字節(jié),其中每個異常中斷占4個字節(jié),保留4個字節(jié)。每個中斷異常所占用的4個字節(jié)存放跳轉(zhuǎn)指令或一個向PC寄存器賦值的數(shù)據(jù)訪問指令。按照優(yōu)先級從高到底的次序執(zhí)行。ARM處理器對異常中斷的相應(yīng)過程

(1)保存處理器當(dāng)前狀態(tài),中斷屏蔽位和各個條件標(biāo)志位。將當(dāng)前程序狀態(tài)寄存器CPSR的內(nèi)容保存到將要執(zhí)行的異常中斷對應(yīng)的SPSR中。(2)根據(jù)要進入的異常類型,強制設(shè)置程序狀態(tài)寄存器CPSR中的相應(yīng)位,使處理器進去相應(yīng)的執(zhí)行模式。(3)將連接寄存器lr_mode(R14_mode)設(shè)置成返回的地址(當(dāng)前PC+4或PC+8,與異常的類型有關(guān))。(注:可作為第一步進行)(4)將程序計數(shù)器值(PC),設(shè)置成該異常中斷的中斷向量向量地址,從而跳轉(zhuǎn)到中斷處理程序處執(zhí)行。(注:必須在最后一步執(zhí)行)第四章S3C2410的中斷系統(tǒng)主要內(nèi)容:4.1 S3C2410的中斷源4.2S3C2410的中斷處理4.3中斷控制4.4子中斷源的中斷控制4.5中斷向量設(shè)置4.6其它常用寄存器4.7中斷程序編寫中需注意問題4.8中斷實驗和中斷程序編寫4.1S3C2410的中斷源56個中斷源32個中斷源提供中斷控制器,其中外部中斷源:

EINT0~EINT3,4通過個中斷控制寄存器EINT4~EINT7通過“或”的形式提供一個中斷源送至中斷控制器EINT8~EINT23通過“或”的形式提供一個中斷源送至中斷控制器注:S3C2410處理兩類中斷:通用中斷和快速中斷S3C2410的中斷源4.2S3C2410的中斷處理可以處理56個中斷源的中斷請求。中斷源可以是來自片內(nèi)的中斷,如DMA、UART和I2C等可以來自處理器外部中斷輸入引腳有11個中斷源通過分支中斷控制器來申請使用中斷(與其它中斷共用一個中斷向量)INT_ADCA/D轉(zhuǎn)換中斷INT_TC觸摸屏中斷INT_ERR2UART2收發(fā)錯誤中斷INT_TXD2UART2發(fā)送中斷INT_RXD2UART2接受中斷INT_ERR1UART1收發(fā)錯誤中斷INT_TXD1UART1發(fā)送中斷INT_RXD1UART1接受中斷INT_ERR0UART0收發(fā)錯誤中斷INT_TXD0UART0發(fā)送中斷INT_RXD0UART0接受中斷通過分支中斷控制器來申請使用中斷的11個中斷源注:片內(nèi)UARTn中斷和外部中斷輸入EINTn為邏輯“或”的關(guān)系,共用一根中斷請求線S3C2410的中斷控制邏輯(中斷控制過程)

中斷控制邏輯的任務(wù):在片內(nèi)和外部中斷源組成的多重中斷發(fā)生時,中斷控制器仲裁后,選擇其中一個中斷,通過FIQ(快速中斷請求)或IRQ(通用中斷請求)向CPU內(nèi)核發(fā)出中斷請求。當(dāng)多重中斷源請求中斷時,硬件優(yōu)先級邏輯判斷哪一個中斷將被執(zhí)行;同時,硬件邏輯執(zhí)行位于0x18(或0x1C)地址處的指令;然后由軟件編程識別各個中斷源;最后根據(jù)中斷源跳轉(zhuǎn)到相應(yīng)的中斷處理程序中斷控制邏輯的執(zhí)行過程中斷源是指給出中斷向量的中斷子中斷源是指與其它中斷共用一個中斷向量的中斷。例:UART0是一個中斷源,而TXD0和RXD0就是子中斷源中斷源與子中斷源的區(qū)別注:子中斷源向CPU申請中斷,子中斷源掛起寄存器中相應(yīng)位要置1,如果該子中斷沒被屏蔽,則該子中斷源所歸屬的總中斷源掛起寄存器中相應(yīng)位也要置14.3中斷控制5個控制寄存器控制系統(tǒng)中斷:中斷模式(INTMOD)寄存器中斷掛起(INTPND)寄存器中斷源掛起(SRCPND)寄存器中斷屏蔽(INTMSK)寄存器中斷優(yōu)先級(PRIORITY)寄存器ARM920T提供兩種中斷模式:FIQ模式(快速模式)和IRQ模式(通用模式)所有的中斷源在中斷請求時都要確定使用那一種中斷模式復(fù)位時各位等于0,如果采用通用中斷,中斷模式寄存器可以不用設(shè)置4.3.1中斷模式(INTMOD)寄存器中斷模式(INTMOD)寄存器與對應(yīng)的中斷源的關(guān)系4.3.2中斷掛起寄存器和中斷源掛起寄存器工作過程:

當(dāng)中斷源向CPU申請中斷時,SRCPND寄存器的相應(yīng)位被置1,表明哪一個中斷源向CPU申請了中斷如果當(dāng)前沒有優(yōu)先級與此中斷源相等或高于的中斷服務(wù)在執(zhí)行,并該中斷沒被屏蔽,此中斷會被響應(yīng),INTPND相應(yīng)位會被置1

4.3.3中斷屏蔽寄存器(INTMSK)

當(dāng)INTMSK寄存器的屏蔽位為1時,對應(yīng)的中斷被禁止;當(dāng)INTMSK寄存器的屏蔽位為0時,則相應(yīng)的中斷正常執(zhí)行,如果一個中斷的屏蔽位為1,則該中斷請求不被受理中斷屏蔽寄存器(INTMSK)4.3.4中斷優(yōu)先級寄存器(PRIORITY)S3C2410共有56個中斷源,有32個中斷控制器外部中斷EXTIN8~23共用一個中斷控制器外部中斷EXTIN4~7共用一個中斷控制器9個UART中斷分成3組,共用3個中斷控制器ADC和觸摸屏共用一個中斷控制器系統(tǒng)對中斷優(yōu)先級實行由中斷優(yōu)先寄存器(PRIORITY)和7個中斷仲裁器組組成的兩級控制,7個中斷仲裁器組由6個子中斷仲裁器組(ARBITER0~ARBITER5)和一個主中斷仲裁器組(ARBITER6)組成

每個中斷仲裁器下面有4~6個中斷源,這些中斷源對應(yīng)著REQ0~REQ5這6個優(yōu)先級中斷仲裁器分組

工作過程:當(dāng)一個中斷源向CPU申請中斷時,它首先要在自己所在的子中斷仲裁器組進行仲裁比較,如果此中斷仲裁器組中沒有和它同級別或高于它的中斷源向CPU申請中斷,則它進入主中斷仲裁器組和其他組的優(yōu)先中斷源進行仲裁比較,決定能否向CPU申請中斷。優(yōu)先級寄存器設(shè)定4.4子中斷源的中斷控制

與中斷向量中的中斷源共用一個中斷向量,稱為子中斷源。兩個子中斷控制寄存器:子中斷源掛起寄存器(SUBSRCPND)反饋中斷的工作狀態(tài)子中斷屏蔽寄存器(INTSUBMSK)對中斷進行控制子中斷源掛起寄存器(SUBSRCPND)各位功能子中斷屏蔽寄存器(INTSUBMSK)各位功能4.5中斷向量設(shè)置中斷源的中斷向量:該中斷服務(wù)函數(shù)的入口地址所有中斷服務(wù)函數(shù)的入口地址都在2410addr.h中定義成函數(shù)指針。在主程序中,把中斷服務(wù)函數(shù)的入口地址(函數(shù)名)賦給該指針即可。2410addr.h中定義的函數(shù)指針形式為:pISR_XXX,pISR表示是中斷服務(wù)函數(shù)的指針,XXX表示中斷源名字。例:#definepISR_EINT0(*(unsigned*)(_ISR_STARTADDRESS+0x20))//定義外部中斷0的服務(wù)函數(shù)的指針。中斷服務(wù)函數(shù)的名前加關(guān)鍵字_irq,表明此函數(shù)是中斷服務(wù)函數(shù),例:void_irqUart0_TxInt(void)//串行通信0通道發(fā)送中斷服務(wù)函數(shù)void_irqUart0_RxIntOrErr(void)

//串行通信0通道接收字符和接收錯誤代碼中斷服務(wù)函數(shù)做串行通信發(fā)送中斷實驗時:

pISR_UART0=(unsigned)Uart0_TxInt;做串行通信接收中斷實驗時:pISR_UART0=(unsigned)Uart0_RxIntOrErr;注:中斷服務(wù)函數(shù)聲明時名前也要加關(guān)鍵字_isr。4.6其它常用寄存器S3C2410中,外部中斷有專門寄存器:外部中斷控制寄存器(EXTINTN0~EXTINTN2)外部中斷屏蔽寄存器(EINTMASK)外部中斷掛起寄存器(EINTPEND)1.外部中斷控制寄存器(EXTINTN)高電平低電平脈沖上升沿脈沖下降沿雙沿

外部中斷控制寄存器主要控制外部中斷觸發(fā)模式,觸發(fā)模式有:EXTINT0配置EXTINT1配置EXTINT2配置2.外部中斷屏蔽寄存器(EINTMASK)控制外部中斷的允許和禁止外部中斷屏蔽寄存器的配置3.外部中斷掛起寄存器(EINTPEND)表示:當(dāng)前正在響應(yīng)的中斷服務(wù)程序是外部中斷中哪一個申請的

EINTPEND的配置

思考:為什么EINT0~EINT3在EINTMASK和EINTPEND中無對應(yīng)的配置位?4.7中斷程序編寫中需注意問題1.中斷初始化

一般在系統(tǒng)復(fù)位后和中斷程序執(zhí)行結(jié)束,要對中斷掛起寄存器初始化??砂慈缦路椒ㄟM行(以免寫入不正確數(shù)據(jù)引起錯誤):rSRCPND=rSRCPND;rINTPND=rINTPND;2.頭文件中掛起位

在頭文件2410addr.h中對中斷掛起位和清中斷掛起位進行了如下宏定義,在使用時只要用掛起位的名即可:#defineBIT_EINT0(0x1)#defineBIT_EINT1(0x1<<1)#defineBIT_EINT2(0x1<<2)#defineBIT_EINT3(0x1<<3)#defineBIT_EINT4_7(0x1<<4)#defineBIT_EINT8_23(0x1<<5)#defineBIT_WDT(0x1<<9)#defineBIT_TIMER0(0x1<<10)#defineBIT_TIMER1(0x1<<11)#defineBIT_TIMER2(0x1<<12)#defineBIT_TIMER3(0x1<<13)#defineBIT_TIMER4(0x1<<14)#defineBIT_UART2(0x1<<15)#defineBIT_LCD(0x1<<16)#defineBIT_DMA0(0x1<<17)#defineBIT_DMA1(0x1<<18)#defineBIT_DMA2(0x1<<19)#defineBIT_DMA3(0x1<<20)#defineBIT_SDI(0x1<<21)#defineBIT_SPI0(0x1<<22)#defineBIT_UART1(0x1<<23)#defineBIT_USBD(0x1<<25)#defineBIT_USBH(0x1<<26)#defineBIT_IIC(0x1<<27)#defineBIT_UART0(0x1<<28)#defineBIT_SPI1(0x1<<29)#defineBIT_RTC(0x1<<30)#defineBIT_ADC(0x1<<31)#defineBIT_ALLMSK(0xffffffff)#defineBIT_SUB_ALLMSK(0x7ff)#defineBIT_SUB_ADC(0x1<<10)#defineBIT_SUB_ERR2(0x1<<8)#defineBIT_SUB_TXD2(0x1<<7)#defineBIT_SUB_RXD2(0x1<<6)#defineBIT_SUB_ERR1(0x1<<5)#defineBIT_SUB_TXD1(0x1<<4)#defineBIT_SUB_RXD1

溫馨提示

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

評論

0/150

提交評論