刘彦文《基于ARM的嵌入式系统原理及应用》第7章_第1页
刘彦文《基于ARM的嵌入式系统原理及应用》第7章_第2页
刘彦文《基于ARM的嵌入式系统原理及应用》第7章_第3页
刘彦文《基于ARM的嵌入式系统原理及应用》第7章_第4页
刘彦文《基于ARM的嵌入式系统原理及应用》第7章_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、 基于基于ARM的的 嵌入式嵌入式系统原理及应用系统原理及应用 刘彦文刘彦文 编著编著 2017年年2月月 第7章 GPIO端口及中断控制器高等院校信息技术规划教材高等院校信息技术规划教材本课件的配套教材本课件的配套教材基于基于ARM的的嵌入式嵌入式系统原理及应用系统原理及应用 刘彦文刘彦文 清华大学出版社 2017/2 第7章 GPIO端口及中断控制器7.1 S3C2440A/S3C2410A GPIO端口及端口及 其他寄存器概述、引脚信号其他寄存器概述、引脚信号7.1.1 GPIO端口及其他寄存器概述 I/O端口(Input/Output Port),也称为输入/输出端口。S3C2440A

2、/S3C2410A I/O端口控制器位于微处理器芯片内部。 GPIO端口概述n S3C2410A有117个多功能输入/输出端口引脚,分为如下8个端口: 端口A(GPA):23个输出引脚的端口; 端口B(GPB):11个输入/输出引脚的端口; 端口C(GPC):16个输入/输出引脚的端口; 端口D(GPD):16个输入/输出引脚的端口; 端口E(GPE):16个输入/输出引脚的端口; 端口F(GPF):8个输入/输出引脚的端口; 端口G(GPG):16个输入/输出引脚的端口; 端口H(GPH):11个输入/输出引脚的端口。nS3C2440A有130个多功能输入/输出端口引脚,分为9个端口,比S3

3、C2410A多1个端口J,另外端口A多了2位(保留,没使用)。端口A端口H功能引脚含义与S3C2410A基本相同。 端口J(GPJ):13个输入/输出引脚的端口。n上述GPAGPJ中的GP,表示General Purpose(通用)。n上述端口,也称GPIO(General Purpose Input Output,通用输入输出)端口。n每个端口最多与4个寄存器相关,这些寄存器合称为端口寄存器组。例如端口B,有端口B引脚配置寄存器GPBCON、端口B数据寄存器GPBDAT、端口B上拉(电阻)允许/禁止寄存器GPBUP和1个保留寄存器,参见表7-4。n参见表7-5、表7-6、表7-7,对于端口B

4、数据寄存器GPBDAT,如果这个端口被配置成输入端口,那么对应引脚输入的状态,自动地保留在这个寄存器中。CPU读GPBDAT寄存器中的数据就相当于读对应引脚的状态。如果这个端口被配置成输出端口,那么CPU写入数据寄存器GPBDAT的数据,被自动地从对应引脚输出。端口除了可以配置为输入/输出外,还可以配置为某种事先定义好的功能,比如端口B的一些引脚可以用作外部DMA请求(nXDREQ0、nXDREQ1)和响应(nXDACK0、nXDACK1)等信号。n在端口B引脚配置寄存器GPBCON中设置不同的值,选择了端口B数据寄存器作为输入、输出或某种功能被使用。n端口B上拉(电阻)允许/禁止寄存器GPB

5、UP中的值,选择了微处理器片内连接到端口B引脚的上拉(电阻)功能允许或禁止。n对于可能遇到的各种各样的系统配置和设计要求,每个端口可以由软件方便地设置。要求在运行主程序前,对被使用的每个引脚,定义使用哪一种功能或定义作为输入、输出使用。n为了避免出现问题,初始引脚状态被适当地配置,初始引脚状态指复位后硬件自动设置的状态。之后允许程序对引脚功能进行配置。n初始引脚状态在7.3.1节各引脚配置寄存器中,以信号名带有下划线来表示。 其他寄存器概述其他寄存器概述n在7.3.2节,讲述了特殊功能寄存器中的另外一些寄存器,这些寄存器控制某些时钟信号、外部中断请求信号的方式、外部中断屏蔽与否等等。包括:杂项

6、控制寄存器MISCCR、DCLK控制寄存器DCLKCON、外部中断控制寄存器EXTINT0EXTINT2、外部中断滤波器寄存器EINTFLT2和EINTFLT3、外部中断屏蔽寄存器EINTMASK、外部中断登记寄存器EINTPEND和通用状态寄存器GSTATUS0GSTATUS4等。7.1.2 与GPIO端口及其他寄存器相关的S3C2440A/S3C2410A引脚信号 与GPIO端口相关的S3C2440A/S3C2410A引脚信号n端口A端口J的数据寄存器GPADATGPJDAT,与S3C2440A的130个引脚相关;端口A端口H的数据寄存器GPADATGPHDAT,与S3C2410A的117

7、个引脚相关。每个引脚可以设置的具体功能及对应的引脚信号见7.3.1节。 与其他寄存器相关的S3C2440A/S3C2410A 引脚信号 杂项控制寄存器MISCCRn在杂项控制寄存器MISCCR中,对下述引脚规定了它们的信号方式: SCKE、SCLK1和SCLK0引脚信号,是S3C2440A/S3C2410A输出信号,在SLEEP/Power_OFF模式用于保护SDRAM。在寄存器MISCCR中规定了它们输出信号的方式,见表7-36,参考表5-4。 nRSTOUT为外部设备Reset引脚信号,是S3C2440A/S3C2410A输出信号,由nRESET & nWDTRST(看门狗Rese

8、t)& SW_RESET(软件Reset)形成,在寄存器MISCCR中可以设置软件Reset,见表7-36,参考表6-2。 CLKOUT1、CLKOUT0引脚信号,是S3C2440A/S3C2410A输出信号,信号源可由寄存器MISCCR控制,分别从6个时钟信号中各选择1个作为输出,见表7-36,参考表6-2。 引脚DATA15:0、DATA31:16,由寄存器MISCCR规定了允许/禁止使用上拉电阻,见表7-36,参考表5-3。 DCLK控制寄存器DCLKCONn只有在杂项控制寄存器MISCCR中,CLKSEL1、CLKSEL0域选择了CLKOUT1、CLKOUT0输出引脚使用DCL

9、K1、DCLK0作为信号源,那么DCLKCON中的参数才起作用。这些参数设置DCLKn信号高、低电平的时间长度、DCLKn的分频值等内容,见表7-37、表7-36。 外部中断控制寄存器EXTINT0EXTINT2nEINT0EINT23是S3C2440A/S3C2410A外部中断请求信号输入引脚,在外部中断控制寄存器EXTINT0EXTINT2中,可以设置请求信号方式(低电平、高电平、下降沿、上升沿、2个沿),见表7-38、表7-39和表7-40。 外部中断滤波器寄存器EINTFLT2和EINTFLT3nEINTFLT2和EINTFLT3规定了S3C2440A/S3C2410A外部中断请求输入

10、引脚EINT16EINT23,所使用的滤波宽度和可选择的滤波器时钟,见表7-41、表7-42。 外部中断屏蔽寄存器EINTMASKn对S3C2440A/S3C2410A外部中断请求引脚EINT23EINT4,规定了哪一个被屏蔽或允许中断,见表7-43。 外部中断登记寄存器EINTPENDn对S3C2440A/S3C2410A外部中断请求引脚EINT23EINT4请求信号进行登记,1为有请求,见表7-44。 通用状态寄存器GSTATUS0GSTATUS4n这些寄存器中,可以读取的S3C2440A/S3C2410A的引脚状态有: nWAIT,存储器要求等待(扩展当前总线周期)信号,输入,见表7-4

11、5,参考表5-3。 NCON,Nand Flash配置状态,输入,见表7-45。 RnB,Nand Flash Ready/Busy输入信号,见表7-45。 nBATT_FLT,电池状态引脚输入信号,见表7-45,参考表6-2。7.2 S3C2440A/S3C2410A GPIO端口控制端口控制 端口引脚配置寄存器GPACONGPJCONn在S3C2440A/S3C2410A中,很多引脚具有多种功能。因此对每个引脚,要求确定哪一种功能被选择。端口引脚配置寄存器GPACONGPJCON用于确定每个引脚的功能。n如果GPF0GPF7和GPG0GPG7在SLEEP/Power_OFF模式用作唤醒信号

12、,那么这些端口应该配置成中断模式。nSLEEP/Power_OFF是指S3C2440A的SLEEP或S3C2410A的Power_OFF。 端口数据寄存器端口数据寄存器GPADATGPJDATn如果端口被配置为输出端口,数据应该写到端口数据寄存器的对应位;如果端口被配置为输入端口,数据应该从端口数据寄存器的对应位读出。 端口上拉(电阻)允许/禁止寄存器GPBUPGPJUPn端口上拉(电阻)允许/禁止寄存器也称为端口上拉允许/禁止寄存器。n端口上拉允许/禁止寄存器控制每个端口上拉电阻允许/禁止。当对应位为0时,引脚的上拉电阻被允许;当对应位为1时,上拉电阻被禁止。 杂项控制寄存器n杂项(misc

13、ellaneous)控制寄存器对数据总线端口DATA31:16、DATA15:0上拉电阻、USB pad和CLKOUT等进行选择。 外部中断控制寄存器EXTINTn和外部中断滤波器寄存器EINTFLTnnS3C2440A/S3C2410A的24个外部中断可以由各种信号方式提出请求。由外部中断控制寄存器EXTINTn配置的外部中断请求信号方式有:低电平触发、高电平触发、下降沿触发、上升沿触发以及2个沿都触发。nEINT23EINT16 8个外部中断引脚有数字滤波,参见7.3.2节外部中断滤波器寄存器EINTFLT2和EINTFLT3。n只有16个EINT引脚EINT15:0在SLEEP/Powe

14、r_OFF模式可以用作唤醒源。 SLEEP/Power_OFF模式与I/O端口n在SLEEP/Power_OFF模式,所有GPIO寄存器值被保留。n外部中断屏蔽寄存器EINTMASK不能阻止从SLEEP/Power_OFF模式中唤醒。但是,如果EINTMASK正屏蔽着EINT15:4中的一个,虽然唤醒能够被操作,但源登记寄存器SRCPND中的EINT4_7和EINT8_23位,在刚刚唤醒后将不设置为1。7.3 S3C2440A/S3C2410A GPIO端口特殊功能寄存器端口特殊功能寄存器7.3.1 端口A端口J寄存器组(见P259-267)7.3.2 其他寄存器(见P267-275)7.4

15、S3C2410A GPIO端口定义、端口定义、 设置、应用程序举例设置、应用程序举例7.4.1 GPOI端口特殊功能寄存器在程序中定义n在嵌入式系统中能够使用C语言编程对特殊功能寄存器进行读写,但是应该先定义后读写。每个特殊功能寄存器都有一个固定地址,通常要在.h文件中映射特殊功能寄存器的地址。方法是对每个特殊功能寄存器对应的地址,用预处理命令define加以定义。n以下例7.1仅仅列出了对GPIO端口部分寄存器地址定义的方法,对所有特殊功能寄存器的定义方法与此相同。另外还有其他对GPIO端口寄存器定义的方法,此处不再列出。 【例7.1】 以下定义方法一的代码取自测试程序2410addr.h,

16、方法二的代码取自C/OS-的gpio.h,方法三的代码取自Linux的arch-s3c2410/s3c2410.h。 (见P275-277)7.4.2 GPIO端口初始设置举例n加电或Reset后,U-Boot对GPIO端口初始设置见例7.2。 【例7.2】 U-Boot对GPIO端口的设置。以下代码是U-Boot针对SMDK2410评估板,设置I/O端口的一个例子。寄存器定义在另外的文件中,没有列出。 (见P277)7.4.3 GPIO端口应用程序举例n例7.3中给出了通过对寄存器读、写,读入引脚信号状态及输出到引脚高低电平的代码。 【例7.3】 以下举例程序中,端口E、端口F作为普通I/O

