【转】wince下Gpio 驱动程序

在WINCE下能够直接访问的都是虚拟地址,不能直接访问GPIO端口,因此我们首先需要将GPIO口的物理地址映射到虚拟地址上来。 
    分别使用VirtualAlloc和VirtualCopy这两个函数来完成映射! 
这两个函数的原型: 
LPVOID VirtualAlloc(      LPVOID lpAddress,        DWORD dwSize, 
DWORD flAllocationType,    DWORD flProtect ); 
BOOL VirtualCopy( LPVOID lpvDest, LPVOID lpvSrc, DWORD cbSize, DWORD fdwProtect ); 
如果这两个函数执行成功,哪么VirtualAlloc将返回一个指针,使用这个指针我们就可以直接访问GPIO,通过读写相关地址寄存器,来控制GPIO端口! 
   v_pIOPregs = (volatile IOPreg *)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS); 
          if (v_pIOPregs == NULL){ 
                    RetValue = FALSE; 
          } 
          else { 
                    if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(IOP_BASE), sizeof(IOPreg), PAGE_READWRITE | PAGE_NOCACHE)) { 
                             RetValue = FALSE; 
                    } 
          } 
          if (!RetValue){ 
                    //PIO_InitializeAddresses - Failed !! 
          if (v_pIOPregs){ 
                             VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE); 
                    } 
                    v_pIOPregs = NULL; 
          } 
          //else RETAILMSG (1, (TEXT("::: PBT_InitializeAddresses - Success\r\n") )); 
          return(RetValue); 
v_pIOPregs是一个IOPreg结构,在s2410.h中定义, 
// 
// Registers : I/O port 
#define IOP_BASE       0xB1600000 // 0x56000000 
typedef struct   { 
     unsigned int   rGPACON;                   // 00 
     unsigned int   rGPADAT; 
     unsigned int   rPAD1[2]; 
     
     unsigned int   rGPBCON;                   // 10 
     unsigned int   rGPBDAT; 
     unsigned int   rGPBUP; 
     unsigned int   rPAD2; 
     
     unsigned int   rGPCCON;                   // 20 
     unsigned int   rGPCDAT; 
     unsigned int   rGPCUP; 
     unsigned int   rPAD3; 
     
     unsigned int   rGPDCON;                   // 30 
     unsigned int   rGPDDAT; 
     unsigned int   rGPDUP; 
     unsigned int   rPAD4; 
     
     unsigned int   rGPECON;                   // 40 
     unsigned int   rGPEDAT; 
     unsigned int   rGPEUP; 
     unsigned int   rPAD5; 
     
     unsigned int   rGPFCON;                    // 50 
     unsigned int   rGPFDAT; 
     unsigned int   rGPFUP; 
     unsigned int   rPAD6; 
     
     unsigned int   rGPGCON;                   // 60 
     unsigned int   rGPGDAT; 
     unsigned int   rGPGUP; 
     unsigned int   rPAD7; 
     
     unsigned int   rGPHCON;                   // 70 
     unsigned int   rGPHDAT; 
     unsigned int   rGPHUP; 
     unsigned int   rPAD8; 
     
     unsigned int   rMISCCR;           // 80 
     unsigned int   rDCKCON;                   
     unsigned int   rEXTINT0; 
     unsigned int   rEXTINT1;                    
     unsigned int   rEXTINT2;                    // 90 
          unsigned int   rEINTFLT0; 
          unsigned int   rEINTFLT1; 
          unsigned int   rEINTFLT2; 
          unsigned int   rEINTFLT3;                  // A0 
          unsigned int   rEINTMASK; 
          unsigned int   rEINTPEND; 
          unsigned int   rGSTATUS0; 
          unsigned int   rGSTATUS1;                 // B0 
}IOPreg;   

