北京扬创科技网站首页
产品中心 新闻动态 技术频道 各地网点 联系我们 汇款方式 ARM9开发社区
产品信息快速导航
扬创2440开发板系列
  - YC2440-F-V4.1 开发板
  - utu2440-F-V4.1开发板
  - utu2440-S-V4.1开发板
扬创2410开发板系列
  - utu2410-S-V3.0开发板
  - YC2410-F-V2.1开发板
扬创OEM智能显示终端系列
  - YC1000系列OEM手持式终端
  - YC4000系列OEM仪器终端
  - YC7000系列OEM仪器终端
扬创其他OEM控制板系列
  - 其他OEM控制板系列
扬创CPLD/FPGA开发板系列
  - Mars-EDA-S系列开发板
  - Mars-EDA-U系列开发板
  - Mars-EDA-F系列开发板
  - Mars-EDA下载电缆系列
  - Mars-EDA配套选配件
产品解决方案系列
  - DVR网络视频服务器方案
  - 行业PDA定制解决方案
  - 嵌入式视频点播解决方案
  - YC-MMSP2系列开发套件
产品快讯
 YC2410-F 系列ARM9...
 Mars-UsbBlaster供...
 Mars-EDA-S增强版,...
 40万门Spartan-3 F...
产品推荐排行榜
 utu2440-S-V4....
  价格:780.00/套 不打折
 YC2440-F-V4.1...
  价格:980.00/套 不打折
 utu2440-F-V4....
  价格:680.00/套 不打折
 YC2440-F-V4.1...
  价格:1680.00/套 不打折
 YC2440-F-V4.1...
  价格:1980.00/套 不打折
 YC2440-F-V4.1...
  价格:1580.00/套 不打折
 utu2440-F-V4....
  价格:1380.00/套 不打折
 utu2440-F-V4....
  价格:1280.00/套 不打折
 utu2440-F-V4....
  价格:1280.00/套 不打折
 utu2410-S-V3....
  价格:1180.00/套 不打折
技术文栏 - ARM开发技术频道 - Wince开发相关 - 浏览文章
Windows CE下操作GPIO的方法
发布日期:2007-5-28 14:16:27   作者:   出处:

Windows CE下操作GPIO的方法(以ARM9 S3C2410为例)
  
 

GPIO 是ARM芯片最基本的输入输出通道,在ADS下操作就是一个单片机工作,直接读写其寄存器。在ARM9平台上,Windows CE系统将GPIO的实地址(例如2410的GPIO的基地址为0x56000000)映射到虚拟地址空间(GPIO对应为0xB1600000),这样,通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的控制、输入输出工作。
要操作一个平台的GPIO,在其对应BSP中按照基地址,找到虚拟地址,并且找到方便操作这个地址的数据结构就可以了,关键函数就是VirtualAlloc和VirtualCopy。并且CE的方便之处就是用户态的应用程序仍然可以使用这两个函数来访问所有这些虚拟空间,对于不太复杂的程序,甚至可以省略写驱动直接在应用程序中操作,其实在CE6之前,这些驱动也是工作在用户态的。
下面以操作Samsung S3C2410的GPIO为例,讲述这个步骤:
1.首先在BSP中的s2410.h文件,找到虚拟地址映射以及操作GPIO的寄存器结构体(这个在自己制作一些特殊设备的BSP时,会依据需要而发生更改)
//
// 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;  // AC
 unsigned int  rGSTATUS1;  // B0
 unsigned int  rGSTATUS2;  // B4
 unsigned int  rGSTATUS3;  // B8
 unsigned int  rGSTATUS4;  // BC
 
}IOPreg; 
将这些复制备用。

2.在EVC中建立一个应用程序工程,由于VirtualCopy函数没有在头文件中定义,但是在coredll.lib里面提供了符号连接,所以我们这里直接添加一个函数定义就OK了。
#ifdef __cplusplus
extern "C"
{
#endif

BOOL VirtualCopy( LPVOID, LPVOID, DWORD, DWORD );

#ifdef __cplusplus
}
#endif
同时将步骤1里面的定义复制到这里。

3.按照驱动程序里面操作的方法在应用程序中写GPIO操作函数
(1)定义一个寄存器结构体变量
volatile IOPreg *v_pIOPRegs;
(2)给这个变量分配空间并且映射到寄存器的空间上
v_pIOPRegs = (volatile IOPreg*)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
 if (v_pIOPRegs == NULL)
 {
  DEBUGMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r")));
  return TRUE;
 }
 if (!VirtualCopy((PVOID)v_pIOPRegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE)) {
  DEBUGMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r")));
  return TRUE;
 }
 DEBUGMSG (1,(TEXT("v_pIOPRegs is mapped to %x\n\r"), v_pIOPRegs));
这3个步骤之后,对v_pIOPRegs的操作将直接和GPIO的寄存器关联
例如:设置GPB的控制寄存器为全部Output
v_pIOPRegs->rGPBCON=0x155555;
设置GPB的数据寄存器输出高电平
v_pIOPRegs->rGPBDAT=0x3FF;

更多的操作,需要查阅ARM的datasheet以及WINCE的BSP源码完成。

对于非ARM的平台,在CE下操作,也可以参考这个思路。

共有1条文章 页次:1/1 分页: 9 1 :
发布人:----- 】·【推荐好友】·【打印】·【顶部
相关文章
[Wince开发相关] ·Windows CE下操作GPIO的方法2007-05-28
[Wince开发相关] ·WinCE 应用程序开机自动运行的又一种方法2007-05-24
[ARM开发技术频道] ·嵌入式实时程序设计C/C++的代码优化2007-05-23
[Wince开发相关] ·Windows CE下的串口通讯实例2007-05-15
[嵌入式Linux相关] ·LINUX下I/O资源的实现、管理和操作2007-05-11
相关评论
   系统暂时关闭评论功能!
联系我们 诚聘英才 友情链接 与我在线
销售总部:北京市海淀区中发电子新市场4312室(四层电梯口)(负责国内外所有地区相关销售业务) 010-62526934/6944 传真:010-62523064 MSN:yc-bj@yctek.com QQ:714238194
华南销售分部:深圳市华强北都会电子城二楼2B075-B (负责广东/广西/海南三省相关销售业务) 联系电话:0755-81502237 MSN:yc-sz@yctek.com QQ:6038916
公司研发总部:北京市回龙观西大街冠庭园5-1-201室(地铁13号线龙泽站往北300米) 邮编:102208 联系电话:010-81745228
备用电子邮箱: yctek@163.com (发邮件的用户请一定抄送一份这个备用邮箱)
Copyright © 2005 北京扬创科技有限公司 All Rights Reserved
京ICP备05051056号