收藏 分销(赏)

刘彦文清华大学出版社嵌入式系统原理及接口技术第7章模板.ppt

上传人:精*** 文档编号:1809746 上传时间:2024-05-09 格式:PPT 页数:73 大小:1.89MB
下载 相关 举报
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章模板.ppt_第1页
第1页 / 共73页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章模板.ppt_第2页
第2页 / 共73页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章模板.ppt_第3页
第3页 / 共73页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章模板.ppt_第4页
第4页 / 共73页
刘彦文清华大学出版社嵌入式系统原理及接口技术第7章模板.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

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、外部中断控制寄存器EXTINT0EXT

3、INT2、外部中断滤波寄存器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 在杂项控制寄存器MISCCR中,对下述引脚规定了它

4、们的信号方式: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个时钟信号中各选择1个作为输出,见表7-24,参考表6-1。引脚DAT

5、A15: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外部中断请求信号输入引脚,在外部中断控制寄存器EXTINT0EXT

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

7、存器中,可以读取的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中,大多数引脚有多种功能。因此对每个引脚,要求确定哪一种功能被选择。端口引脚配置寄存器GPACONGPHCON确定每个引脚的功能。n如果GPF0

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

9、1: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_OFF模式与I/O端口n在Power_OFF模式,所有GPIO寄存器值被保留。n外部中

10、断屏蔽寄存器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=ADDR25GPA21210=输输出出 1=nRSTOUT GPA990=输输出出 1=ADDR24GPA20200

11、=输输出出 1=nFREGPA880=输输出出 1=ADDR23GPA19190=输输出出 1=nFWEGPA770=输输出出 1=ADDR22GPA18180=输输出出 1=ALEGPA660=输输出出 1=ADDR21GPA17170=输输出出 1=CLEGPA550=输输出出 1=ADDR20GPA16160=输输出出 1=nGCS5GPA440=输输出出 1=ADDR19GPA15150=输输出出 1=nGCS4GPA330=输输出出 1=ADDR18GPA14140=输输出出 1=nGCS3GPA220=输输出出 1=ADDR17GPA13130=输输出出 1=nGCS2GPA110

12、=输输出出 1=ADDR16GPA12120=输输出出 1=nGCS1GPA000=输输出出 1=ADDR0GPA11110=输输出出 1=ADDR26表7-1 端口A引脚配置寄存器含义GPADAT位位描描 述述GPA22:022:0当当该该端口被配置端口被配置为输为输出端口出端口时时,引脚状,引脚状态态与与这这个寄存器个寄存器中的中的对应对应位相同。位相同。当当该该端口被配置端口被配置为为功能引脚功能引脚时时,读读入入值值未定未定义义表7-2 端口A数据寄存器含义 端口B寄存器组 各寄存器具体含义见表7-3、表7-4和表7-5。端口C寄存器组 各寄存器具体含义见表7-6、表7-7和表7-8。

13、端口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-21、表7-22和表7-23。7.3.2 其他寄存器 杂项控制寄存器n杂项控制寄存器中的一些位用来对USB主机和USB设备进行控制;另外一些位用于保护SDRAM,以及对数据总线上拉电阻允许/禁止等进行控制。n杂项控制寄存器MISCCR,地址为0 x56000080,可读写,Reset

14、值为0 x10330。寄存器具体含义见表7-24。DCLK控制寄存器nDCLK控制寄存器DCLKCON,地址为0 x56000084,可读写,Reset值为0 x0。寄存器具体含义见表7-25。nDCLKCON寄存器定义DCLK0、DCLK1信号,这两个信号用作外部源时钟,DCLKn信号的低电平、高电平时间长度的关系见图7.1。n只有当CLKOUT1:0被设置成发送DCLKn信号时,DCLKCON才能够实际操作。图7.1 外部中断控制寄存器组n外部中断控制寄存器组共有3个寄存器,寄存器名分别为EXTINT0、EXTINT1和EXTINT2;地址分别为0 x56000088、0 x5600008

