iMX51 一步一个脚印 --iMX51 WINCE6.0 GPIO设置

 

       iMX51的功能十分强大,对于从三星平台转移过来的人说那近4千多页的看着实在是头疼,看了看实在是没办法下手,按照常规的学习方法先从IO入手,看了近一周才看出了个眉目。参考上一篇文章这才对IO设置有了一个基本的认识。下边就以PWRBUTTON为例:

#define BSP_PWRBTN_IOMUX_PIN                    DDK_IOMUX_PIN_EIM_A27
#define BSP_PWRBTN_IOMUX_PAD                    DDK_IOMUX_PAD_EIM_A27
#define BSP_PWRBTN_GPIO_PORT                    DDK_GPIO_PORT2
#define BSP_PWRBTN_GPIO_PIN                     21
#define BSP_PWRBTN_GPIO_IRQ                     IRQ_GPIO2_PIN21

 

    // Configure GPIO signal for power button events
    DDKIomuxSetPinMux(BSP_PWRBTN_IOMUX_PIN, DDK_IOMUX_PIN_MUXMODE_ALT1, DDK_IOMUX_PIN_SION_REGULAR);
    DDKIomuxSetPadConfig(BSP_PWRBTN_IOMUX_PAD, DDK_IOMUX_PAD_SLEW_NULL, DDK_IOMUX_PAD_DRIVE_NULL, DDK_IOMUX_PAD_OPENDRAIN_NULL, DDK_IOMUX_PAD_PULL_NONE, DDK_IOMUX_PAD_HYSTERESIS_ENABLE, DDK_IOMUX_PAD_INMODE_NULL, DDK_IOMUX_PAD_OUTVOLT_NULL);
    DDKGpioSetConfig(BSP_PWRBTN_GPIO_PORT, BSP_PWRBTN_GPIO_PIN, DDK_GPIO_DIR_IN, DDK_GPIO_INTR_HIGH_LEV);
     DDKGpioClearIntrPin(BSP_PWRBTN_GPIO_PORT, BSP_PWRBTN_GPIO_PIN);

 

      板子上PWRBUTTON键是用的CPU IO口为GPIO2[21].  .   

  以上几个函数的原型为:

 

//  Function: DDKIomuxSetPinMux
//
//  Sets the IOMUX configuration for the specified IOMUX pin.
//
//  Parameters:
//      pin
//          [in] Functional pin name used to select the IOMUX output/input
//               path that will be configured.
//
//      muxmode
//          [in] MUX_MODE configuration.
//
//      sion
//          [in] SION configuration.
//
//  Returns:
//      Returns TRUE if successful, otherwise returns FALSE.
//
//-----------------------------------------------------------------------------
BOOL DDKIomuxSetPinMux(DDK_IOMUX_PIN pin, DDK_IOMUX_PIN_MUXMODE muxmode, 
    DDK_IOMUX_PIN_SION sion)
{
    // No need to use interlocked access since each pad has a separate register
    OUTREG32(&g_pIOMUX->SW_MUX_CTL[pin], (muxmode | sion));
    return TRUE;
}


 

 

 

 

DDKIomuxSetPinMux(BSP_PWRBTN_IOMUX_PIN, DDK_IOMUX_PIN_MUXMODE_ALT1, DDK_IOMUX_PIN_SION_REGULAR);

设置EIM_A27引脚做为GPIO使用GPIO2[21].  DDK_IOMUX_PIN_MUXMODE_ALT1对应的设置为GPIO2[21]. 

 

函数原型为:

//  Function: DDKIomuxSetPadConfig
//
//  Sets the IOMUX pad configuration for the specified IOMUX pad.
//
//  Parameters:
//      pad
//          [in] Functional pad name used to select the pad that will be 
//          configured.
//
//      slew
//          [in] Slew rate configuration.
//
//      drive
//          [in] Drive strength configuration.
//
//      openDrain
//          [in] Open drain configuration.
//
//      pull
//          [in] Pull-up/pull-down/keeper configuration.
//
//      hysteresis
//          [in] Hysteresis configuration.
//
//      inputMode
//          [in] Input mode (CMOS/DDR) configuration.
//
//      outputVolt
//          [in] Output voltage configuration.
//
//  Returns:
//      Returns TRUE if successful, otherwise returns FALSE.
//
//-----------------------------------------------------------------------------
BOOL DDKIomuxSetPadConfig(DDK_IOMUX_PAD pad, DDK_IOMUX_PAD_SLEW slew, 
    DDK_IOMUX_PAD_DRIVE drive, DDK_IOMUX_PAD_OPENDRAIN openDrain, 
    DDK_IOMUX_PAD_PULL pull, DDK_IOMUX_PAD_HYSTERESIS hysteresis, 
    DDK_IOMUX_PAD_INMODE inputMode, DDK_IOMUX_PAD_OUTVOLT_HLVOLT outputVolt)
{
    // No need to use interlocked access since each pad has a separate register
    OUTREG32(&g_pIOMUX->SW_PAD_CTL[pad], (slew | drive | openDrain | pull | hysteresis | 
                  inputMode | outputVolt));
    return TRUE;
}


DDKIomuxSetPadConfig(BSP_PWRBTN_IOMUX_PAD, DDK_IOMUX_PAD_SLEW_NULL, DDK_IOMUX_PAD_DRIVE_NULL, DDK_IOMUX_PAD_OPENDRAIN_NULL, DDK_IOMUX_PAD_PULL_NONE, DDK_IOMUX_PAD_HYSTERESIS_ENABLE, DDK_IOMUX_PAD_INMODE_NULL, DDK_IOMUX_PAD_OUTVOLT_NULL);


 设置PAD寄存器:HYS [8]: 1, PKE[7]:0

  通过这2个寄存器的配置,就可以对IO进行操作了。  

以下是常用的操作函数:

 

BOOL DDKGpioSetConfig(DDK_GPIO_PORT port, UINT32 pin, DDK_GPIO_DIR dir, DDK_GPIO_INTR intr);
BOOL DDKGpioWriteData(DDK_GPIO_PORT port, UINT32 portMask, UINT32 data);
BOOL DDKGpioWriteDataPin(DDK_GPIO_PORT port, UINT32 pin, UINT32 data);
BOOL DDKGpioReadData(DDK_GPIO_PORT port, UINT32 portMask, UINT32 *pData);
BOOL DDKGpioReadDataPin(DDK_GPIO_PORT port, UINT32 pin, UINT32 *pData);
BOOL DDKGpioReadIntr(DDK_GPIO_PORT port, UINT32 portMask, UINT32 *pStatus);
BOOL DDKGpioReadIntrPin(DDK_GPIO_PORT port, UINT32 pin, UINT32 *pStatus);
BOOL DDKGpioClearIntrPin(DDK_GPIO_PORT port, UINT32 pin);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值