文档库 最新最全的文档下载
当前位置:文档库 › 第1章、GPIO和中断控制器

第1章、GPIO和中断控制器

“黑色经典”系列之《Windows CE嵌入式开发入门--基于Xscale架构》华清远见培训教材

1.1 GPIO

PXA255处理器提供了81个GPIO引脚,同时提供了27个寄存器来控制这些引脚的工作方式和状态。这27个寄存器控制了引脚的输出/输入方向、引脚状态以及引脚的附加功能(关于引脚的附加功能将在后文讲解)。此外,这些GPIO中的一部分引脚还具有将处理器从睡眠中唤醒的功能。

对于不使用的GPIO引脚来说,如果将它们设置成输出状态,可以降低系统的电源消耗。

1.1.1 GPIO操作(GPIO operation)

当GPIO引脚被设置成输入状态时,可以作为中断输入引脚使用。在系统复位后,所有81个GPIO引脚都被设置成输入状态。

当GPIO引脚被设置成输出状态时,可以通过向引脚赋值来决定引脚电平的高低。向GPSR寄存器输出1代表高电平,向GPCR寄存器输出1代表低电平。

从GPIO引脚状态寄存器(GPLR)读取数据,可以获得当前引脚的状态。同时引脚还提

华清远见培训教材

>培训教材

华清远见培训教材

>培训教材

PXA255的

GPIO主要功能框架如图1-1所示。

图1-1 PXA255 GPIO功能框架

1.1.3 GPIO寄存器定义

有27个寄存器来控制GPIO引脚,这些引脚可以分为以下几类:

n3个引脚状态寄存器(GPLR);

n6个引脚输出状态寄存器(GPSR、GPCR);

n3个引脚方向寄存器(GPDR);

n6个选择上升沿或者下降沿被捕获的控制寄存器(GRER & GFER);n3个显示被选择边沿被触发的状态寄存器(GEDR);

n6个决定引脚是否为普通GPIO的寄存器。

表1-2 PXA255 GPIO寄存器定义

寄存器类型寄存器功能

GPIO

[15:0]

GPIO

[31:16]

GPIO

[47:32]

GPIO

[63:48]

GPIO

[79:64]

GPIO

[80]

GPLR 监视引脚状态GPLR0 GPLR1 GPLR2 GPSR 控制输出引脚GPSR0 GPSR1 GPSR2

华清远见培训教材

>培训教材

GPCR 状态 GPCR0 GPCR1 GPCR2 GPDR 设置引脚方向 GPDR0 GPDR1 GPDR2 GPER GRER0 GRER1 GRER2 GFER 边沿探测 GFER0 GFER1 GFER2 GEDR 边沿类型探测 GEDR0

GEDR1

GEDR2

GAFR

设置可选功能

GAFR0_L

GAFR0_U

GAFR1_L

GAFR1_U

GAFR2_L

GAFR2_U

1.GPIO Pin-Level 寄存器(GPLR0、GPLR1、GPLR2)

这些寄存器中包含了引脚电平的信息,其中每个位都代表了一个引脚的电平状态。GPLR0[31:0]寄存器对应GPIO[31:0]这32个引脚,同样GPLR1[31:0]对应GPIO

[63:32]、GPLR2[16:0]对应GPIO[80:64]。这些寄存器是只读的,并且不受数据传输方向的干扰。

GPLR0位定义如表1-3所示。

GPLR2位定义如表1-5所示。

表1-5 GPLR2位定义

位 号 名 称

描 述

<31:21>

被保留

<20:0> PL[x]

GPIO Pin Level ‘x ’(x = 64 to 80) 这32位代表引脚的电平状态 0–引脚为低电平 1–引脚为高电平

2.GPIO引脚方向寄存器(GPDR0、GPDR1、GPDR2)

GPDR0、GPDR1和GPDR2这3个寄存器控制了引脚的数据传送方向。如果相应的位被设置成1,则代表该引脚为输出引脚。GPDR2[31:17]是被保留的,必须写入0。在系统启动或者复位后,所有引脚都为输入方向,因此保留位不必修改。

3.GPIO Pin Output Set Registers (GPSR0、GPSR1、GPSR2)and Pin Output Clear Registers(GPCR0、GPCR1、GPCR2)