wince下Gpio 驱动程序相关推荐

  1. WinCE下光电编码器的驱动程序设计

    原文:http://article.ednchina.com/Embedded/20071209103917.htm 来源:中电网 | 作者:杨振坤 甘朝晖 蒋旻 引言 近年来,嵌入式技术发展迅速,嵌 ...

  2. WinCE下的GPIO中断的处理

    在我所负责的音频驱动部分代码中,采用了PXA270的GPIO34来检测Headphone的插入与拔出.原驱动部分有个BUG,即当耳机插入以后,耳机和喇叭同时在响,很明显没有对耳机插入事件做出响应.所以 ...

  3. wince下sources\sources.cmn\Makefile.def的相关作用

    1:首先是Makefile.def: ---------------------------------------- 在所有驱动的makefile中有!INCLUDE $(_MAKEENVROOT) ...

  4. 记WinCE下调试SIM900 GSM module

    记WinCE下调试SIM900 GSM module 近几天在调试sim900,把遇到的一些问题总结下吧. 一.一些引脚的说说明. Sim900有几个引脚需要了解下. 1.  CTS.RTS 由于使用 ...

  5. 【嵌入式】非操作系统下GPIO口控制器及LED灯编程

    非操作系统下GPIO口控制器及LED灯编程 GPIO控制器 概述 内部架构 端口寄存器 GPIO控制寄存器 GPIO数据寄存器 GPIO上拉寄存器 非操作系统LED灯闪烁 开发步骤 开发板上二极管 读 ...

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

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

  7. WinCE下串口虚拟软件

    前段时间,介绍了一个WinCE下的串口调试软件Serial Splitter Mobile 3.2.它的主要功能是将一个物理串口克隆成N个,供不同的应用程序使用,以监视物理串口收发的数据.今天介绍一个 ...

  8. 【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated)

    SD Card Driver on ADS Summary 了解SD card. 1 WinCE 5.0下SD Stack. 6 Bus Driver 7 Host Controller Driver ...

  9. Linux下触摸屏驱动程序分析

    [摘要: 本文以 linux 3.5--Exynos4412仄台,剖析 触摸屏 驱动焦点内容.Linux下触摸屏驱动(以ft5x06_ts为例)须要懂得以下学问: 1. I2C协定 2. Exynos ...

最新文章

  1. 1115 Counting Nodes in a BST
  2. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序
  3. Linux下I/O多路转接之select --fd_set
  4. Elasticsearch如何做到数十亿数据查询毫秒级响应?
  5. jQuery.noConflict() 解决冲突 原理深入
  6. 你最喜欢哪款游戏的界面风格,为什么?
  7. primefaces教程_PrimeFaces教程
  8. PostgreSQL bloat 检查与处理
  9. ENVI5.3安装教程(含软件下载)
  10. 数学建模学习:灰色关联分析
  11. krc转换lrc java_win7将酷狗音乐krc歌词转换成lrc歌词文件的方法
  12. linux 删除开机密码,6种清除开机密码方法,总有一个适合你
  13. Git代码reset回滚无效解决
  14. 修改win7开机登陆界面背景图片
  15. 安卓Android Studio Button按钮background不生效无效问题
  16. 【笔记】案例研究(红酒和白酒)
  17. 【必备知识】:线激光条纹中心线提取算法导读
  18. c语言程序写入,设计c语言程序并写入单片机
  19. w10网络里面没有计算机,win10计算器没有了怎么办_w10系统自带的计算器没有了的解决方法...
  20. <数据结构>创建一个有理数类

热门文章

  1. javascript for in,for each,for循环遍历区别
  2. hibernate基于单表curd
  3. 1049. 数列的片段和(20)
  4. html怎样调取css,css怎么调用?
  5. 【C++深度剖析教程39】实现C++数组类模板
  6. 【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介
  7. 移植uboot之修改代码支持NorFlash记录
  8. 【C++深度剖析教程5】C++中类的静态成员函数
  9. 2019年1月16日【第三天学习】
  10. 753 Cracking the Safe