17、端口使用,其中端口E的GPE3引脚输出控制一个LED指示灯、GPE4引脚输出控制一个蜂鸣器,如图7.2所示;端口F用作并行数据输入,若端口F对应的引脚上有一位是低电平时,则蜂鸣器发声,LED灯亮。 (见P278)7.5 S3C44B0X GPIO端口端口 1. GPIO端口 其他寄存器7.6 S3C2440A/S3C2410A与中与中 断有关的寄存器、中断处理过程断有关的寄存器、中断处理过程7.6.1 与中断有关的寄存器nS3C2440A/S3C2410A中,与中断有关的寄存器可以分为4部分,见P280图7.3。 EINT23-EINT0部分n图7.3中,这9个寄存器,除了EINTPEND外,

18、其余8个寄存器,都可以由软件进行设置:GPFCON、GPGCON可以把对应引脚设置为中断请求功能引脚;EXTINT2/1/0设置中断请求信号触发方式(低电平、高电平、下降沿、上升沿、2个沿),滤波器允许与否;EINTFLT3、EINTFLT2设置对应引脚使用的滤波器时钟信号及滤波宽度。EINTMASK中的20位,分别可以设置为允许中断/屏蔽中断,控制对EINTPEND中的EINT23:4的每1位是否屏蔽。 n从S3C2440A/S3C2410A片外引脚来的EINT23-EINT0共24个中断请求信号,可以分为3组,具体内容如下:EINT3、EINT2、EINT1、EINT0中断请求,直接送往源

19、登记寄存器SRCPND的对应位。EINT7、EINT6、EINT5、EINT4中断请求,分别送往外部中断登记寄存器EINTPEND7:4的对应位,如果外部中断屏蔽寄存器EINTMASK7:4对应位允许,EINTPEND7/6/5/4经过逻辑或,作为1个请求送往源登记寄存器SRCPND的EINT4_7位,占用1位。与EINT7EINT4相同,EINT23EINT8中断请求也是被分别送往EINTPEND23:8的对应位,如果EINTMASK23:8对应位允许,EINTPEND23:8经过逻辑或,作为1个请求送往源登记寄存器SRCPND的EINT8_23位,占用1位。 子源登记/子屏蔽寄存器部分n由

20、于源登记寄存器SRCPND只有32位,每位对应1个中断源最多对应32个中断源。S3C2440A有60个中断源,S3C2410A有56个中断源,为此有两种处理方法:外部中断EINT4-EINT7、EINT8-EINT23在SRCPND中只占2位,即EINT4_7位、EINT8_23位。片内一部分中断源的中断请求不直接送往源登记寄存器SRCPND,而是先送往子源登记寄存器SUBSRCPND,然后将相关的几个子源作为1个源送往SRCPND,详见表7-51。n中断子屏蔽寄存器INTSUBMSK只对子源登记寄存器SUBSRCPND中的中断请求设置为允许/屏蔽。 中断部分n源登记寄存器SRCPND中的每1

21、位对应1个中断源请求,或1组中断源中1个中断源的请求,1表示有请求;如果请求是从子源登记寄存器、外部中断登记寄存器来的,那么源登记寄存器中的这1位,代表的是某一组中断源中1个中断源有中断请求。n源登记寄存器中的某1位为1,如果中断屏蔽寄存器INTMSK中的对应位为0(允许),则经过优先权逻辑,送往中断登记寄存器INTPND的对应位,等待CPU服务。n优先权寄存器PRIORITY能够设置优先权次序、轮转与否。当SRCPND中同时有多位等于1,且不被屏蔽,优先权逻辑决定将它们中最高优先级的中断请求,送往中断登记寄存器INTPND的对应位。 ARM920T部分nARM920T中CPSR的I、F位,分