15、C和0 x56000090;可读写;Reset值均为0。n外部中断控制寄存器组,能够配置24个外部中断源中的每一个提出中断请求信号的方式,包括电平方式和边沿方式,同时也配置了信号的极性。n为了识别电平中断,对EINT15:0中的EXTINTn引脚合法的逻辑电平必须保持最少40ns以上。n各寄存器具体含义见表7-26、表7-27和表7-28。外部中断滤波寄存器组n外部中断滤波寄存器组共有4个寄存器,前两个保留未用。后两个寄存器分别是EINTFLT2和EINTFLT3;地址分别是0 x5600009C和0 x560000A0;可读写;Reset值均为0 x0。n2个外部中断滤波寄存器控制8个外部中

16、断EINT23:16使用的滤波时钟和滤波宽度。n各寄存器具体含义见表7-29和表7-30,表中OSC_CLK即图6.1中的XTIpll。外部中断屏蔽寄存器n外部中断屏蔽寄存器名为EINTMASK,地址为0 x560000A4,可读写,Reset值为0 x00FFFFF0。n外部中断屏蔽寄存器能够对20个外部中断源EINT23:4分别进行屏蔽,具体含义见表7-31。外部中断登记寄存器n外部中断登记寄存器EINTPEND供20个外部中断EINT23:4使用。用户能够清除EINTPEND寄存器某一指定位,方法是通过给寄存器对应位写1。n外部中断登记寄存器(external interrupt pen

17、ding register)也译作外部中断未决寄存器。n外部中断登记寄存器地址为0 x560000A8,可读写,Reset值为0 x0。n外部中断登记寄存器具体含义见表7-32。通用状态寄存器组n通用状态寄存器组由5个寄存器GSTATUS0GSTATUS4组成;地址分别为0 x560000AC、0 x560000B0、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

18、 I/O端口程序举例n在嵌入式系统中能够使用C语言对特殊功能寄存器进行读写,特殊功能寄存器位于S3C2410A片内。每个特殊功能寄存器都有一个固定地址,通常要在.H文件中映射特殊功能寄存器的地址。方法是对每个特殊功能寄存器对应的地址,用预处理命令define加以定义。n以下映射方法一的代码取自C/OS-的gpio.h,方法二的代码取自Linux的arch-s3c2410/s3c2410.h。方法一:#define _REG(x)(*(volatile unsigned int*)(x)#define GPIO_CTL_BASE0 x56000000#define bGPIO(p)_REG(GP

19、IO_CTL_BASE+(p)#define rMISCCRbGPIO(0 x80)/相当于#define rMISCCR(*(volatile unsigned int*)(0 x56000000+0 x80)/下同#define rDCLKCONbGPIO(0 x84)#define rEXTINT0 bGPIO(0 x88)#define rGSTATUS3bGPIO(0 xb8)#define rGSTATUS4bGPIO(0 xbc)#define rGPACONbGPIO(0 x00)#define rGPADATbGPIO(0 x04)#define rGPBCON bGPIO(

20、0 x10)#define rGPHCONbGPIO(0 x70)#define rGPHDATbGPIO(0 x74)#define rGPHUPbGPIO(0 x78)方法二:#define GPIO_CTL_BASE 0 x56000000#define 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)#

21、define GPACONbGPIO(0 x00)#define GPADATbGPIO(0 x04)#define GPBCONbGPIO(0 x10)#define GPHCONbGPIO(0 x70)#define GPHDATbGPIO(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 xf

22、fff;rGPDCON=0 xaaaaaaaa;rGPDUP =0 xffff;rGPECON=0 xaaaaaaaa;rGPEUP =0 xffff;rGPFCON=0 x55aa;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对应的

23、引脚上有一位是低电平时,则蜂鸣器发声,LED灯亮。(见参考书P243)7.5 中断控制器概述n S3C2410A片内的中断控制器,接收来自56个中断源的中断请求。这些中断源由S3C2410A外部中断请求引脚和片内外设提供。片内外设包括DMA控制器、UART、IIC等。在这些中断源中,UARTn的INT_ERRn、INT_RXDn和INT_TXDn经过逻辑或以后送到中断控制器,作为INT_UARTn。EINT4EINT7、EINT8EINT23经过逻辑或以后送到中断控制器,作为EINT4_7、EINT8_23。n当从片内外设和外部中断请求引脚接收到多个中断请求时,中断控制器经过仲裁处理后,向AR

