//========================================================================
//TITLE:
//    Sigmatel37xx GPIO的使用
//AUTHOR:
//    norains
//DATE:
//    Thursday 21-August-2008
//Environment:
//    NONE
//========================================================================
    在文章开篇之前,先小小抱怨一下。Sigmatel的硬件部分做得不错,这个是必须承认的;但WinCE的软件部分,却不能不让人抓狂。用一句

黑话来说,就是见过烂的,没有见过这么烂的:条理杂乱无章,结构模糊不清,更不用说那些莫名其妙的BUG了。以GPIO为例子,其实在

Sigmatel 37xx BSP包已经有驱动,但实际上只是一些代码而已,没有注册表,没有PB选项,换句话说,你根本无法通过简单的设置来使用GPIO

驱动。
   
    如果想控制GPIO,那么唯一的办法就是直接对寄存器进行读写。
   
    首先我们必须要做的就是,包含头文件:regspinctrl.h。不过这个可得小心了,因为这文件有两个,一个位于:/SRC/INC/37xxRegs,另

一个则是在/SRC/SOCFirmware/include/37xx/registers。并且这不同位置的文件的开头描述都是一样的,但实际上在宏定义方面区别还挺大,

从而导致包含不同的regspinctrl.h,程序代码就有不同的写法。弱弱地感叹一下,不能不拜服sigmatel的方式。
   
    在这里为了简便起见,我们用的是/SRC/INC/37xxRegs/regspinctrl.h。
   
    首先,在使用之前,我们必须映射一下内存地址:
    static PVOID pv_HwRegPinCtrl;
   static PHYSICAL_ADDRESS PhysAddr;
    PhysAddr.QuadPart = _PA_REGS_PINCTRL_BASE;
    pv_HwRegPinCtrl = (PVOID) MmMapIoSpace(PhysAddr, 0x1000, FALSE);

if ( pv_HwRegPinCtrl == NULL)
    {
       RETAILMSG(1, (TEXT("Failed to map device registers /r/n")));
       return FALSE;
    }
   
    如果提示找不到PHYSICAL_ADDRESS的声明,请先包含ceddk.h。在这里还有一点需要提醒一下的是,pv_HwRegPinCtrl变量只能用该名字,

并且作用域是全局的,否则在接下来的宏使用中会编译无法通过。
   
    在对GPIO进行操作之前,我们先了解如下几个宏:
    REG_HW_PINCTRL_MUXSELx_SET : 设置pin的功能。
    BF_PINCTRL_MUXSELx_BANKx_PINxx :将相应的pin功能转化为写入寄存器的数值。
    REG_HW_PINCTRL_DOUTx_SET :输出high
    REG_HW_PINCTRL_DOUTx_CLR :输出low
    REG_HW_PINCTRL_DOEx_SET :输出使能
    REG_HW_PINCTRL_DOEx_CLR :输入使能
    REG_HW_PINCTRL_DINx_RD :如果PIN为输入,则该宏用来读取相应寄存器的数值。
   
    宏中的x代表数字,对应相应的PIN。
   
   
    现在以实际例子对pin做一次操作。
   
    如果我们在datasheet中看到某个PIN有如下描述:
    HW_PINCTRL_MUXSEL0 BANK0_PIN08
    GPMI_D08 Pin Function Selection.
   00 = GPMI_D8.
   01 = EMI_ADDR15.
   10 = Reserved.
   11 = GPIO.
   
  如果我们想令该PIN作为GPIO并输出high,那么代码如下:
  REG_HW_PINCTRL_MUXSEL0_SET(BF_PINCTRL_MUXSEL0_BANK0_PIN08(3)); 
  REG_HW_PINCTRL_DOUT0_CLR(1 << 8);  
  REG_HW_PINCTRL_DOE0_SET(1 << 8); 
  
  对应datasheet,我们就不难发现以上三个宏的x如何选择相应的数字,如图:
  
  
  若是想将该pin作为输入,也是比较简单,样例代码如下:
  REG_HW_PINCTRL_MUXSEL0_SET(BF_PINCTRL_MUXSEL0_BANK0_PIN08(3));
  REG_HW_PINCTRL_DOE0_CLR(1 << 8); //设置为输入  
  if((REG_HW_PINCTRL_DIN0_RD() & (1 << 8)) != 0)
  {
   //Input high
  }
  else
  {
   //Input low
  }
  
  代码宏中数字的选择,可参考之前图片的解释,在此就不再详表。

转载于:https://www.cnblogs.com/wodeyitian/archive/2008/08/21/2460414.html