22、别表示允许/禁止IRQ、FIQ中断请求。允许时,ARM920T自动将当前PC送LR、CPSR送SPSR、修改CPSR、从0 x18(IRQ)或0 x1C(FIQ)取下一条指令执行。7.6.2 中断处理过程nS3C2440A/S3C2410A中断处理过程见图7.4。 图7.4 中断处理过程nS3C2440A/S3C2410A片内中断控制器,接收来自60/56个中断源的中断请求,它们由片外中断请求引脚和片内外设提供。一种中断请求源是带子寄存器的,如外部中断登记寄存器EINTPEND、子源登记寄存器SUBSRCPND,如果请求不被屏蔽,EINT4EINT7,EINT8EINT23,INT_ADC_S

23、、INT_TC,INT_ERRn、INT_RXDn、INT_TXDn等,经过逻辑或,送到源登记寄存器SRCPND作为INT4_7,INT8_23,INT_ADC,INT_UARTn等。其他中断源的中断请求则直接送往SRCPND寄存器。 n当从片内外设和外部中断请求引脚收到多个中断请求时,如果不被屏蔽(MASK),中断控制器经过仲裁处理后,向ARM920T请求FIQ或IRQ中断。n仲裁处理取决于硬件优先权逻辑,并将仲裁结果写入中断登记寄存器INTPND。使用软件查询INTPND,可以知道在多个中断请求源中,哪一个经过仲裁并送到了ARM920T。nFIQ模式(MODE)的中断请求,与屏蔽无关,直接

24、送往ARM920T的FIQ端;IRQ模式的中断请求,如果不被屏蔽,经过仲裁,送往INTPND寄存器,同时送往ARM920T的IRQ端。7.7 S3C2440A/S3C2410A中断中断控制器操作、中断源及中断优先权控制器操作、中断源及中断优先权7.7.1 中断控制器操作 当前程序状态寄存器CPSR中的F位和I位n如果ARM920T中的CPSR的F位被设置为1,CPU不接受来自中断控制器的快速中断请求FIQ。同样,如果I位被设置为1,CPU不接受来自中断控制器的中断请求IRQ。因此,通过清除CPSR的F位或I位为0,同时设置中断屏蔽寄存器INTMSK的对应位为0,送到中断控制器的中断请求才能被处

25、理。 中断模式寄存器中断模式寄存器nARM920T有2种类型的中断模式:FIQ或IRQ。所有的中断源在中断请求时,要确定该中断源被设置成哪一种模式。中断模式寄存器INTMOD中的每1位,指示一个中断源被设置成了哪一种模式。所有中断源中,只有1个可以设置成FIQ模式,见表7-54。 中断登记寄存器中断登记寄存器nS3C2440A/S3C2410A中有两个中断登记寄存器:一个是源登记寄存器SRCPND,见表7-53,另一个是中断登记寄存器INTPND,见表7-57。这两个登记寄存器指示一个中断请求是或否被登记(记录)。当多个中断源同时请求中断服务时,源登记寄存器SRCPND中多个对应位被设置成1。

26、与此同时,经过仲裁处理后,中断登记寄存器INTPND中仅仅1位被自动地设置为1。如果多个中断被屏蔽,这些中断源同时请求中断服务时,源登记寄存器SRCPND中的对应位仍被设置为1,但是不引起中断登记寄存器INTPND值的改变。n当中断登记寄存器INTPND中的1位被设置为1时,如果这1位对应IRQ请求,并且CPSR中的I位为0;或者这1位对应FIQ请求,并且CPSR中的F位为0,就会进入相应的中断服务程序。n源登记寄存器SRCPND和中断登记寄存器INTPND能被读或写,中断服务程序必须清除相应的登记位,表示该中断已经服务过了,清除的方法是通过写1到源登记寄存器SRCPND的对应位,能够将该位清

