您的位置:首页 > 其它

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

2011-12-06 14:38 232 查看

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

#defineBSP_PWRBTN_IOMUX_PINDDK_IOMUX_PIN_EIM_A27
#defineBSP_PWRBTN_IOMUX_PADDDK_IOMUX_PAD_EIM_A27
#defineBSP_PWRBTN_GPIO_PORTDDK_GPIO_PORT2
#defineBSP_PWRBTN_GPIO_PIN21
#defineBSP_PWRBTN_GPIO_IRQIRQ_GPIO2_PIN21


//ConfigureGPIOsignalforpowerbuttonevents
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键是用的CPUIO口为GPIO2[21]..

以上几个函数的原型为:

//Function:DDKIomuxSetPinMux
//
//SetstheIOMUXconfigurationforthespecifiedIOMUXpin.
//
//Parameters:
//pin
//[in]FunctionalpinnameusedtoselecttheIOMUXoutput/input
//paththatwillbeconfigured.
//
//muxmode
//[in]MUX_MODEconfiguration.
//
//sion
//[in]SIONconfiguration.
//
//Returns:
//ReturnsTRUEifsuccessful,otherwisereturnsFALSE.
//
//-----------------------------------------------------------------------------
BOOLDDKIomuxSetPinMux(DDK_IOMUX_PINpin,DDK_IOMUX_PIN_MUXMODEmuxmode,
DDK_IOMUX_PIN_SIONsion)
{
//Noneedtouseinterlockedaccesssinceeachpadhasaseparateregister
OUTREG32(&g_pIOMUX->SW_MUX_CTL[pin],(muxmode|sion));
returnTRUE;
}








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
//
//SetstheIOMUXpadconfigurationforthespecifiedIOMUXpad.
//
//Parameters:
//pad
//[in]Functionalpadnameusedtoselectthepadthatwillbe
//configured.
//
//slew
//[in]Slewrateconfiguration.
//
//drive
//[in]Drivestrengthconfiguration.
//
//openDrain
//[in]Opendrainconfiguration.
//
//pull
//[in]Pull-up/pull-down/keeperconfiguration.
//
//hysteresis
//[in]Hysteresisconfiguration.
//
//inputMode
//[in]Inputmode(CMOS/DDR)configuration.
//
//outputVolt
//[in]Outputvoltageconfiguration.
//
//Returns:
//ReturnsTRUEifsuccessful,otherwisereturnsFALSE.
//
//-----------------------------------------------------------------------------
BOOLDDKIomuxSetPadConfig(DDK_IOMUX_PADpad,DDK_IOMUX_PAD_SLEWslew,
DDK_IOMUX_PAD_DRIVEdrive,DDK_IOMUX_PAD_OPENDRAINopenDrain,
DDK_IOMUX_PAD_PULLpull,DDK_IOMUX_PAD_HYSTERESIShysteresis,
DDK_IOMUX_PAD_INMODEinputMode,DDK_IOMUX_PAD_OUTVOLT_HLVOLToutputVolt)
{
//Noneedtouseinterlockedaccesssinceeachpadhasaseparateregister
OUTREG32(&g_pIOMUX->SW_PAD_CTL[pad],(slew|drive|openDrain|pull|hysteresis|
inputMode|outputVolt));
returnTRUE;
}


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进行操作了。

以下是常用的操作函数:

BOOLDDKGpioSetConfig(DDK_GPIO_PORTport,UINT32pin,DDK_GPIO_DIRdir,DDK_GPIO_INTRintr);
BOOLDDKGpioWriteData(DDK_GPIO_PORTport,UINT32portMask,UINT32data);
BOOLDDKGpioWriteDataPin(DDK_GPIO_PORTport,UINT32pin,UINT32data);
BOOLDDKGpioReadData(DDK_GPIO_PORTport,UINT32portMask,UINT32*pData);
BOOLDDKGpioReadDataPin(DDK_GPIO_PORTport,UINT32pin,UINT32*pData);
BOOLDDKGpioReadIntr(DDK_GPIO_PORTport,UINT32portMask,UINT32*pStatus);
BOOLDDKGpioReadIntrPin(DDK_GPIO_PORTport,UINT32pin,UINT32*pStatus);
BOOLDDKGpioClearIntrPin(DDK_GPIO_PORTport,UINT32pin);




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: