劉彥文清華大學(xué)出版社嵌入式系統(tǒng)原理及接口技術(shù)第7章_第1頁
劉彥文清華大學(xué)出版社嵌入式系統(tǒng)原理及接口技術(shù)第7章_第2頁
劉彥文清華大學(xué)出版社嵌入式系統(tǒng)原理及接口技術(shù)第7章_第3頁
劉彥文清華大學(xué)出版社嵌入式系統(tǒng)原理及接口技術(shù)第7章_第4頁
劉彥文清華大學(xué)出版社嵌入式系統(tǒng)原理及接口技術(shù)第7章_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 IO端口及中斷控制器本章重點本章重點: S3C2410A I/O端口概述;I/O端口控制;I/O端口特殊功能寄存器;I/O端口程序舉例。在I/O端口特殊功能寄存器中,除了講述GPAGPH對應(yīng)的寄存器外,還講述了雜項控制寄存器、與外部中斷有關(guān)的寄存器等內(nèi)容。 S3C2410A中斷控制器概述;中斷控制器操作、中斷源及中斷優(yōu)先權(quán)產(chǎn)生模塊;中斷控制器特殊功能寄存器;中斷程序舉例。7.1 I/O端口概述7.1.1 I/O端口概 I/O端口概述n S3C2410A有117個多功能輸入/輸出端口引腳,分為如下8個端口: 端口A(GPA):23個輸出引腳的端口; 端口B(GPB):11個輸入/輸出引腳

2、的端口; 端口C(GPC):16個輸入/輸出引腳的端口; 端口D(GPD):16個輸入/輸出引腳的端口; 端口E(GPE):16個輸入/輸出引腳的端口; 端口F(GPF):8個輸入/輸出引腳的端口; 端口G(GPG):16個輸入/輸出引腳的端口; 端口H(GPH):11個輸入/輸出引腳的端口。n初始引腳狀態(tài)在7.3.1節(jié)各引腳配置寄存器中,以信號名帶有下劃線來表示。 其他寄存器概述n在7.3.2節(jié),講述了特殊功能寄存器中的另外一些寄存器,這些寄存器控制某些時鐘信號、外部中斷請求信號的方式、外部中斷屏蔽與否等等。包括:雜項控制寄存器MISCCR、DCLK控制寄存器DCLKCON、外部中斷控制寄存

3、器EXTINT0EXTINT2、外部中斷濾波寄存器EINTFLT2和EINTFLT3、外部中斷屏蔽寄存器EINTMASK、外部中斷登記寄存器EINTPEND和通用狀態(tài)寄存器GSTATUS0GSTATUS4。每個寄存器的具體含義見7.3.2節(jié)。7.1.2 與I/O端口及其他寄存器相關(guān)的S3C2410A引腳信號 與I/O端口相關(guān)的S3C2410A引腳信號n端口A端口H的數(shù)據(jù)寄存器GPADATGPHDAT,與S3C2410A的117個引腳相關(guān),每個引腳可以設(shè)置的具體功能及對應(yīng)的引腳信號見7.3.1節(jié)。 與其他寄存器相關(guān)的S3C2410A引腳信號 雜項控制寄存器MISCCR 在雜項控制寄存器MISCC

4、R中,對下述引腳規(guī)定了它們的信號方式: SCKE、SCLK1和SCLK0引腳信號,S3C2410A輸出,在Power_OFF模式用于保護SDRAM。在寄存器MISCCR中規(guī)定了它們輸出信號的方式,見表7-24,參考表5-4。 nRSTOUT為外部設(shè)備Reset引腳信號,S3C2410A輸出,由nRESET & nWDTRST(看門狗Reset)& SW_RESET(軟件Reset)形成,在寄存器MISCCR中可以設(shè)置軟件Reset,見表7-24,參考表6-1。 CLKOUT1、CLKOUT0是S3C2410A輸出信號,信號源可由寄存器MISCCR控制,分別從6個時鐘信號中各選擇