24、M920T内核请求FIQ或IRQ中断。n仲裁处理取决于硬件优先权逻辑,并且仲裁结果写入中断登记寄存器INTPND(interrupt pending register)。用这种方法可以帮助用户,告知在多个中断请求源中,哪一个经过仲裁并送到ARM920T内核。图7.3是中断处理示意图。n有了中断请求,请求源的保存可以分为两种。一种是带子请求寄存器的,如UARTn的INT_ERRn、INT_RXDn和INT_TXDn,有了中断请求,请求源要保存在子源登记寄存器SUBSRCPND中;另一种是不带子请求寄存器的,如INT_DMA3,有了中断请求,请求源要保存在源登记寄存器SRCPND中。对于带子请求寄

25、存器的,还要检查中断子屏蔽寄存器INTSUBMSK是否对某一个子请求源进行了屏蔽,只有不屏蔽,才能在源登记寄存器SRCPND中对应位置1。之后,一个或多个中断请求要判断是否被屏蔽;是IRQ模式还是FIQ模式;如果是IRQ模式还要判断多个中断请求的优先权;最后以IRQ或FIQ请求送ARM920T内核。n外部中断EINT4EINT7、EINT8EINT23的请求,要在外部中断登记寄存器EINTPEND中保存,检查外部中断屏蔽寄存器EINTMASK是否屏蔽,如果不屏蔽,才能送到源登记寄存器SRCPND的对应位EINT4_7、EINT8_23。n中断控制器用到的S3C2410A引脚信号有EINT0EI

26、NT23和nBATT_FLT。7.6 中断控制器操作、中断源及中断优先权7.6.1 中断控制器操作 程序状态寄存器(PSR)中的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,所有的中断源在

27、中断请求时,要确定该中断源被设置成哪一种模式。中断模式寄存器INTMOD中的每1位,指示一个中断源被设置成了哪一种模式。所有中断源中,只有1个可以设置成FIQ模式。中断登记寄存器nS3C2410A中有两个中断登记寄存器,一个是源登记寄存器SRCPND,另一个是中断登记寄存器INTPND。这两个登记寄存器指示一个中断请求是或否被登记(记录)。当多个中断源同时请求中断服务时,寄存器SRCPND多个对应位被设置成1。与此同时,经过仲裁处理后,寄存器INTPND中仅仅1位被自动地设置为1。如果多个中断被屏蔽,这些中断源同时请求中断服务时,寄存器SRCPND中的对应位仍被设置为1,但是不引起寄存器INT

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

29、K中的某1位为0,这1位对应的中断源产生的中断请求,通常将被服务。n如果寄存器INTMSK中的某1位为1,并且该位对应的中断源产生了中断请求,源登记寄存器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个中断请

30、求,参见表7-39(P247)。图7.47.7 中断控制器特殊功能寄存器n中断控制器特殊功能寄存器可以分为两组,一组由源登记寄存器、中断模式寄存器、中断屏蔽寄存器、优先权寄存器和中断登记寄存器组成。另一组由中断偏移寄存器、子源登记寄存器和中断子屏蔽寄存器组成。n来自中断源的所有中断请求,都要在源登记寄存器中被登记(记录)。根据中断模式寄存器,它们被分为两组:快速中断请求FIQ和中断请求IRQ。对于同时来的多个IRQ请求,仲裁器依优先权寄存器的设置进行仲裁。源登记寄存器n源登记寄存器SRCPND由32位组成,其中每1位与1个中断源相对应。n源登记寄存器SRCPND地址为0 x4A000000,可

31、读写,Reset值为0 x00000000,具体含义见表7-40。中断模式寄存器n中断模式寄存器INTMOD由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,具体

