wince下Gpio 驱动程序

Gpio 驱动程序
  WINCE下能够直接访问的都是虚拟地址,不能直接访问GPIO端口,因此我们首先需要将GPIO口的物理地址映射到虚拟地址上来。
   分别使用VirtualAllocVirtualCopy这两个函数来完成映射!
这两个函数的原型:
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; 
 
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(1397) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值