5、1個作為輸出,見表7-24,參考表6-1。 引腳DATA15:0、DATA31:16由寄存器MISCCR規(guī)定了允許/禁止使用上拉電阻,見表7-24,參考表5-3。 DCLK控制寄存器DCLKCON 只有在雜項控制寄存器MISCCR中,用CLKSEL1、CLKSEL0選擇了S3C2410A的CLKOUT1、CLKOUT0輸出引腳使用DCLK1、DCLK0作為信號源,那么DCLKCON中的參數(shù)才起作用。這些參數(shù)設(shè)置DCLKn信號高、低電平的時間長度、DCLKn的分頻值等內(nèi)容,見表7-25,表7-24。 外部中斷控制寄存器EXTINT0EXTINT2 EINT0EINT23是S3C2410A外部中斷

6、請求信號輸入引腳,在外部中斷控制寄存器EXTINT0EXTINT2中,可以設(shè)置請求信號方式(低電平、高電平、下降沿、上升沿、2個沿),見表7-26、表7-27和表7-28。 外部中斷濾波寄存器EINTFLT2和EINTFLT3 EINTFLT2和EINTFLT3規(guī)定了S3C2410A外部中斷請求輸入引腳EINT16EINT23,所使用的濾波寬度和可選擇的濾波時鐘。 外部中斷屏蔽寄存器EINTMASK 對S3C2410A外部中斷請求引腳EINT23EINT4,規(guī)定了哪一個被屏蔽或允許中斷。 外部中斷登記寄存器EINTPEND 對S3C2410A外部中斷請求引腳EINT23EINT4請求信號登記,

7、1為有請求。 通用狀態(tài)寄存器GSTATUS0GSTATUS4這些寄存器中,可以讀取的S3C2410A的引腳狀態(tài)有: nWAIT,存儲器要求等待(擴展當(dāng)前總線周期)信號,輸入,見表7-33,參考表5-3。 NCON,Nand Flash配置狀態(tài),輸入,見表7-33,參考表5-29。 RnB,Nand Flash Ready/Busy輸入信號,見表7-33,參考表5-29。 nBATT_FLT,電池狀態(tài)引腳輸入信號,見表7-33,參考表6-1。7.2 I/O端口控制 端口引腳配置寄存器GPACONGPHCONn在S3C2410A中,大多數(shù)引腳有多種功能。因此對每個引腳,要求確定哪一種功能被選擇。端

8、口引腳配置寄存器GPACONGPHCON確定每個引腳的功能。n如果GPF0GPF7和GPG0GPG7在Power_OFF模式用作喚醒信號,那么這些端口應(yīng)該配置成中斷模式。 端口數(shù)據(jù)寄存器GPADATGPHDATn如果端口被配置為輸出端口,數(shù)據(jù)應(yīng)該寫到端口數(shù)據(jù)寄存器的對應(yīng)位;如果端口被配置為輸入端口,數(shù)據(jù)應(yīng)該從端口數(shù)據(jù)寄存器的對應(yīng)位讀出。 端口上拉(電阻)允許/禁止寄存器GPBUPGPHUPn端口上拉(電阻)允許/禁止寄存器也稱為端口上拉允許/禁止寄存器。n端口上拉(電阻)允許/禁止寄存器控制每個端口上拉電阻允許/禁止。當(dāng)對應(yīng)位為0時,引腳的上拉電阻被允許;當(dāng)對應(yīng)位為1時,上拉電阻被禁止。 雜項

9、控制寄存器n雜項(miscellaneous)控制寄存器對數(shù)據(jù)總線端口DATA31:16、DATA15:0上拉電阻、USB pad和CLKOUT等進行選擇。 外部中斷控制寄存器EXTINTn和外部中斷濾波寄存器EINTFLTnnS3C2410A的24個外部中斷可以由各種信號方式提出請求。由EXTINTn寄存器配置的外部中斷請求信號方式有:低電平觸發(fā)、高電平觸發(fā)、下降沿觸發(fā)、上升沿觸發(fā)以及2個沿都觸發(fā)。n8個外部中斷引腳有數(shù)字濾波,參見7.3.2節(jié)外部中斷濾波寄存器EINTFLT2和EINTFLT3。n只有16個EINT引腳EINT15:0在Power_OFF模式可以用作喚醒源。 Power_O