27、0。然后再写1到中断登记寄存器INTPND的对应位,能够将该位清0。 中断屏蔽寄存器n中断屏蔽寄存器INTMSK中的某1位被设置为1,指示对应的中断已经被屏蔽(禁止)。如果寄存器INTMSK中的某1位为0,这1位对应的中断源产生的中断请求,通常将被服务,见表7-55。n如果中断屏蔽寄存器INTMSK中的某1位为1(屏蔽),并且该位对应的中断源产生了中断请求,源登记寄存器SRCPND中对应的源登记位将被置1。7.7.2 中断源nS3C2410A中断控制器支持56个中断源,S3C2440A在S3C2410A基础上又增加了4个中断源,共支持60个中断源。它们支持的中断源,如P284表7-50所示。n

28、表7-50中列出的中断源的中断请求,在表7-53源登记寄存器SRCPND中被记录。送往子源登记寄存器SUBSRCPND的中断源的中断请求,以及它们分组后作为源登记寄存器SRCPND中对应的中断源名称,见P285表7-51,参见表7-59。7.7.3 中断优先权产生模块nS3C2440A/S3C2410A用于32个中断请求(记录在源登记寄存器SRCPND中)的优先权逻辑由7个仲裁器(arbiter)组成,其中6个为第一级仲裁器,1个为第二级仲裁器,如P286图7.5所示。n在图7.5中,每个仲裁器根据表7-56优先权寄存器PRIORITY中的1位仲裁模式控制(ARB_MODE)和2位选择控制信号

29、(ARB_SEL)中的值,以如下方式处理连接在仲裁器上的4/6个中断请求,参见P285表7-52。 n从表7-52可以看出,每个仲裁器的REQ0总是有最高优先权,REQ5总是有最低优先权。通过改变ARB_SEL的值,能够使REQ1REQ4的优先权实现轮转,参见表7-56。n在表7-56中,如果ARB_MODE位被设置为0,ARB_SEL位的值不会被自动改变,使得优先权操作以固定优先权模式操作(需要注意的是,即使在这种模式,仍然可以手动改变ARB_SEL的值)。如果ARB_MODE位被设置为1,ARB_SEL位的值以轮转方式被自动地改变。例如,如果REQ1被服务,ARB_SEL位被自动地改变成0

30、1b,把REQ1的优先权变为最低。 nARB_SEL被改变的详细规则如下: 如果REQ0或REQ5被服务,ARB_SEL位的值保持不变; 如果REQ1被服务,ARB_SEL位的值改变成01b; 如果REQ2被服务,ARB_SEL位的值改变成10b; 如果REQ3被服务,ARB_SEL位的值改变成11b; 如果REQ4被服务,ARB_SEL位的值改变成00b。7.8 S3C2440A/S3C2410A中断中断 控制器特殊功能寄存器控制器特殊功能寄存器 中断控制器有5个控制寄存器,它们是源登记寄存器、中断模式寄存器、中断屏蔽寄存器、优先权寄存器和中断登记寄存器。另有非控制用的中断偏移寄存器,以及子

31、源登记寄存器和中断子屏蔽寄存器。n来自中断源的所有中断请求,都要在源登记寄存器中被登记(记录)。根据中断模式寄存器,它们被分为两组:快速中断请求FIQ和中断请求IRQ。对于同时来的多个IRQ请求,仲裁器依据优先权寄存器的设置进行仲裁。 源登记寄存器源登记寄存器n源登记寄存器SRCPND由32位组成,其中每1位与1个中断源相对应。如果对应的中断源产生了中断请求,这1位被自动设置为1,并且等待中断请求被服务。源登记寄存器指示哪一个中断源正在等待中断请求被服务。SRCPND寄存器中的每1位,自动地由中断源设置,而不考虑在中断屏蔽寄存器INTMSK中的屏蔽位。另外,SRCPND寄存器不受中断控制器优先权逻辑的影响。n对每一个中断源,有一个对应的中断服务程序。中断服务程序应该将SRCPND寄存器中与这个中断源相对应的那1位清除为0,表示这一次中断请求,已经由中断服务程序处理过了。将SRCPND寄存器的对应位清除为0,使得从相同

温馨提示

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

最新文档

评论

0/150

提交评论