6h!q6[*B-}(z4]5BPXA27x提供121个GPIO口。每个GPIO口都可编程为输出、输入或特定用途的双向口。作为input使用时,GPIO口可作为中断源。复位时所有GPIO口缺省配置为输入口。为使功耗最小,应将所有不用的GPIO配置为output。&t8a+j!u#`'o/E2a0[
TechWeb-技术社区;b!~-e9o/N*V/U6z0a
GPIO<120:0>,其中GPIO<120:119>只有PXA271、PXA272、PXA273支持。
'@4v%g K(x"J5qtech.techweb.com.cntech.techweb.com.cn;D1f$`!f*A4[7r/q9Q&w9g3e L
一部分GPIO口具有唤醒功能,可以将处理器从睡眠和深度睡眠模式唤醒。PXA27x被唤醒或复位时(硬件复位、上电复位、GPIO复位、watch dog复位、睡眠或深度睡眠),GPIO输入通道(input path)是关闭的,直到读禁止信号(PSSR[RDH],read disable hold)位被清零。PSSR[RDH]位应在用户完成对GPIO的配置和初始化后清零,否则出现未知结果。TechWeb-技术社区4j:U/j"W3K!T'C-~
-[0G3{ m5a4R.g(};w,f+v w:^*B
大部分外围引脚兼作GPIO用。以下是GPIO的一些共性:程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛:U1m$Y"c:`.h
Ø7A,I5m4f6a%}#e
用作input,GPIO可被采样,也可以编程为上升或下降沿触发的中断源;+u2i'[/j!R4x n'}
Ø
!r+}8w!l*R-`"V2Y程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛用作output,GPIO可以被独个清零或置位;#u.H*f+E(_.i"o
Ø
1r j%|0`;M"M程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛每个GPIO都可编程为其他用途(alternate functions)。TechWeb-技术社区-r:G(F v2Y.i4k
0A+t;Z;A9I5X*G4Z(?+l一、用作专用GPIO(Application-Specific GPIO)+O3V(Z']3Z
#Z$w"b.T5g9G7N
使用GPIO Pin Direction寄存器GPDR0/1/2/3设置GPIO口为input/output。
@ Z7M9T!w.\6g7x*x:?:T%i$k2P3y
对于配置为output的GPIO口,写相应的GPIO Pin Output Set寄存器GPSR0/1/2/3可以设置引脚为高电平;写GPIO Pin Output Clear寄存器GPCR0/1/2/3将引脚置低。(配置为input的GPIO口也可以对其GPSRx和GPCRx进行写操作,不过写入的状态要等到其配置为output口后才有效。)
0E)I8{)L6S
)F7s'y8X7Y(W!D.h2P _4I-j读GPIO Pin Level寄存器GPLR0/1/2/3可返回GPIO口的状态(包括设置为output的口)。tech.techweb.com.cn)d!X l&r!R T#P4l,A
TechWeb-技术社区%z%z0N/|6I9D-S9w&O2K
若要检测GPIO口的上升沿或下降沿,可使用GPIO Rising-Egde Detect Enable寄存器GRER0/1/2/3和GPIO Falling-Edge Detect Enable寄存器GFER0/1/2/3。还可使用GPIO Edge Detect Status寄存器GEDR0/1/2/3来读取边沿检测状态。.W z;a6_;^1y3p/A!J1@
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛9W1l*u,e9U5I }
唤醒功能:GPIO<116>, GPIO<113>, GPIO<102:93>, GPIO<91:90>, GPIO<83>, GPIO<53>,GPIO<40:34>, GPIO<31>, GPIO<17:9>, GPIO<4:3>, and GPIO<1:0>可将处理器从睡眠和standby模式唤醒;特别的,GPIO<3> 和GPIO<1:0>还可将处理器从深度睡眠模式唤醒。
二、用于其他用途(Alternate Fuction)
"a'T*X-J'^:]7g3f
片上串行控制器和LCD控制器等往往需要额外的引脚,这时就需要占用GPIO口用于这些用途(事实上,PXA27x很多片上控制器如LCD、AC97、I2C、RTC和中断控制器等都需要占用GPIO口,具体可见Manual P45页PXA27x处理器模块框图)。不过,还必须通过GPDR来正确设置GPIO口的方向(GPDR在定义GPIO的alternate function时,既起到功能选择作用,又起到引脚的信号传递方向的控制作用,不过对于特殊功能的双向GPIO除外,见后文说明)。
(f"`%m3]5A/x y4T7|3o-q,E+UTechWeb-技术社区可这样使用的GPIO最多可有三种输入功能和三种输出功能供选择配置。一旦一个GPIO口用于alternate function,就不能同时作为普通的GPIO口使用了。要使用某一功能的GPIO信号,首先要将GPIO口配置为相应的功能,然后使能相应的处理单元如LCD控制器。同样,要先禁止相应处理单元,再改变GPIO的控制寄存器。
&k&a%F'M;b0l详细列表和说明可见PXA27x Processor Family Developer’s Manual。
.k%a2O,f2E9]8]#l(y:t4B8U)R6C
注意表中有一类特殊功能的双向GPIO,其用阴影标识,这种GPIO口的信号传输方向不是由GPIO方向寄存器来决定的,而是取决于相应的处理单元控制器的配置。亦即:此时GPIO方向寄存器仅仅起到选择是alternate function(In)还是(Out)列表中的功能的作用,而对alternate function的引脚数据传输方向没有影响。因此,在配置这类GPIO的alternate function时,首先要配置GAFR和GPDR,以确定使用的是in还是out中的哪一种确切的特定功能(即作何引脚使用),然后还要配置相应的处理单元控制器来设置该GPIO的信号传输方向。可以参见该Manual的举例说明以及General-Purpose I/O Block Diagram。
7n#|9i(Z'T&T(J$|!}3O8C2x
#~6q%}$`$o,R+M$?5y*pTechWeb-技术社区另外,从表中注解5可以看到,一部分GPIO是保留用作特定用途的,如GPIO<8:5>被保留用于PWR_CAP<0>,这类GPIO虽然在硬件上是GPIO的结构,并且占据GPIO的地址空间,不过已经被PXA27X配置为特殊用途,因此用户已经无法像使用其他GPIO口一样使用它们了,因此不是真正意义上的可用的GPIO口;相应的,其对应的控制寄存器的位也是保留的。
$B%}9X)N*S:\tech.techweb.com.cnGPDR方向位的例外情况:GPIO<29>和GPIO<87>。
#}8I8i!e*`!S'K对alternate function的GPIO口的编程设置实例见Manual。
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛9S:K)k6C&V2Y3T"S,R
GPIO控制模块共有36个32-bit寄存器,寄存器的每一位对应一个GPIO,这样每种控制功能需要4个32位寄存器;因而36个寄存器分为9套,每套由标号x=0-3区分。
)l3e%|"d(x"l程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛标号x为0的配置GPIO<31:0>,1的配置GPIO<63:32>,2的配置GPIO<95:64>,3的配置GPIO<120:96>。
Ø
%V$\&i&Q4E9VGPLRx,监控引脚状态(GPIO Pin Level Register)。为只读寄存器,返回相应GPIO口的当前电平(高或低)。不管GPIO是作input还是output测试结果都有效。
Ø0K:{%i9e:M3U$|
GPSRx,GPCRx,控制输出引脚状态(GPIO Pin-Output Set/Clear Register)。GPIO配置为input时无效;GPIO作output时,对GPSR/GPCR写1有效,将引脚置高/低,写0无效。
Ø6]2h u4~(J:o,U6X
GPDRx,控制引脚方向(GPIO Pin Drection Regisger),0为input,1为output。
Ø*r"i8I#{0X+E(O3@ A2z5f!O.`
GRERx,GFERx,使能检测上升沿或下降沿(GPIO Rising/Falling Edge Detection Enable Register)。写1使能相应GPIO的边沿检测功能;写0禁止边沿检测功能。如果检测到匹配的边沿跳变,就把相应GPIO的GEDR寄存器位置1,这个状态位可以被中断控制器用来触发中断,包括从睡眠/深度睡眠模式唤醒PXA27x处理器。可以把同一GPIO的GRER和GFER位都置1,这样,这个GPIO可以同时检测两种边沿,只要引脚上发生跳变,就将GEDR相应位置1。
Ø
:}'F*^6v5k!o#J*Q(\GEDRx,指示检测到的边沿类型(GPIO Edge Dectect Status Register)。是一个状态寄存器,可以对其读或写操作。读操作读取是否检测到边沿;写操作用于清除被置1的状态位(写1清0,写0无效)。
Ø
#k4N3X.j/L3h.RGAFR_Lx,GAFR_Ux,决定引脚是用作普通GPIO还是其他用途。说明如下:
0b00用作普通GPIO;
0b01用作alternate input/output function1,到底是input还是output取决于GPDR设置;
0b10用作alternate input/output function2;
0b11用作alternate input/output function3。
复位时,GAFR清零。
注意其中有一类alternate function是special bidirectional GPIO(双向GPIO),其方向是由相应的外围控制器直接控制的,这会覆盖GPDR的设置。
具体的功能配置表见Manual P1001。
8_+E-G#}"e3|
8z'^'A+d.`5R
GPIO控制器的寄存器地址列表可以见Manual中P1029或P1181页。