第五章 GPIO端口及中断控制器——ARM

一、第一部分:GPIO端口有关

1.S3C2410 GPIO端口及其他寄存器概述、引脚信号
(1)GPIO端口及其他寄存器概述

GPIO端口概述

S3C2410 有117 个多功能的输入输出引脚,这些端口是:

端口A(GPA):23 个输出口
端口B(GPB):11 个输入输出口
端口C(GPC):16 个输入输出口
端口D(GPD):16 个输入输出口
端口E(GPE):16 个输入输出口
端口F(GPF):8 个输入输出口
端口G(GPG):16 个输入输出口
端口H(GPH):11 个输入输出口

其他寄存器概述

特殊功能寄存器中的一些寄存器,这些寄存器控制某些时钟信号、外部中断请求信号的方式、外部中断屏蔽与否等。
包括杂项控制寄存器MISCCR、DCLK控制寄存器DCLKCON、外部中断控制寄存器EXTINT0 ~ EXTINT2、外部中断滤波器EINTFLT2和EINTFLT3、外部中断屏蔽器EINTMASK、外部中断登记寄存器EINTPEND和通用状态寄存器GSTATUS0~GSTATUS4等

(2)与GPIO端口及其他寄存器相关的S3C2410引脚信号

与GPIO端口相关的S3C2410引脚信号

端口A ~ 端口H的数据寄存器GPADAT~GPHDAT,与S3C2410A的117个引脚有关。

与其他寄存器相关的S3C2410A引脚信号

  • 杂项控制器
    • SCKE、SCLK1和SCLK0引脚信号,是S3C2410A输出信号,在Power_OFF模式用于保护SDRAM。
    • nRSTOUT为外部设备Reset引脚信号,是S3C2410A输出信号,由nRESET&nWDTST(看门狗Reset)&SW_RESET(软件Reset)形成,在寄存器MISCCR中可以设置软件Reset。
    • CLKOUT1、CLKOUT0引脚信号,是S3C2410A输出信号,信号源可由寄存器MISCCR控制,分别从6个时钟信号中选择一个作为输出。
    • 引脚DATA[15:0]、DATA[31:16],由寄存器MISCCR规定了允许/禁止使用上拉电阻。
  • DCLK控制寄存器DCLKCON
    只有在杂项控制器MISCCR中,CLKSEL1、CLKSEL0域选择了CLKOUT1、CLKOUT0输出引脚使用DCLK1、DCLK0作为信号源时,DCLKCON中的参数才起作用。
    这些参数设置DCLKn信号高、低电平的时间长度、DCLKn的分频值等内容。
  • 外部中断控制寄存器EXTINT0~EXTINT2
    EINT0~ EINT23是S3C2410A外部中断请求信号输入引脚,在外部中断控制器EXTINT0~EXTINT2中,可以设置请求信号方式(低电平、高电平、下降沿、上升沿、2个沿)。
  • 外部中断滤波器EINTFLT2和EINTFLT3
    EINTFLT2和EINTFLT3规定了S3C2410A外部中断请求输入引脚EINT16~EINT23,所使用的滤波宽度和可选择的滤波器时钟。
    • 外部中断屏蔽器EINTMASK
      对S3C2410A外部中断请求引脚EINT23~EINT4,规定了哪一个被屏蔽或允许中断。
    • 外部中断登记寄存器EINTPEND
      对S3C2410A外部中断请求引脚EINT23~EINT4请求信号进行登记,1为有请求。
    • 通用状态寄存器GSTATUS0~GSTATUS4
      • nWAIT,存储器要求等待(扩展当前总线周期)信号,输入。
      • NCON,Nand Flash配置状态,输入。
      • RnB,Nand Flash Ready/Busy输入信号。
      • nBATT_FLT,电池状态引脚输入信号。
2.S3C2410A GPIO端口控制

端口引脚配置寄存器GPACON~GPJOCN

