刘彦文清华大学出版社嵌入式系统原理及接口技术第7章_第1页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章_第2页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章_第3页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章_第4页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章 IO端口及中断控制器本章重点本章重点: S3C2410A I/O端口概述;I/O端口控制;I/O端口特殊功能寄存器;I/O端口程序举例。在I/O端口特殊功能寄存器中,除了讲述GPAGPH对应的寄存器外,还讲述了杂项控制寄存器、与外部中断有关的寄存器等内容。 S3C2410A中断控制器概述;中断控制器操作、中断源及中断优先权产生模块;中断控制器特殊功能寄存器;中断程序举例。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初始引脚状态在7.3.1节各引脚配置寄存器中,以信号名带有下划线来表示。 其他寄存器概述n在7.3.2节,讲述了特殊功能寄存器中的另外一些寄存器,这些寄存器控制某些时钟信号、外部中断请求信号的方式、外部中断屏蔽与否等等。包括:杂项控制寄存器MISCCR、DCLK控制寄存器DCLKCON、外部中断控制寄存

3、器EXTINT0EXTINT2、外部中断滤波寄存器EINTFLT2和EINTFLT3、外部中断屏蔽寄存器EINTMASK、外部中断登记寄存器EINTPEND和通用状态寄存器GSTATUS0GSTATUS4。每个寄存器的具体含义见7.3.2节。7.1.2 与I/O端口及其他寄存器相关的S3C2410A引脚信号 与I/O端口相关的S3C2410A引脚信号n端口A端口H的数据寄存器GPADATGPHDAT,与S3C2410A的117个引脚相关,每个引脚可以设置的具体功能及对应的引脚信号见7.3.1节。 与其他寄存器相关的S3C2410A引脚信号 杂项控制寄存器MISCCR 在杂项控制寄存器MISCC

4、R中,对下述引脚规定了它们的信号方式: SCKE、SCLK1和SCLK0引脚信号,S3C2410A输出,在Power_OFF模式用于保护SDRAM。在寄存器MISCCR中规定了它们输出信号的方式,见表7-24,参考表5-4。 nRSTOUT为外部设备Reset引脚信号,S3C2410A输出,由nRESET & nWDTRST(看门狗Reset)& SW_RESET(软件Reset)形成,在寄存器MISCCR中可以设置软件Reset,见表7-24,参考表6-1。 CLKOUT1、CLKOUT0是S3C2410A输出信号,信号源可由寄存器MISCCR控制,分别从6个时钟信号中各选择

5、1个作为输出,见表7-24,参考表6-1。 引脚DATA15:0、DATA31:16由寄存器MISCCR规定了允许/禁止使用上拉电阻,见表7-24,参考表5-3。 DCLK控制寄存器DCLKCON 只有在杂项控制寄存器MISCCR中,用CLKSEL1、CLKSEL0选择了S3C2410A的CLKOUT1、CLKOUT0输出引脚使用DCLK1、DCLK0作为信号源,那么DCLKCON中的参数才起作用。这些参数设置DCLKn信号高、低电平的时间长度、DCLKn的分频值等内容,见表7-25,表7-24。 外部中断控制寄存器EXTINT0EXTINT2 EINT0EINT23是S3C2410A外部中断

6、请求信号输入引脚,在外部中断控制寄存器EXTINT0EXTINT2中,可以设置请求信号方式(低电平、高电平、下降沿、上升沿、2个沿),见表7-26、表7-27和表7-28。 外部中断滤波寄存器EINTFLT2和EINTFLT3 EINTFLT2和EINTFLT3规定了S3C2410A外部中断请求输入引脚EINT16EINT23,所使用的滤波宽度和可选择的滤波时钟。 外部中断屏蔽寄存器EINTMASK 对S3C2410A外部中断请求引脚EINT23EINT4,规定了哪一个被屏蔽或允许中断。 外部中断登记寄存器EINTPEND 对S3C2410A外部中断请求引脚EINT23EINT4请求信号登记,

7、1为有请求。 通用状态寄存器GSTATUS0GSTATUS4这些寄存器中,可以读取的S3C2410A的引脚状态有: nWAIT,存储器要求等待(扩展当前总线周期)信号,输入,见表7-33,参考表5-3。 NCON,Nand Flash配置状态,输入,见表7-33,参考表5-29。 RnB,Nand Flash Ready/Busy输入信号,见表7-33,参考表5-29。 nBATT_FLT,电池状态引脚输入信号,见表7-33,参考表6-1。7.2 I/O端口控制 端口引脚配置寄存器GPACONGPHCONn在S3C2410A中,大多数引脚有多种功能。因此对每个引脚,要求确定哪一种功能被选择。端