10、FF模式與I/O端口n在Power_OFF模式,所有GPIO寄存器值被保留。n外部中斷屏蔽寄存器EINTMASK不能阻止從Power_OFF模式中喚醒。但是,如果EINTMASK正屏蔽著EINT15:4中的一個,雖然喚醒能夠被操作,但源登記寄存器SRCPND中的EINT4-7和EINT8-23位,在剛剛喚醒后將不設(shè)置為1。7.3 I/O端口特殊功能寄存器7.3.1 端口A端口H寄存器組 端口A寄存器組 各寄存器具體含義見表7-1和表7-2。GPACON位位描描 述述GPACON位位描描 述述GPA22220 = 輸出輸出 1 = nFCEGPA10100 = 輸出輸出 1 = ADDR25GP

11、A21210 = 輸出輸出 1 = nRSTOUT GPA990 = 輸出輸出 1 = ADDR24GPA20200 = 輸出輸出 1 = nFREGPA880 = 輸出輸出 1 = ADDR23GPA19190 = 輸出輸出 1 = nFWEGPA770 = 輸出輸出 1 = ADDR22GPA18180 = 輸出輸出 1 = ALEGPA660 = 輸出輸出 1 = ADDR21GPA17170 = 輸出輸出 1 = CLEGPA550 = 輸出輸出 1 = ADDR20GPA16160 = 輸出輸出 1 = nGCS5GPA440 = 輸出輸出 1 = ADDR19GPA15150 =

12、輸出輸出 1 = nGCS4GPA330 = 輸出輸出 1 = ADDR18GPA14140 = 輸出輸出 1 = nGCS3GPA220 = 輸出輸出 1 = ADDR17GPA13130 = 輸出輸出 1 = nGCS2GPA110 = 輸出輸出 1 = ADDR16GPA12120 = 輸出輸出 1 = nGCS1GPA000 = 輸出輸出 1 = ADDR0GPA11110 = 輸出輸出 1 = ADDR26表7-1 端口A引腳配置寄存器含義GPADAT位位描描 述述GPA22:022:0當(dāng)該端口被配置為輸出端口時,引腳狀態(tài)與這個寄存器當(dāng)該端口被配置為輸出端口時,引腳狀態(tài)與這個寄存器中

13、的對應(yīng)位相同。中的對應(yīng)位相同。當(dāng)該端口被配置為功能引腳時,讀入值未定義當(dāng)該端口被配置為功能引腳時,讀入值未定義表7-2 端口A數(shù)據(jù)寄存器含義 端口B寄存器組 各寄存器具體含義見表7-3、表7-4和表7-5。 端口C寄存器組 各寄存器具體含義見表7-6、表7-7和表7-8。 端口D寄存器組 各寄存器具體含義見表7-9、表7-10和7-11。 端口E寄存器組 各寄存器具體含義見表7-12、表7-13和表7-14。 端口F寄存器組 各寄存器具體含義見表7-15、表7-16和表7-17。 端口G寄存器組 各寄存器具體含義見表7-18、表7-19和表7-20。 端口H寄存器組 各寄存器具體含義見表7-2

14、1、表7-22和表7-23。7.3.2 其他寄存器 雜項控制寄存器n雜項控制寄存器中的一些位用來對USB主機和USB設(shè)備進行控制;另外一些位用于保護SDRAM,以及對數(shù)據(jù)總線上拉電阻允許/禁止等進行控制。n雜項控制寄存器MISCCR,地址為0 x56000080,可讀寫,Reset值為0 x10330。寄存器具體含義見表7-24。 DCLK控制寄存器nDCLK控制寄存器DCLKCON,地址為0 x56000084,可讀寫,Reset值為0 x0。寄存器具體含義見表7-25。nDCLKCON寄存器定義DCLK0、DCLK1信號,這兩個信號用作外部源時鐘,DCLKn信號的低電平、高電平時間長度的關(guān)

