OMAP3530 指定引脚GPIO功能实现(大家一起学习交流)

来源:互联网 发布:全球根域名服务器 编辑:程序博客网 时间:2024/05/01 05:45

OMAP3530 指定引脚GPIO功能实现

1. 实验平台介绍

移植平台:ICETEK-OMAP3530-MINI ICETEK不提供WINCE支持,建议不使用其开发板而使用DEVKIT8000或者TI_EVM

BSP包来源:TI官方申请(http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bsp/latest/index_FDS.html

意义:可以根据OMAP3530外设功能的不同,使用不同的引脚。(或者可以根据产品的使用需求配置引脚的功能),本实验将设置MMC2_DAT1GPIO_133)为GPIO功能。

2. 实验过程

2.1             WINCE平台移植(WINCE平台的移植可以参考移植WINCEOMAP平台文档)

2.2             仔细阅读OMAP(Technical ReferenceManual.pdf)文档中的第7(System Control Module) 24章(General-purpose Interface

System Control Module章节介绍了引脚功能复用的配置,即引脚利用功能的选择(模式的设置)。

General-purpose Interface 章节介绍了GPIO引脚功能的使用。

2.3             实现过程思路分析

1.       修改XLDR关于PIN模式配置(BOOTLOADER  /PLATFORM/TI_EVM_3530/SRC/BOOT/XLDR/platform.c中修改)实现MMC2_DAT1引脚GPIO功能。

2.       修改NK.BINPIN模式配置(PLATFORM/TI_EVM_3530/SRC/OAL/OALLIB/oem_pinmux.c中修改)实现MMC2_DAT1引脚GPIOS功能。

2.4             通过XDLR程序设置引脚模式

XDLR的作用是上电之后,搬运EBOOT的可执行代码到RAM中进行运行。是启动OMAP之后运行的第一段程序。

1.     修改XDLR文件

Platform.c 文件的函数:PinMuxSetup()专门用于引脚利用功能的设置,引脚的复用功能在此设置之后,就不需要在别的地方进行设置(在NK.BIN中进行设置)。

找到OUTREG16(&pConfig->CONTROL_PADCONF_MMC2_DAT1,(INPUT_ENABLE | PULL_UP | MUX_MODE_0)); 修改为OUTREG16(&pConfig->CONTROL_PADCONF_MMC2_DAT1, (INPUT_ENABLE |PULL_INACTIVE | MUX_MODE_4));即在启动之后可将MMC2_DAT1引脚设置成GPIO功能。INPUT_ENABLE标志位的设置主要是使能读取引脚状态,不然在GPIOGPIO_DATAIN寄存器读取的引脚状态始终为0

2.     编译XDLR程序

XDLR只在RELEASE的配置环境下才能够生成可执行文件。(编译配置文件sources跳过了对DEBUG配置的编译,因为XDLR的大小有要求, DEBUG编译文件过大)。

RELEASE配置环境下SYSGEN编译XDLR文件。

3.     编译问题解决

XDLR程序RELEASE配置会编译成MLO文件。如果发现生成的MLO文件只有1KB的话,说明生成MLO文件生成出错(具体可能是因为工程不在WINCE的安装目录之下,因为工程在WINCE安装目录之下生成的MLO文件有49KB【正确】)。

 

针对MLO文件只有1KB的解决方法(手动生成SD卡启动的MLO文件):

a)       在生成的文件中查的XLDRSD.bin文件,拷贝到C盘根目录下。再把PLATFORM/TI_EVM_3530/SRC/BOOT/XLDR/SDMEMORY/xldrtocsd.raw文件拷贝到C盘根目录下。

b)       切换到CMD命令窗口,执行命令:cvrtbin-r -a 0x40200000 -l 0x0000C000 -w 32 XLDRSD.bin cvrbin命令位于WINCE安装目录的子文件下,需要把该目录设置成环境变量) 命令过程的参数参考/PLATFORM/TI_EVM_3530/SRC/BOOT/XLDR/SDMEMORY/xldrsd.bib文件,文件长度需要对齐

c)       执行上述命令之后,生成XLDRSD.nb0文件。继续在CMD窗口执行命令:copy /bxldrtocsd.raw+ XLDRSD.nb0 MLO。即生成MLO文件。

4.     验证引脚复用功能修改结果(修改EBOOT代码验证)

