GPIO初始化

  • Post author:
  • Post category:其他




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











进入省电模式后不做任何操作。




下面举两个例子来说明:



GPIO初始化





CHG_CHGING





input pin


,所以


lpm


参数应设置为


MFP_LPM_PULL_HIGH






GPIO初始化





由于


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。