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);
相关文章推荐
- 【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet的使用
- 一步一个脚印学算法——冒泡排序
- 基于OpenDaylight的二次开发一步一个脚印(一)GIT源代码
- 比赛和学习需要,开始网联网方向,很多都不懂,希望自己一步一个脚印,坚持不懈的走下去
- 二十岁了 一步一个脚印走
- 一步一个脚印学习WCF系列之WCF契约设计—1-服务契约ServiceContractAttribute
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(十三)关于ListView的优化总结
- 一步一个脚印学习WCF系列之WCF基础术语—绑定(Binding)(五)
- 小白一步一个脚印,手把手,教你安装使用gsoap
- 【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(1)服务器环境搭建
- 一步一个脚印学习WCF之一WCF概要(中)之客户端与服务
- Kotlin一步一个脚印学习基础二
- [随笔] 整理行装,一步一个脚印~
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(十二)实现自定义左右滚动的信息块-仿蘑菇街
- 一步一个脚印记录自己的编程经历
- 只有自己一步一个脚印的向上攀登,才能到达成功的彼岸。
- 一步一个脚印
- 一步一个脚印-产品升级随笔(3)-学会拍板
- 一步一个脚印学习WCF之一WCF出现的目的
- 一步一个脚印学习WCF之一WCF概要(中)之客户端与服务-WCF服务的创建与调用Demo