Sigmatel37xx GPIO的使用相关推荐

  1. STM32 GPIO的原理、特性、选型和配置

    目录 1.基本结构 2.4种输入模式 3.4种输出模式 4.GPIO选型和配置 1.基本结构 STM32 GPIO是通用输入/输出端口的英文简称,其可实现输入.输出.驱动.通信等功能,STM32的I/ ...

  2. STM32低功耗模式下GPIO如何配置最节能?

    目录 1.将未使用的GPIO 配置为模拟输入模式 2.调节GPIO 速度 3.GPIO不使用时禁用寄存器时钟 4.避免悬空未使用的引脚 STM32低功耗模式下GPIO如何配置最节能,这里总结了一下四点 ...

  3. 【驱动】GPIO 作为按键时的 设备树 配置

    #[驱动]GPIO作为按键时的 设备树 配置 0.设备树 0.0 别名 imx6ul.dtsi 什么作用??? /*************开始/ / { aliases {- gpio0 = &am ...

  4. 【驱动】GPIO寄存器配置总结

    #[驱动]GPIO寄存器配置总结 0.设置复用功能为GPIO 1.设置引脚特性,与硬件匹配 2.配置寄存器举例 字段解释: 2.0.SRE 数据位:0 SRE(Slew Rate Field):转换速 ...

  5. linux驱动:设备-总线-驱动(以TI+DM8127中GPIO为例)

    一:说明:这次学习设备-总线-驱动是以TI+DM8127的GPIO为例 1.GPIO资源注册到omap_hwmod链表中 2.初始化GPIO 3.将GPIO注册到plarform层 4.将GPIO注册 ...

  6. linux驱动:TI+DM8127+GPIO(五)之plarform

    五.[GPIO驱动框架>平台platform] (一)设备找驱动 1.drivers/base/platform.c中 int platform_device_register(structpl ...

  7. linux驱动:TI+DM8127+GPIO(四)之设备

    四.[GPIO驱动框架>设备device] arch/arm/mach-omap2/gpio.c中 1.static int __init omap2_gpio_init(void) { ret ...

  8. linux驱动:TI+DM8127+GPIO(三)之omap_hwmod中添加GPIO资源

    三.[GPIO驱动框架>向omap_hwmod中添加GPIO资源] ***将GPIO硬件信息添加到注册到omap_hwmod_list列表中 Arch/arm/plat-omap/include ...

  9. linux驱动:TI+DM8127+GPIO(二)之驱动

    二.[GPIO驱动框架>驱动driver] 重要结构体 gpio_chip:管理一组GPIO gpio_desc:描述每个GPIO gpio_bank:封装了gpio_chip加入GPIO控制的 ...

最新文章

  1. 机器视觉中彩色成像必须考虑的十个问题
  2. 雨林木风Ghost Win7 SP1 装机版 YN2012.05
  3. RFC 协议下载方法
  4. 别再傻傻地用这些软件G转P了,修复后不稳定的真相在这里
  5. python常用模块之shelve模块
  6. Python切片中的误区与高级用法
  7. 驼峰设计 PPT设计网站
  8. kettle 脚本 java_Kettle 执行SQL脚本
  9. OpenVINO安装之安装openCL
  10. oracle怎么设置出蓝色边,Oracle 数据库入门之———————-,多行函数-蓝色留心...
  11. 数据竞赛入门-金融风控(贷款违约预测)五、模型融合
  12. oracle11g安装
  13. ubuntu 安装redash
  14. 【IntellJ IDEA】idea的Terminal窗口中文乱码 解决方法
  15. centos时间同步
  16. 吴恩达教授机器学习笔记【一】- 线性回归(2)
  17. 电脑默认重置html,windows10电脑默认自带浏览器被篡改如何恢复
  18. android h5 指定浏览器_微信h5网页如何实现跳转到手机默认浏览器
  19. QtWebApp的使用【在Qt中搭建HTTP服务器】(三)
  20. 浏览器显示海康摄像头实时预览画面纯前端解决方案

热门文章

  1. Ubuntu下 5步安装nginx记录
  2. cesium js 路径_[CesiumJS]Cesium入门3 – Cesium目录框架结构
  3. Oracle Merge into
  4. 通讯软件通常要哪几个端口_您通常打开几个浏览器标签?
  5. 您第一次上网的速度是多少?
  6. android 汽车 源码_汽车级Linux,无需Google即可运行Android等
  7. 组件化开发_思维导图
  8. 前端:JS/30/综合实例:选项卡(HTML,CSS,JS)
  9. Bootstrap 固定导航条
  10. ROS笔记(13) 记录与回放数据