8、口引脚配置寄存器GPACONGPHCON确定每个引脚的功能。n如果GPF0GPF7和GPG0GPG7在Power_OFF模式用作唤醒信号,那么这些端口应该配置成中断模式。 端口数据寄存器GPADATGPHDATn如果端口被配置为输出端口,数据应该写到端口数据寄存器的对应位;如果端口被配置为输入端口,数据应该从端口数据寄存器的对应位读出。 端口上拉(电阻)允许/禁止寄存器GPBUPGPHUPn端口上拉(电阻)允许/禁止寄存器也称为端口上拉允许/禁止寄存器。n端口上拉(电阻)允许/禁止寄存器控制每个端口上拉电阻允许/禁止。当对应位为0时,引脚的上拉电阻被允许;当对应位为1时,上拉电阻被禁止。 杂项

9、控制寄存器n杂项(miscellaneous)控制寄存器对数据总线端口DATA31:16、DATA15:0上拉电阻、USB pad和CLKOUT等进行选择。 外部中断控制寄存器EXTINTn和外部中断滤波寄存器EINTFLTnnS3C2410A的24个外部中断可以由各种信号方式提出请求。由EXTINTn寄存器配置的外部中断请求信号方式有:低电平触发、高电平触发、下降沿触发、上升沿触发以及2个沿都触发。n8个外部中断引脚有数字滤波,参见7.3.2节外部中断滤波寄存器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位,在刚刚唤醒后将不设置为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当该端口被配置为输出端口时,引脚状态与这个寄存器当该端口被配置为输出端口时,引脚状态与这个寄存器中

13、的对应位相同。中的对应位相同。当该端口被配置为功能引脚时,读入值未定义当该端口被配置为功能引脚时,读入值未定义表7-2 端口A数据寄存器含义 端口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设备进行控制;另外一些位用于保护SDRAM,以及对数据总线上拉电阻允许/禁止等进行控制。n杂项控制寄存器MISCCR,地址为0 x56000080,可读写,Reset值为0 x10330。寄存器具体含义见表7-24。 DCLK控制寄存器nDCLK控制寄存器DCLKCON,地址为0 x56000084,可读写,Reset值为0 x0。寄存器具体含义见表7-25。nDCLKCON寄存器定义DCLK0、DCLK1信号,这两个信号用作外部源时钟,DCLKn信号的低电平、高电平时间长度的关

15、系见图7.1。n只有当CLKOUT1:0被设置成发送DCLKn信号时,DCLKCON才能够实际操作。图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外部中断屏蔽寄存器能够对20个外部中断

17、源EINT23:4分别进行屏蔽,具体含义见表7-31。 外部中断登记寄存器n外部中断登记寄存器EINTPEND供20个外部中断EINT23:4使用。用户能够清除EINTPEND寄存器某一指定位,方法是通过给寄存器对应位写1。n外部中断登记寄存器(external interrupt pending register)也译作外部中断未决寄存器。n外部中断登记寄存器地址为0 x560000A8,可读写,Reset值为0 x0。n外部中断登记寄存器具体含义见表7-32。 通用状态寄存器组n通用状态寄存器组由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在嵌入式系统中能够使用C语言对特殊功能寄存器进行读写,特殊功能寄存器位于S3C2410A片内。每个特殊功能寄存器都有一个固定地址,通常要在.H文件中映射特殊功能寄存器的地址。方法是对每个特殊功能寄存器对应的地址,用预处理命令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) / 相当于 #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-环境下,针对某开发板具体配置,设置I/O端口的一个例子。请读者根据I/O端口设置的数据,说出开发板的配置。 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用作并行数据输入,若端口F对应的引脚上有一位是低电平时,则蜂鸣器发声,LED灯亮。 (见参考书P243)7.5 中断控制器概述n S3C2410A片内的中断控制器,

24、接收来自56个中断源的中断请求。这些中断源由S3C2410A外部中断请求引脚和片内外设提供。片内外设包括DMA控制器、UART、IIC等。在这些中断源中,UARTn的INT_ERRn、INT_RXDn和INT_TXDn经过逻辑或以后送到中断控制器,作为INT_UARTn。EINT4EINT7、EINT8EINT23经过逻辑或以后送到中断控制器,作为EINT4_7、EINT8_23。n当从片内外设和外部中断请求引脚接收到多个中断请求时,中断控制器经过仲裁处理后,向ARM920T内核请求FIQ或IRQ中断。n仲裁处理取决于硬件优先权逻辑,并且仲裁结果写入中断登记寄存器INTPND(interrup

25、t pending register)。用这种方法可以帮助用户,告知在多个中断请求源中,哪一个经过仲裁并送到ARM920T内核。图7.3是中断处理示意图。n有了中断请求,请求源的保存可以分为两种。一种是带子请求寄存器的,如UARTn的INT_ERRn、INT_RXDn和INT_TXDn,有了中断请求,请求源要保存在子源登记寄存器SUBSRCPND中;另一种是不带子请求寄存器的,如INT_DMA3,有了中断请求,请求源要保存在源登记寄存器SRCPND中。对于带子请求寄存器的,还要检查中断子屏蔽寄存器INTSUBMSK是否对某一个子请求源进行了屏蔽,只有不屏蔽,才能在源登记寄存器SRCPND中对应