PLATFORM/TI_EVM_3530/SRC/BOOT/EBOOT/main.c文件第233OALTritonRead(hTwl,TWL_IDCODE_31_24, &version);语句之后添加CpuGpioOutput(133, 1);语句把MMC2_DAT1引脚电平拉高,也可以拉低验证。(验证正确)

5.     注意事项

(参考)

2.5             通过修改WINCE系统(NK.BIN)的文件设置引脚模式

修改NK.BIN的生成文件配置引脚复用模式好处是:可以有统一的启动代码并且不担心在启动过程中对引脚复用功能的再度修改。

1.     修改引脚复用功能代码的添加

MMC2_DAT1引脚复用功能代码的添加可以在多个地方执行。

a)       PLATFORM/TI_EVM_3530/SRC/OAL/OALLIB/oem_pinmux.c文件中添加设置引脚复用功能的代码(该文件定义了OMAP所有引脚的模式设置)。OALMux_InitMuxTable()函数初始化引脚功能利用列表,将在系统启动过程中被调用。可以在该函数中添加代码设置MMC2_DAT1引脚的GPIO功能。添加设置MMC2_DAT1引脚模式的代码后,需要保持_rgDeviceMux[OMAP_DEVICE_MMC2] = DEVICESTATE_MUX_NAME(OMAP_DEVICE_MMC2)代码段的屏蔽(参考注意事项)。

b)       OALMux_InitMuxTable()函数是在OALPowerInit()函数中被调用(PLATFORM/TI_EVM_3530/SRC/OAL/OALLIB/oem_pm.c文件中)。可以在OALMux_InitMuxTable函数调用之后添加代码:

    uVal= (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_4);

    OALMSG(1,(L"Write the mmc2 gpio value %d/r/n", uVal));

OUTREG16(&g_pSyscPadConfsRegs->CONTROL_PADCONF_MMC2_DAT1,(uVal));

    OALMSG(1,(L"Write the mmc2 gpio value done/r/n"));

    uVal =INREG16(&g_pSyscPadConfsRegs->CONTROL_PADCONF_MMC2_DAT1);

    OALMSG(1,(L"Read the mmc2 gpio value %d/r/n", uVal));

注意一定需要“& (参考注意事项)

2.      引脚功能修改验证

编写应用程序,验证GPIO_133(MMC2_DAT1引脚是否可以通过软件设置成高电平和/或低电平)。(参考附加的应用程序)

 

2.6             注意事项

1.     屏蔽该指定引脚的其它驱动

虽然说单个引脚保持指定功能是最好的,但是引脚复用可以在不同的时间让不同的引脚具有指定的功能,所以该注意事项理由很牵强(个人认为,但是还是把它写上)。需要不同的意见

2.     保持屏蔽OALMux_InitMuxTable()函数中的_rgDeviceMux[OMAP_DEVICE_MMC2] =DEVICESTATE_MUX_NAME(OMAP_DEVICE_MMC2);代码的屏蔽。

如果不进行代码的屏蔽,应用程序修改不了GPIO_133MMC2_DTA1)引脚的电平。因为在OEM_PM.C文件的ForceIdleMMC()  函数中需要需要将所有的MMC都设置成IDLE状态后,内核才能进入(重入)状态。所以如果不屏蔽该代码,将对MMC2进行设置使MMC2引脚都进入IDLE状态则GPIO功能不能使用。(并不是其它的引脚需要屏蔽,只是MMC2_DTA1引脚特殊原因,但是也提醒我们引脚功能可以被其它的代码修改,需要注意)

 

3.      仔细理解代码结构及层次是最重要的

 

2.7             参考文献

1.     EVM3530 BSP User Guide.pdf (很重要)

2.     http://elinux.org/DevKit8000_FAQ#.E5.85.B3.E9.97.AD.E8.A7.A6.E6.91.B8.E5.B1.8F.E6.A0.A1.E5.87.86(有很多问题都提供了解决方案)

3.     http://code.google.com/p/omapminiboard/WINCE支持不是很好)

4.     http://processors.wiki.ti.com/index.php?title=Category:OMAP35xOMAP维基百科)

5.     http://code.google.com/p/beagleboard/(beagleboard 开发板GOOGLEPROJECT )

6.     http://beagleboard.org/ beagleboard 开发板 官方)

7.     http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bsp/latest/index_FDS.html  (TI bsp申请地址)