15、系見圖7.1。n只有當(dāng)CLKOUT1:0被設(shè)置成發(fā)送DCLKn信號時,DCLKCON才能夠?qū)嶋H操作。圖7.1 外部中斷控制寄存器組n外部中斷控制寄存器組共有3個寄存器,寄存器名分別為EXTINT0、EXTINT1和EXTINT2;地址分別為0 x56000088、0 x5600008C和0 x56000090;可讀寫;Reset值均為0。n外部中斷控制寄存器組,能夠配置24個外部中斷源中的每一個提出中斷請求信號的方式,包括電平方式和邊沿方式,同時也配置了信號的極性。n為了識別電平中斷,對EINT15:0中的EXTINTn引腳合法的邏輯電平必須保持最少40ns以上。n各寄存器具體含義見表7-26

16、、表7-27和表7-28。 外部中斷濾波寄存器組n外部中斷濾波寄存器組共有4個寄存器,前兩個保留未用。后兩個寄存器分別是EINTFLT2和EINTFLT3;地址分別是0 x5600009C和0 x560000A0;可讀寫;Reset值均為0 x0。n2個外部中斷濾波寄存器控制8個外部中斷EINT23:16使用的濾波時鐘和濾波寬度。n各寄存器具體含義見表7-29和表7-30,表中OSC_CLK即圖6.1中的XTIpll。 外部中斷屏蔽寄存器n外部中斷屏蔽寄存器名為EINTMASK,地址為0 x560000A4,可讀寫,Reset值為0 x00FFFFF0。n外部中斷屏蔽寄存器能夠?qū)?0個外部中斷

17、源EINT23:4分別進行屏蔽,具體含義見表7-31。 外部中斷登記寄存器n外部中斷登記寄存器EINTPEND供20個外部中斷EINT23:4使用。用戶能夠清除EINTPEND寄存器某一指定位,方法是通過給寄存器對應(yīng)位寫1。n外部中斷登記寄存器(external interrupt pending register)也譯作外部中斷未決寄存器。n外部中斷登記寄存器地址為0 x560000A8,可讀寫,Reset值為0 x0。n外部中斷登記寄存器具體含義見表7-32。 通用狀態(tài)寄存器組n通用狀態(tài)寄存器組由5個寄存器GSTATUS0GSTATUS4組成;地址分別為0 x560000AC、0 x560

18、000B0、0 x560000B4、0 x560000B8和0 x560000BC;前兩個寄存器為只讀,后3個為可讀寫寄存器;Reset值分別為未定義、0 x32410000、0 x1、0 x0和0 x0。n各寄存器具體含義見表7-33、表7-34、表7-35、表7-36和表7-37。7.4 I/O端口程序舉例n在嵌入式系統(tǒng)中能夠使用C語言對特殊功能寄存器進行讀寫,特殊功能寄存器位于S3C2410A片內(nèi)。每個特殊功能寄存器都有一個固定地址,通常要在.H文件中映射特殊功能寄存器的地址。方法是對每個特殊功能寄存器對應(yīng)的地址,用預(yù)處理命令define加以定義。n以下映射方法一的代碼取自C/OS-的g

19、pio.h,方法二的代碼取自Linux的arch-s3c2410/s3c2410.h。方法一: #define _REG(x) (*(volatile unsigned int*)(x) #define GPIO_CTL_BASE0 x56000000 #define bGPIO(p) _REG(GPIO_CTL_BASE + (p) #define rMISCCRbGPIO(0 x80) / 相當(dāng)于 #define rMISCCR (*(volatile unsigned int*)(0 x56000000+0 x80) / 下同 #define rDCLKCONbGPIO(0 x84) #

20、define rEXTINT0 bGPIO(0 x88) #define rGSTATUS3bGPIO(0 xb8) #define rGSTATUS4bGPIO(0 xbc) #define rGPACONbGPIO(0 x00) #define rGPADATbGPIO(0 x04) #define rGPBCON bGPIO(0 x10) #define rGPHCONbGPIO(0 x70) #define rGPHDATbGPIO(0 x74) #define rGPHUPbGPIO(0 x78)方法二: #define GPIO_CTL_BASE 0 x56000000 #defi