26、位置1。之后,一个或多个中断请求要判断是否被屏蔽;是IRQ模式还是FIQ模式;如果是IRQ模式还要判断多个中断请求的优先权;最后以IRQ或FIQ请求送ARM920T内核。n外部中断EINT4EINT7、EINT8EINT23的请求,要在外部中断登记寄存器EINTPEND中保存,检查外部中断屏蔽寄存器EINTMASK是否屏蔽,如果不屏蔽,才能送到源登记寄存器SRCPND的对应位EINT4_7、EINT8_23。n中断控制器用到的S3C2410A引脚信号有EINT0EINT23和nBATT_FLT。7.6 中断控制器操作、 中断源及中断优先权7.6.1 中断控制器操作 程序状态寄存器(PSR)中的

27、F位和I位 如果ARM920T CPU中的PSR的F位被设置为1,CPU不接受来自中断控制器的快速中断请求(Fast Interrupt Request,FIQ)。同样,如果I位被设置为1,CPU不接受来自中断控制器的中断请求(Interrupt Request,IRQ)。因此,通过清除PSR的F位或I位为0,同时设置中断屏蔽寄存器INTMSK的对应位为0,送到中断控制器的中断请求才能被处理。 中断模式 ARM920T有2种类型的中断模式:FIQ或IRQ,所有的中断源在中断请求时,要确定该中断源被设置成哪一种模式。中断模式寄存器INTMOD中的每1位,指示一个中断源被设置成了哪一种模式。所有中

28、断源中,只有1个可以设置成FIQ模式。 中断登记寄存器nS3C2410A中有两个中断登记寄存器,一个是源登记寄存器SRCPND,另一个是中断登记寄存器INTPND。这两个登记寄存器指示一个中断请求是或否被登记(记录)。当多个中断源同时请求中断服务时,寄存器SRCPND多个对应位被设置成1。与此同时,经过仲裁处理后,寄存器INTPND中仅仅1位被自动地设置为1。如果多个中断被屏蔽,这些中断源同时请求中断服务时,寄存器SRCPND中的对应位仍被设置为1,但是不引起寄存器INTPND值的改变。当寄存器INTPND中的1位被设置为1时,如果这1位对应IRQ请求,并且PSR中的I位为0;或者这1位对应F

29、IQ请求,并且PSR中的F位为0,就会进入相应的中断服务程序。n寄存器SRCPND和INTPND能被读或写,中断服务程序必须清除相应的登记位,方法是通过写1到SRCPND的对应位,能够将该位清0。然后再写1到INTPND的对应位,能够将INTPND的对应位清0。n中断登记寄存器(interrupt pending register),也译作中断未决寄存器。 中断屏蔽寄存器n中断屏蔽寄存器INTMSK中的某1位被设置为1,指示对应的中断已经被屏蔽(禁止)。如果寄存器INTMSK中的某1位为0,这1位对应的中断源产生的中断请求,通常将被服务。n如果寄存器INTMSK中的某1位为1,并且该位对应的中

30、断源产生了中断请求,源登记寄存器SRCPND中对应的源登记位将被置1。7.6.2 中断源中断控制器支持56个中断源,如表7-38所示。7.6.3 中断优先权产生模块n用于32个中断请求的优先权逻辑由7个仲裁器(arbiter)组成,其中6个为第一级仲裁器,一个为第二级仲裁器,如图7.4所示。n在图7.4中,每个仲裁器,根据优先权寄存器PRIORITY中的1位仲裁模式控制(ARB_MODE)和2位选择控制信号(ARB_SEL)中的值,以如下方式,处理连接在仲裁器上的6个中断请求,参见表7-39(P247)。图7.47.7 中断控制器特殊功能寄存器n中断控制器特殊功能寄存器可以分为两组,一组由源登

31、记寄存器、中断模式寄存器、中断屏蔽寄存器、优先权寄存器和中断登记寄存器组成。另一组由中断偏移寄存器、子源登记寄存器和中断子屏蔽寄存器组成。n来自中断源的所有中断请求,都要在源登记寄存器中被登记(记录)。根据中断模式寄存器,它们被分为两组:快速中断请求FIQ和中断请求IRQ。对于同时来的多个IRQ请求,仲裁器依优先权寄存器的设置进行仲裁。 源登记寄存器n源登记寄存器SRCPND由32位组成,其中每1位与1个中断源相对应。n源登记寄存器SRCPND地址为0 x4A000000,可读写,Reset值为0 x00000000,具体含义见表7-40。 中断模式寄存器n中断模式寄存器INTMOD由32位组