当一个GPIO引脚被设置成输出方向时,引脚的状态可以通过设置GPSR或者GPCR来更改。如果要输出高电平,则需要向GPSR中的特定位写入1,要清除时,则需要向GPCR 中的特定位写入1。GPSR和GPCR都是只写的寄存器。向这两种寄存器的任何位写入0都不会带来任何实际效果。

4.GPIO上升沿探测寄存器(GRER0、GRER1、GRER2)和下降沿探测寄存器(GFER0、GFER1、GFER2)

每一个GPIO都可以被设置来探测并且记录边沿的触发。如果探测到相应的边沿被触发,则相关的寄存器就会被置位。利用这个机制,可以来处理中断。

5.GPIO边沿探测状态寄存器(GEDR0、GEDR1、GEDR2)

GEDR0、GEDR1和GEDR2中一共有81位来对应81个引脚。当GFER或者GRER中设置的边沿被探测到之后,这个寄存器中的相应位就被置位。

当GEDR中的位被设置成1后,需要用户手动通过写状态寄存器来清除该位。GEDR被置1后,可以产生一个中断。在所有81个引脚中,任何一个引脚的边沿探测记录都将引起同一个中断。

6.GPIO附加功能寄存器(GAFR0_L、GAFR0_U、GAFR1_L、GAFR1_U、GAFR2_L、GAFR2_U)

GAFR0_L、GAFR0_U、GAFR1_L、GAFR1_U、GAFR2_L、GAFR2_U对应了81个GPIO 引脚。每个GPIO都可以被配置成通用GPIO引脚或者3个附加的输入功能或者3个附加的输出功能。当然,要使用附加的输入功能,引脚必须被配置成输入方向。

这些寄存器中,每两个位为一组,对应一个GPIO引脚:

n00代表通用GPIO功能;

n01代表附加输入功能(ALT_FN_1_IN)或者附加输出功能(ALT_FN_1_OUT);

n10代表附加输入功能(ALT_FN_2_IN)或者附加输出功能(ALT_FN_2_OUT);

n11代表附加输入功能(ALT_FN_3_IN)或者附加输出功能(ALT_FN_3_OUT)。

GAFR0_L的定义如图1-2与表1-6所示。

华清远见培训教材

图1-2 GAFR0_L

表1-6 GAFR0_L定义

位号名称描述

<31:0> AF[x] GPIO引脚可选功能选择位。每一对位都决定了一个GPIO引脚的类型:

00-对应的引脚为通用输入输出I/O

01-对应的引脚为可选功能1

10-对应的引脚为可选功能2

11-对应的引脚为可选功能3

图1-3 GAFR0_U

1.2 中断控制器

中断控制器控制了处理器上的所有外部中断,并且保存了一级中断源的信息。它记录了一个中断是属于IRQ还是FIQ。在PXA255中,除了FIQ以外的所有中断都处于同一中断级别。

1.2.1 中断控制器操作

PXA255的中断处理操作由两层结构组成。

>培训教材

第一级中断处理能定位中断设备,这些设备的中断必须已经被使能(Interrupt Controller Control Register ICCR)或者在中断掩码寄存器Interrupt Controller Mask Register(ICMR)中没有被屏蔽掉。第一级中断处理由以下寄存器控制。

n Interrupt Controller Pending寄存器(ICPR):记录系统中所有活动的中断。

n Interrupt Controller IRQ Pending寄存器(ICIP):记录系统活动的所有IRQ中断,而Interrupt Controller Level寄存器(ICLR)可以通过编程向ICIP产生中断,然后由ICIP

向系统产生一个IRQ。

n Interrupt Controller FIQ Pending寄存器(ICFP):记录系统活动的所有FIQ中断。

Interrupt Controller Level寄存器(ICLR)可以通过编程向ICFP发送中断,然后由

ICFP产生FIQ。