21、ne bGPIO(p) _REG(GPIO_CTL_BASE + (p) #define MISCCRbGPIO(0 x80) #define DCLKCON bGPIO(0 x84) #define EXTINT0 bGPIO(0 x88) #define GSTATUS3bGPIO(0 xb8) #define GSTATUS4bGPIO(0 xbc) #define GPACONbGPIO(0 x00) #define GPADATbGPIO(0 x04) #define GPBCONbGPIO(0 x10) #define GPHCONbGPIO(0 x70) #define GPHD

22、ATbGPIO(0 x74) #define GPHUPbGPIO(0 x78) 以下程序是C/OS-環(huán)境下,針對某開發(fā)板具體配置,設(shè)置I/O端口的一個例子。請讀者根據(jù)I/O端口設(shè)置的數(shù)據(jù),說出開發(fā)板的配置。 rGPACON = 0 x5ef7ff; rGPBCON = 0 x155559; rGPBUP = 0 x7ff; rGPCCON = 0 xaaaa55aa; rGPCUP = 0 xffff; rGPDCON = 0 xaaaaaaaa; rGPDUP = 0 xffff; rGPECON = 0 xaaaaaaaa; rGPEUP = 0 xffff; rGPFCON = 0 x

23、55aa; rGPFUP = 0 xff; rGPGCON = 0 xff4affb9; rGPGUP = 0 xffff; rGPGDAT = rGPGDAT & 0 xffef; rGPHCON = 0 x2afaaa; rGPHUP = 0 x7ff;【例7.1】以下舉例程序中,端口E、端口F作為普通I/O端口使用,其中端口E的GPE3引腳輸出控制一個LED指示燈、GPE4引腳輸出控制一個蜂鳴器,如圖7.2所示;端口F用作并行數(shù)據(jù)輸入,若端口F對應(yīng)的引腳上有一位是低電平時,則蜂鳴器發(fā)聲,LED燈亮。 (見參考書P243)7.5 中斷控制器概述n S3C2410A片內(nèi)的中斷控制器,

24、接收來自56個中斷源的中斷請求。這些中斷源由S3C2410A外部中斷請求引腳和片內(nèi)外設(shè)提供。片內(nèi)外設(shè)包括DMA控制器、UART、IIC等。在這些中斷源中,UARTn的INT_ERRn、INT_RXDn和INT_TXDn經(jīng)過邏輯或以后送到中斷控制器,作為INT_UARTn。EINT4EINT7、EINT8EINT23經(jīng)過邏輯或以后送到中斷控制器,作為EINT4_7、EINT8_23。n當(dāng)從片內(nèi)外設(shè)和外部中斷請求引腳接收到多個中斷請求時,中斷控制器經(jīng)過仲裁處理后,向ARM920T內(nèi)核請求FIQ或IRQ中斷。n仲裁處理取決于硬件優(yōu)先權(quán)邏輯,并且仲裁結(jié)果寫入中斷登記寄存器INTPND(interrup

25、t pending register)。用這種方法可以幫助用戶,告知在多個中斷請求源中,哪一個經(jīng)過仲裁并送到ARM920T內(nèi)核。圖7.3是中斷處理示意圖。n有了中斷請求,請求源的保存可以分為兩種。一種是帶子請求寄存器的,如UARTn的INT_ERRn、INT_RXDn和INT_TXDn,有了中斷請求,請求源要保存在子源登記寄存器SUBSRCPND中;另一種是不帶子請求寄存器的,如INT_DMA3,有了中斷請求,請求源要保存在源登記寄存器SRCPND中。對于帶子請求寄存器的,還要檢查中斷子屏蔽寄存器INTSUBMSK是否對某一個子請求源進行了屏蔽,只有不屏蔽,才能在源登記寄存器SRCPND中對應(yīng)

26、位置1。之后,一個或多個中斷請求要判斷是否被屏蔽;是IRQ模式還是FIQ模式;如果是IRQ模式還要判斷多個中斷請求的優(yōu)先權(quán);最后以IRQ或FIQ請求送ARM920T內(nèi)核。n外部中斷EINT4EINT7、EINT8EINT23的請求,要在外部中斷登記寄存器EINTPEND中保存,檢查外部中斷屏蔽寄存器EINTMASK是否屏蔽,如果不屏蔽,才能送到源登記寄存器SRCPND的對應(yīng)位EINT4_7、EINT8_23。n中斷控制器用到的S3C2410A引腳信號有EINT0EINT23和nBATT_FLT。7.6 中斷控制器操作、 中斷源及中斷優(yōu)先權(quán)7.6.1 中斷控制器操作 程序狀態(tài)寄存器(PSR)中的

27、F位和I位 如果ARM920T CPU中的PSR的F位被設(shè)置為1,CPU不接受來自中斷控制器的快速中斷請求(Fast Interrupt Request,F(xiàn)IQ)。同樣,如果I位被設(shè)置為1,CPU不接受來自中斷控制器的中斷請求(Interrupt Request,IRQ)。因此,通過清除PSR的F位或I位為0,同時設(shè)置中斷屏蔽寄存器INTMSK的對應(yīng)位為0,送到中斷控制器的中斷請求才能被處理。 中斷模式 ARM920T有2種類型的中斷模式:FIQ或IRQ,所有的中斷源在中斷請求時,要確定該中斷源被設(shè)置成哪一種模式。中斷模式寄存器INTMOD中的每1位,指示一個中斷源被設(shè)置成了哪一種模式。所有中

28、斷源中,只有1個可以設(shè)置成FIQ模式。 中斷登記寄存器nS3C2410A中有兩個中斷登記寄存器,一個是源登記寄存器SRCPND,另一個是中斷登記寄存器INTPND。這兩個登記寄存器指示一個中斷請求是或否被登記(記錄)。當(dāng)多個中斷源同時請求中斷服務(wù)時,寄存器SRCPND多個對應(yīng)位被設(shè)置成1。與此同時,經(jīng)過仲裁處理后,寄存器INTPND中僅僅1位被自動地設(shè)置為1。如果多個中斷被屏蔽,這些中斷源同時請求中斷服務(wù)時,寄存器SRCPND中的對應(yīng)位仍被設(shè)置為1,但是不引起寄存器INTPND值的改變。當(dāng)寄存器INTPND中的1位被設(shè)置為1時,如果這1位對應(yīng)IRQ請求,并且PSR中的I位為0;或者這1位對應(yīng)F

29、IQ請求,并且PSR中的F位為0,就會進入相應(yīng)的中斷服務(wù)程序。n寄存器SRCPND和INTPND能被讀或?qū)?,中斷服?wù)程序必須清除相應(yīng)的登記位,方法是通過寫1到SRCPND的對應(yīng)位,能夠?qū)⒃撐磺?。然后再寫1到INTPND的對應(yīng)位,能夠?qū)NTPND的對應(yīng)位清0。n中斷登記寄存器(interrupt pending register),也譯作中斷未決寄存器。 中斷屏蔽寄存器n中斷屏蔽寄存器INTMSK中的某1位被設(shè)置為1,指示對應(yīng)的中斷已經(jīng)被屏蔽(禁止)。如果寄存器INTMSK中的某1位為0,這1位對應(yīng)的中斷源產(chǎn)生的中斷請求,通常將被服務(wù)。n如果寄存器INTMSK中的某1位為1,并且該位對應(yīng)的中