32、成,它们中的每一位对应一个中断源。中断模式寄存器INTMOD地址为0 x4A000004,可读写,Reset值为0 x00000000,具体含义见表7-41。 中断屏蔽寄存器n中断屏蔽寄存器INTMSK由32位组成,它们中的每1位对应1个中断源。 n中断屏蔽寄存器INTMSK地址为0 x4A000008,可读写,Reset值为0 xFFFFFFFF,具体含义见表7-42。 优先权寄存器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位,指示对应的子中断源有无中断请求。 n子源登记寄存器SUBSRCPND地址为0 x4A000018,可读写,Reset值为0 x00000000,具体含义见表7-46。 中断子

34、屏蔽寄存器n中断子屏蔽寄存器(interrupt sub mask register)INTSUBMSK 11位中的每1位,对应1个子中断源。 n中断子屏蔽寄存器INTSUBMSK地址为0 x4A00001C,可读写,Reset值为0 x7FF,具体含义见表7-47。7.8 中断程序举例 【例7.2】对于某公司生产的S3C2410X开发板,假设4个开关分别连接到S3C2410X(S3C2410X与S3C2410A功能完全相同)芯片的GPF0/GPF2/GPG3/GPG11 4个引脚,这4个引脚设置为中断请求引脚,与中断请求和中断处理相关的内容有: 中断初始化中断初始化函数中与本例对应的C语言代

35、码如下: rGPFCON|=20|24; /设置GPF0、GPF2为EINT0、EINT2功能rGPGCON|=26|222; /设置GPG3、GPG11为EINT11、EINT19功能 rINTMOD=0; / 中断模式寄存器设置为0,所有中断均为IRQ类型rEXTINT0|=40|48; / 设置EINT0、EINT2上升沿触发rEXTINT1|=412; / 设置EINT11上升沿触发 rEXTINT2|=412; / 设置EINT19上升沿触发rEINTMASK&=(111|119); / EINT11、EINT19对应屏蔽位置0,允许服务 rINTMSK&=(10|1

36、2|15); / EINT0、EINT2、EINT8_23对应屏蔽位置0,允许服务 / 假定中断优先权寄存器的值使用已经设定过的值, / 此处不再设置 中断请求一旦这4个中断请求引脚出现一个或多个中断请求,则: 如果EINT0或EINT2有请求,源登记寄存器SRCPND0或SRCPND2被自动置1; 如果EINT11或EINT19有请求,外部中断登记寄存器EINTPEND11或EINTPEND19被自动置1,并且源登记寄存器SRCPND5被自动置1; 由于这些中断都没有被屏蔽,经过优先权仲裁器,优先权最高的中断请求,在中断登记寄存器INTPND中的对应位被置1,中断偏移寄存器INTOFFSET

37、中自动被设置相应的偏移量; 作为IRQ请求送ARM920T内核; ARM920T CPU的当前程序状态寄存器CPSR中如果I位为0时,表示允许IRQ中断,当前正在执行的指令执行结束后,CPU响应IRQ请求。 中断响应n在中断响应过程,ARM920T CPU自动完成以下操作: 将PC的值,保存到IRQ方式下的连接寄存器LR中,返回时用; 将当前程序状态寄存器CPSR内容保存到IRQ方式下的保留程序状态寄存器 SPSR中; 强制设置程序状态寄存器的方式位CPSR4:0为10010,系统进入IRQ方式; 强制设置程序状态寄存器的T状态位CPSR5为0,系统进入ARM状态; 强制设置程序状态寄存器的I

38、RQ禁止位CPSR7为1,禁止CPU再次响应IRQ请求; 通常(没采用高向量地址配置)将IRQ异常入口地址0 x00000018送程序计数器PC。此后程序从0 x00000018处执行,分支到IRQ中断服务程序。n发生异常后,异常入口地址及这些地址中存放的指令见表7-48,表中对应IRQ的入口地址0 x00000018内,存放的是分支指令B HandlerIRQ,HandlerIRQ通常是IRQ中断服务程序的入口地址。n然而,由于表7-48中分支指令B的分支范围为32MB,当中断服务程序在内存中保存后,如果首地址离异常入口地址较远,超过32MB时,需要增加一段代码。这段代码应该与异常入口地址较近,并且能够分支到异常(中断)服务程序。例如对于中断请求IRQ,有以下代码:HandlerIRQ ;标号,程序入口, ;由0 x00000018中B HandlerIRQ ;指令分支到此处SUB SP,SP,#4 ;修改栈指针,在栈顶留出4 ;字节空间,后续指令 ;STR R0,SP,#4将R0内容填入STMFD SP!,R0 ;保存工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论