第二级中断处理使用产生中断源设备(产生一级中断的外围设备)中的中断寄存器。二级中断的处理信息将为中断处理状态提供额外的记录,并且在中断服务例程中将被使用到。总体来说,二级中断之间采用“或”的方式产生一级中断。通常产生中断的源设备可以避免通过读取两个寄存器的值就可以进行判断,即通过在IRQ的情况下可以读取ICIP寄存器、在FIQ的情况下可以读取ICFP寄存器来确定产生中断的源设备,然后再通过读取设备中的状态寄存器来确定具体调用哪个中断处理程序。处理器在空闲的状态下,当ICCR寄存器中的对应位为0时,ICMP中的掩码将被忽略,任何中断都能将处理器从空闲状态中唤醒。如果ICCR寄存器中的对应位为1,则视ICMP中的掩码来决定中断是否能被处理器处理。ICCR 复位值都为0。

PXA255的中断控制器结构如图1-4所示。

华清远见培训教材

图1-4 PXA255中断控制器结构

1.2.2 中断控制器寄存器定义

中断控制器包含以下寄存器:

n Interrupt Controller IRQ Pending寄存器(ICIP);

n Interrupt Controller FIQ Pending寄存器(ICFP);

n Interrupt Controller Pending寄存器(ICPR);

n Interrupt Controller Mask寄存器(ICMR);

n Interrupt Controller Level寄存器(ICLR);

n Interrupt Controller Control寄存器(ICCR)。

系统复位后,FIQ和IRQ中断默认关闭,并且所有中断控制器的寄存器都被清零。中断必须有软件控制才能使用。

1.Interrupt Controller Mask寄存器(ICMR)

ICMR寄存器有22个中断屏蔽位,屏蔽位决定pending interrupt bit是否能产生中断。当pending interrupt bit为1时,只有当ICMR的屏蔽位为1时,产生的中断才能被处理器处理。而在空闲状态下,ICMR的启用必须先将ICCR[DIM]设置为1,否则任何产生的中断都将被处理器处理。

ICMR在系统复位后被清零,这意味着所有的中断都被屏蔽,然后必须由软件来重新配置ICMR。

>培训教材

华清远见培训教材

ICMR 的定义如图1-5与表1-8所示。

图1-5 ICMR

表1-8 ICMR 定义

图1-6 ICLR

表1-9 ICLR 定义

位 号 名 称 描 述

<31:8> IL[x] 中断级别,x 为8~14或者17~31位 0-中断被传递到IRQ 中断输入 1-中断被传递到FIQ 中断输入 <7:0>

-

保留

3.Interrupt Controller Control寄存器(ICCR)

ICCR寄存器,各个位为Disable Idle Mask(DIM)标记,如图1-7所示,它决定了处理器在空闲状态下中断掩码是否有效。

ICCR的定义如图1-7与表1-10所示。

图1-7 ICCR

表1-10 ICCR定义

图1-8 ICIP

表1-11 ICIP定义

位号名称描述

<31:8> IP[x] IRQ挂起位,x为8~14或者17~31 0-没有IRQ被外部设备产生

1-IRQ由一个外部设备产生

<7:0> - 保留

CIFP的定义如图1-9与表1-12所示。

>培训教材

华清远见培训教材

图1-9 ICFP

表1-12 ICFP 定义

位 号 名 称 描 述

<31:8> FP[x] FRQ 挂起位,x 为8~14或者17~31 0-没有FRQ 被外部设备产生 1-FRQ 由

一个外部设备产生 <7:0>

-

保留

5.Interrupt Controller Pending 寄存器(ICPR )

ICPR 是一个32位只读寄存器,它显示了系统中活动的所有中断。这些位不会被ICMR 影响。

在图1-10中所示是ICPR 对应的二级中断的产生设备。ICPR 的定义如表1-13所示。

图1-10 ICPR

表1-13 ICPR 定义

位 号 名 称 描 述

<31>

IS31

RTC 警报匹配寄存器中断挂起

0-中断不会因为RTC 警报匹配寄存器而被挂起 1-中断会因为RTC 警报匹配寄存器而被挂起

<30> IS30

RTC Hz 时钟时间片寄存器中断挂起

0-中断不会因为RTC Hz 时钟时间片中断寄存器而被挂起 1-中断会因为RTC Hz 时钟时间片中断寄存器而被挂起 <29> IS29

OS 时钟匹配寄存器3中断挂起

0-中断不会因为OS 时钟匹配寄存器3而被挂起 1-中断会因为OS 时钟匹配寄存器3而被挂起

续表

>培训教材

续表

华清远见培训教材

相关文档