32、含义见表7-43。中断登记寄存器n中断登记寄存器INTPND地址为0 x4A000010,可读写,Reset值为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地址

33、为0 x4A000018,可读写,Reset值为0 x00000000,具体含义见表7-46。中断子屏蔽寄存器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个引脚设置

34、为中断请求引脚,与中断请求和中断处理相关的内容有:中断初始化中断初始化函数中与本例对应的C语言代码如下: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

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

36、置1,中断偏移寄存器INTOFFSET中自动被设置相应的偏移量;作为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状态;强制

37、设置程序状态寄存器的IRQ禁止位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时,需要增加一段代码。这段代码

38、应该与异常入口地址较近,并且能够分支到异常(中断)服务程序。例如对于中断请求IRQ,有以下代码:HandlerIRQ ;标号,程序入口,;由0 x00000018中B HandlerIRQ ;指令分支到此处SUB SP,SP,#4 ;修改栈指针,在栈顶留出4 ;字节空间,后续指令 ;STR R0,SP,#4将R0内容填入STMFD SP!,R0 ;保存工作寄存器R0内容LDR R0,=HandleIRQ;取出保存HandleIRQ异常向量的表地址LDR R0,R0 ;表地址的内容,即HandleIRQ地址,送R0 STR R0,SP,#4 ;R0的值,即HandleIRQ地址,存堆栈LDMFD

39、 SP!,R0,PC ;恢复工作寄存器R0内容;出栈 ;HandleIRQ地址到PC,实现分支n上述代码中的HandleIRQ是IRQ中断服务程序的入口地址,各异常(中断)服务程序的入口地址在异常向量表中已经定义。;异常向量表HandleReset#4 ;Reset异常服务程序入口地址,占4字节HandleUndef#4HandleSWI#4HandlePabort#4HandleDabort#4HandleReserved#4HandleIRQ#4 ;IRQ中断服务程序入口地址,占4字节HandleFIQ#4 中断向量表n进入IRQ中断服务程序后,要区分是哪个中断源提出了请求,并且应该转到对

40、应的服务程序。n中断登记寄存器INTPND的32位对应的32个中断源,有32段服务程序与之相对应。用32段服务程序中每段程序的起始地址,可以建立一个表,称为中断向量表。中断向量表如下:;中断向量表HandleEINT0#4;HandleEINT0是EINT0中断源 ;对应的程序入口地址,长度为4字节HandleEINT1#4HandleEINT2#4HandleEINT3#4HandleEINT4_7#4;HandleEINT4_7是 ;EINT4EINT7中断源对应的程序入口地址,;进入该程序,还要根据外部中断登记寄存器 ;EINTPEND区分4个中断源中哪一个提出了 ;中断请求 Handl

41、eINT_ADC#4 IRQ中断服务程序n在IRQ中断服务程序中,要根据中断偏移寄存器值并结合中断向量表,转到中断请求对应的服务程序,部分汇编语言程序如下:IsrIRQ;标号 SUB SP,SP,#4;修改栈指针,在栈顶留出4字节空间STMFD SP!R8-R9;保存R8,R9 LDR R9,=INTOFFSET;取中断偏移寄存器INTOFFSET地址 LDR R9,R9;读中断偏移寄存器值 LDR R8,=HandleEINT0;取中断向量表首地址 ADD R8,R8,R9,LSL#2;由中断偏移寄存器INTOFFSET中偏移 ;量乘以4,加中断向量表首地址,;得到对应中断在向量表中的地址 LDR R8,R8;从向量表中取中断请求对应的服务 ;程序入口地址到R8 STR R8,SP,#8;R8存堆栈 LDMFD SP!,R8-R9,PC;从堆栈将原R8(对应中断入口地址);内容送PC,转移到对应中断服务程序,;同时出栈R8,R9(其余部分见参考书P258-259)【例7.3】以下代码前面的是C/OS-中与中断处理有关的预处理命令和几个函数,最后一段程序是Linux中的代码,请读者仔细阅读并理解其含义。(见参考书P259-262)END

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服