用于确定每个引脚的功能。
如果GPF0GPF7和GPG0GPG7在Power_OFF模式用作唤醒信号,那么这些端口应该配置成中断模式。

端口数据寄存器GPADAT~GPJDAT

如果端口被配置为输出端口,数据应该写到这个端口寄存器的对应位;
如果端口被配置为输入端口,数据应该从端口数据寄存器的对应位读出。

端口上拉(电阻)允许/禁止寄存器GPBUP~GPJUP

端口上拉(电阻)允许/禁止寄存器控制每个端口上拉电阻允许/禁止。
当对应位为0时,引脚的上拉电阻被允许;对应位为1时,上拉电阻被禁止。

杂项控制器

对数据总线端口DATA[31:16]、DATA[15:0]上拉电阻、USB pad和CLKOUT等进行选择。

外部中断控制器寄存器EXTINTn和外部中断滤波器寄存器EINTFLTn

S3C2410A的24个外部中断可以由各种信号方式提出请求。
由外部中断控制器寄存器EXTINTn配置的外部中断请求信号方式有低电平触发、高电平触发、下降沿触发、上升沿触发以及2个沿都触发。
EINT23~EINT16 8个外部中断引脚有数字滤波。
只有16个EINT引脚EINT[15:0]在Power_OFF模式可用作唤醒源。

Power_OFF模式与I/O端口

在Power_OFF模式,所有GPIO寄存器值被保留。
外部中断屏蔽寄存器EINTMASK不能阻止从Power_OFF模式中唤醒。
如果EINTMASK正屏蔽着EINT[15:4]中的一个,虽然唤醒能够被操作,但源登记寄存器SRCPND中的EINT4_7和EINT8_23位,在刚刚唤醒后不设置为1。

3.S3C2410A GPIO端口特殊功能寄存器

见参考资料:S3C2410中文手册第9章-IO端口。( S3C2410中文手册第9章-IO端口.pdf )

二、第二部分:中断控制器有关

4.S3C2410A 与中断有关的寄存器、中断处理过程
(1)与中断有关的寄存器

在这里插入图片描述

EINT23-EINT0部分

除了EINTPEND外,其余8个寄存器,都可以由软件进行设置:

  • GPFCON、GPGCON可以把对应引脚设置为中断请求功能引脚;
  • EXTINT2/1/0设置中断请求信号触发方式(低电平、高电平、下降沿、上升沿、2个沿),滤波器允许与否;
  • EINTFLT3、EINTFLT2设置对应引脚使用的滤波器时钟信号及滤波宽度。
  • EINTMASK中的20位,分别可以设置为允许中断/屏蔽中断,控制对EINTPEND中的EINT[23:4]的每1位是否屏蔽。

从S3C2440A/S3C2410A片外引脚来的EINT23-EINT0共24个中断请求信号,可以分为3组,具体内容如下:

  • EINT3、EINT2、EINT1、EINT0中断请求,直接送往源登记寄存器SRCPND的对应位。
  • EINT7、EINT6、EINT5、EINT4中断请求,分别送往外部中断登记寄存器EINTPEND[7:4]的对应位,如果外部中断屏蔽寄存器EINTMASK[7:4]对应位允许,EINTPEND7/6/5/4经过逻辑或,作为1个请求送往源登记寄存器SRCPND的EINT4_7位,占用1位。
  • EINT23–EINT8中断请求被分别送往EINTPEND[23:8]的对应位,如果EINTMASK[23:8]对应位允许,EINTPEND[23:8]经过逻辑或,作为1个请求送往源登记寄存器SRCPND的EINT8_23位,占用1位。

子源登记/子屏蔽寄存器部分

由于源登记寄存器SRCPND只有32位,每位对应1个中断源最多对应32个中断源。
S3C2410A有56个中断源,为此有两种处理方法:

  • 外部中断EINT4-EINT7、EINT8-EINT23在SRCPND中只占2位,即EINT4_7位、EINT8_23位。
  • 片内一部分中断源的中断请求不直接送往源登记寄存器SRCPND,而是先送往子源登记寄存器SUBSRCPND,然后将相关的几个子源作为1个源送往SRCPND。

