PXA3xx_MFP_CFG(desc, pin, af, drv, rdh, lpm, edge)
宏定义中
rdh
参数是用来设置进入或退出
low power
时
GPIO
的电平由什么决定,为
0
时进入
low power
时由
lpm
决定,离开时恢复原值,为
1
时
GPIO
的值由
ASCR[RDH]
决定,一般该参数设置为
0
;
lpm
参数的作用是当系统由工作模式进入省电模式后,该
GPIO
的状态,是输出
0
或
1
,还是输入
pull high
或
pull low
。
Pull hight
或者
pull low
只有在
input pin
时才有效。
下
/
上拉电阻的主要目的就是
防止
Pin
悬空,
悬空的
Pin
可以看作一个天线,它容易受外界干扰,造成
Pin
值的不确实性。下
/
上拉电阻能够给
Input Pin
一个默认的输入值,下拉电阻接地,默认输入低电平,上拉电阻接电源,默认输入高电平。
当真正有外接输入时,它们自动无效,同时避免短路,起到限流作用。
#define MFP_LPM_DRIVE_LOW
进入省电模式后
GPIO
口输出
0
;
#define MFP_LPM_DRIVE_HIGH
进入省电模式后
GPIO
口输出
1
;
#define MFP_LPM_PULL_HIGH
进入省电模式后
GPIO
口输入
pull hight
;
#define MFP_LPM_PULL_LOW
进入省电模式后
GPIO
口输入
pull low
;
#define MFP_LPM_FLOAT
进入省电模式后
GPIO
口输入具体的电压值;
#define MFP_LPM_PULL_NEITHER
进入省电模式后不做任何操作。
下面举两个例子来说明:
CHG_CHGING
是
input pin
,所以
lpm
参数应设置为
MFP_LPM_PULL_HIGH
;
由于
SYS_EN
是
output pin
,所以
lpm
参数应根据
datasheet
说明来设置为
MFP_LPM_DRIVE_LOW
或
MFP_LPM_DRIVE_HIGH
或
MFP_LPM_PULL_NEITHER
;
若
SYS_EN
是
input pin
,则
lpm
参数应设置为
MFP_LPM_PULL_LOW
。
详情可参考
PXA3xx_DM_Vol_I.pdf
中的
4.10
;
以及
http://blog.csdn.net/absurd/archive/2007/07/09/1683936.aspx
1.纠正一个错误,关于上次说的在sleep的时候的上拉下拉电阻,其实pullup_en,pulldown_en参数是启用
cpu内部的该GPIO口上的上拉或下拉电阻
,所以如果外部电路中已经有上拉或下拉电阻了,我们就没必要再启用cpu内部的上拉或下拉电阻了。
2.在suspend的时候用pxa3xx_gpio_set_direction函数来更改pin的方向看起来是不行的,
因为MFPR寄存器中有一个单独的位sleep_oe_n,专门用来设置在S2状态下pin的方向,所以要更改S2状态下pin的方向,必须设置这个bit,
这个是在GPIO初始化的时候用PXA3xx_MFP_CFG宏来设置。
具体请参考PXA3xx_DM_Vol_I.pdf中的4.10。