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

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_DAT1 GPIO_133 )为 GPIO 功能。

2. 实验过程

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

2.2              仔细阅读 OMAP(Technical Reference Manual.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.BIN PIN 模式配置( 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 标志位的设置主要是使能读取引脚状态,不然在 GPIO GPIO_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 /b xldrtocsd.raw+ XLDRSD.nb0 MLO 。即生成 MLO 文件。

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

PLATFORM/TI_EVM_3530/SRC/BOOT/EBOOT/ main.c 文件第 233 OALTritonRead(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_133 MMC2_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:OMAP35x OMAP 维基百科)

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

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 申请地址 )

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值