30、斷源產(chǎn)生了中斷請求,源登記寄存器SRCPND中對應(yīng)的源登記位將被置1。7.6.2 中斷源中斷控制器支持56個中斷源,如表7-38所示。7.6.3 中斷優(yōu)先權(quán)產(chǎn)生模塊n用于32個中斷請求的優(yōu)先權(quán)邏輯由7個仲裁器(arbiter)組成,其中6個為第一級仲裁器,一個為第二級仲裁器,如圖7.4所示。n在圖7.4中,每個仲裁器,根據(jù)優(yōu)先權(quán)寄存器PRIORITY中的1位仲裁模式控制(ARB_MODE)和2位選擇控制信號(ARB_SEL)中的值,以如下方式,處理連接在仲裁器上的6個中斷請求,參見表7-39(P247)。圖7.47.7 中斷控制器特殊功能寄存器n中斷控制器特殊功能寄存器可以分為兩組,一組由源登

31、記寄存器、中斷模式寄存器、中斷屏蔽寄存器、優(yōu)先權(quán)寄存器和中斷登記寄存器組成。另一組由中斷偏移寄存器、子源登記寄存器和中斷子屏蔽寄存器組成。n來自中斷源的所有中斷請求,都要在源登記寄存器中被登記(記錄)。根據(jù)中斷模式寄存器,它們被分為兩組:快速中斷請求FIQ和中斷請求IRQ。對于同時來的多個IRQ請求,仲裁器依優(yōu)先權(quán)寄存器的設(shè)置進行仲裁。 源登記寄存器n源登記寄存器SRCPND由32位組成,其中每1位與1個中斷源相對應(yīng)。n源登記寄存器SRCPND地址為0 x4A000000,可讀寫,Reset值為0 x00000000,具體含義見表7-40。 中斷模式寄存器n中斷模式寄存器INTMOD由32位組