中断子屏蔽寄存器INTSUBMSK只对子源登记寄存器SUBSRCPND中的中断请求设置为允许/屏蔽。

中断部分

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

ARM920T部分

ARM920T中CPSR的I、F位,分别表示允许/禁止IRQ、FIQ中断请求。
允许时,ARM920T自动将当前PC送LR、CPSR送SPSR、修改CPSR、从0x18(IRQ)或0x1C(FIQ)取下一条指令执行。

(2)中断处理过程

见参考资料:S3C2410中文手册第14章-中断控制器。( S3C2410中文手册第14章-中断控制器.pdf )
说明:

  • S3C2410A片内中断控制器,接收来自56个中断源的中断请求,它们由片外中断请求引脚和片内外设提供。
    一种中断请求源是带子寄存器的,如外部中断登记寄存器EINTPEND、子源登记寄存器SUBSRCPND,如果请求不被屏蔽,EINT4–EINT7,EINT8–EINT23,INT_ADC_S、INT_TC,INT_ERRn、INT_RXDn、INT_TXDn等,经过逻辑或,送到源登记寄存器SRCPND作为INT4_7,INT8_23,INT_ADC,INT_UARTn等。
    其他中断源的中断请求则直接送往SRCPND寄存器。
  • 控制器经过仲裁处理后,向ARM920T请求FIQ或IRQ中断。
  • 仲裁处理取决于硬件优先权逻辑,并将仲裁结果写入中断登记寄存器INTPND。
    使用软件查询INTPND,可以知道在多个中断请求源中,哪一个经过仲裁并送到了ARM920T。
  • FIQ模式(MODE)的中断请求,与屏蔽无关,直接送往ARM920T的FIQ端;IRQ模式的中断请求,如果不被屏蔽,经过仲裁,送往INTPND寄存器,同时送往ARM920T的IRQ端。
5.S3C2410A中断控制器操作、中断源及中断优先权
(1)中断控制器操作

当前程序状态寄存器CPSR中的F位和I位

如果ARM920T中的CPSR的F位被设置为1,CPU不接受来自中断控制器的快速中断请求FIQ。
同样,如果I位被设置为1,CPU不接受来自中断控制器的中断请求IRQ。
因此,通过清除CPSR的F位或I位为0,同时设置中断屏蔽寄存器INTMSK的对应位为0,送到中断控制器的中断请求才能被处理。

中断模式寄存器

ARM920T有2种类型的中断模式:FIQ或IRQ。所有的中断源在中断请求时,要确定该中断源被设置成哪一种模式。
中断模式寄存器INTMOD中的每1位,指示一个中断源被设置成了哪一种模式。所有中断源中,只有1个可以设置成FIQ模式。

中断登记寄存器

S3C2410A中有两个中断登记寄存器:一个是源登记寄存器SRCPND;另一个是中断登记寄存器INTPND。
这两个登记寄存器指示一个中断请求是或否被登记(记录):

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

中断屏蔽寄存器

中断屏蔽寄存器INTMSK中的某1位被设置为1,指示对应的中断已经被屏蔽(禁止)。
如果寄存器INTMSK中的某1位为0,这1位对应的中断源产生的中断请求,通常将被服务。
如果中断屏蔽寄存器INTMSK中的某1位为1(屏蔽),并且该位对应的中断源产生了中断请求,源登记寄存器SRCPND中对应的源登记位将被置1。

(2)中断源/(3)中断优先权产生模块

见参考资料:S3C2410中文手册第14章-中断控制器。( S3C2410中文手册第14章-中断控制器.pdf )

6.S3C2410A中断控制器特殊功能寄存器

见参考资料:S3C2410中文手册第14章-中断控制器。( S3C2410中文手册第14章-中断控制器.pdf )

参考资料下载链接:link.

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值