32、成,它們中的每一位對應(yīng)一個中斷源。中斷模式寄存器INTMOD地址為0 x4A000004,可讀寫,Reset值為0 x00000000,具體含義見表7-41。 中斷屏蔽寄存器n中斷屏蔽寄存器INTMSK由32位組成,它們中的每1位對應(yīng)1個中斷源。 n中斷屏蔽寄存器INTMSK地址為0 x4A000008,可讀寫,Reset值為0 xFFFFFFFF,具體含義見表7-42。 優(yōu)先權(quán)寄存器n優(yōu)先權(quán)寄存器PRIORITY,地址為0 x4A00000C,可讀寫,Reset值為0 x7F,具體含義見表7-43。 中斷登記寄存器n中斷登記寄存器INTPND地址為0 x4A000010,可讀寫,Reset值

33、為0 x00000000,具體含義見表7-44。 中斷偏移寄存器n中斷偏移寄存器INTOFFSET中的值是偏移值,表明了IRQ模式的哪一個中斷請求記錄在INTPND寄存器中。 n中斷偏移寄存器INTOFFSET地址為0 x4A000014,只讀,Reset值為0 x00000000,具體含義見表7-45。 子源登記寄存器n子源登記寄存器(sub source pending register)SUBSRCPND中的每1位,指示對應(yīng)的子中斷源有無中斷請求。 n子源登記寄存器SUBSRCPND地址為0 x4A000018,可讀寫,Reset值為0 x00000000,具體含義見表7-46。 中斷子

34、屏蔽寄存器n中斷子屏蔽寄存器(interrupt sub mask register)INTSUBMSK 11位中的每1位,對應(yīng)1個子中斷源。 n中斷子屏蔽寄存器INTSUBMSK地址為0 x4A00001C,可讀寫,Reset值為0 x7FF,具體含義見表7-47。7.8 中斷程序舉例 【例7.2】對于某公司生產(chǎn)的S3C2410X開發(fā)板,假設(shè)4個開關(guān)分別連接到S3C2410X(S3C2410X與S3C2410A功能完全相同)芯片的GPF0/GPF2/GPG3/GPG11 4個引腳,這4個引腳設(shè)置為中斷請求引腳,與中斷請求和中斷處理相關(guān)的內(nèi)容有: 中斷初始化中斷初始化函數(shù)中與本例對應(yīng)的C語言代

35、碼如下: rGPFCON|=20|24; /設(shè)置GPF0、GPF2為EINT0、EINT2功能rGPGCON|=26|222; /設(shè)置GPG3、GPG11為EINT11、EINT19功能 rINTMOD=0; / 中斷模式寄存器設(shè)置為0,所有中斷均為IRQ類型rEXTINT0|=40|48; / 設(shè)置EINT0、EINT2上升沿觸發(fā)rEXTINT1|=412; / 設(shè)置EINT11上升沿觸發(fā) rEXTINT2|=412; / 設(shè)置EINT19上升沿觸發(fā)rEINTMASK&=(111|119); / EINT11、EINT19對應(yīng)屏蔽位置0,允許服務(wù) rINTMSK&=(10|1

36、2|15); / EINT0、EINT2、EINT8_23對應(yīng)屏蔽位置0,允許服務(wù) / 假定中斷優(yōu)先權(quán)寄存器的值使用已經(jīng)設(shè)定過的值, / 此處不再設(shè)置 中斷請求一旦這4個中斷請求引腳出現(xiàn)一個或多個中斷請求,則: 如果EINT0或EINT2有請求,源登記寄存器SRCPND0或SRCPND2被自動置1; 如果EINT11或EINT19有請求,外部中斷登記寄存器EINTPEND11或EINTPEND19被自動置1,并且源登記寄存器SRCPND5被自動置1; 由于這些中斷都沒有被屏蔽,經(jīng)過優(yōu)先權(quán)仲裁器,優(yōu)先權(quán)最高的中斷請求,在中斷登記寄存器INTPND中的對應(yīng)位被置1,中斷偏移寄存器INTOFFSET

37、中自動被設(shè)置相應(yīng)的偏移量; 作為IRQ請求送ARM920T內(nèi)核; ARM920T CPU的當(dāng)前程序狀態(tài)寄存器CPSR中如果I位為0時,表示允許IRQ中斷,當(dāng)前正在執(zhí)行的指令執(zhí)行結(jié)束后,CPU響應(yīng)IRQ請求。 中斷響應(yīng)n在中斷響應(yīng)過程,ARM920T CPU自動完成以下操作: 將PC的值,保存到IRQ方式下的連接寄存器LR中,返回時用; 將當(dāng)前程序狀態(tài)寄存器CPSR內(nèi)容保存到IRQ方式下的保留程序狀態(tài)寄存器 SPSR中; 強制設(shè)置程序狀態(tài)寄存器的方式位CPSR4:0為10010,系統(tǒng)進入IRQ方式; 強制設(shè)置程序狀態(tài)寄存器的T狀態(tài)位CPSR5為0,系統(tǒng)進入ARM狀態(tài); 強制設(shè)置程序狀態(tài)寄存器的I

38、RQ禁止位CPSR7為1,禁止CPU再次響應(yīng)IRQ請求; 通常(沒采用高向量地址配置)將IRQ異常入口地址0 x00000018送程序計數(shù)器PC。此后程序從0 x00000018處執(zhí)行,分支到IRQ中斷服務(wù)程序。n發(fā)生異常后,異常入口地址及這些地址中存放的指令見表7-48,表中對應(yīng)IRQ的入口地址0 x00000018內(nèi),存放的是分支指令B HandlerIRQ,HandlerIRQ通常是IRQ中斷服務(wù)程序的入口地址。n然而,由于表7-48中分支指令B的分支范圍為32MB,當(dāng)中斷服務(wù)程序在內(nèi)存中保存后,如果首地址離異常入口地址較遠(yuǎn),超過32MB時,需要增加一段代碼。這段代碼應(yīng)該與異常入口地址較近,并且能夠分支到異常(中斷)服務(wù)程序。例如對于中斷請求IRQ,有以下代碼:HandlerIRQ ;標(biāo)號,程序入口, ;由0 x00000018中B HandlerIRQ ;指令分支到此處SUB SP,SP,#4 ;修改棧指針,在棧頂留出4 ;字節(jié)空間,后續(xù)指令 ;STR R0,SP,#4將R0內(nèi)容填入STMFD SP!,R0 ;保存工

溫馨提示

  • 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

提交評論