您的位置:首页 > 其它

2440 WinCE操作GPIO

2010-07-29 17:06 176 查看
Windows CE系统将GPIO的实地址(例如2440的GPIO的基地址为0x56000000)映射到虚拟地址空间(GPIO对应为0xB1600000),这 样,通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的控制、输入输出工作。要操作一个平台的GPIO,在其对应BSP中按照基地址,找到虚拟地址,并且找到方便操作这个地址的数据结构就可以了,关键函数就是 VirtualAlloc和VirtualCopy。下面以操作Samsung S3C2440的GPIO为例,讲述这个步骤:
1.首先在BSP中的s2440.h文件,找到虚拟地址映射以及操作GPIO的寄存器结构体(这个在自己制作一些特殊设备的BSP时,会依据需要而发生更改)

二、因为我用的mini2440开发板的GPB0接在蜂鸣器上,所以我以操作GPB0为例编写代码。这样给GPB0一个高电平,那么蜂鸣器就会响,反之蜂鸣器就会停止发声

#ifdef __cplusplus
extern "C"
{
#endif
BOOL VirtualCopy( PVOID, PVOID, DWORD, DWORD );
#ifdef __cplusplus
}
#endif

void GPIO()        //通过GPIO控制蜂鸣器
{
volatile IOPreg *v_pIORegs;
v_pIORegs = (volatile IOPreg *)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
if(v_pIORegs)
{
if(VirtualCopy((PVOID)v_pIORegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE | PAGE_NOCACHE))
{
v_pIORegs->rGPBCON = 1;                    //将GPB0设置为OUTPUT
v_pIORegs->rGPBDAT = 0x3ff;               //设置为高电平,蜂鸣器发声
Sleep(3000);
v_pIORegs->rGPBDAT = 0;                     //恢复为低电平,蜂鸣器停止发声
}

VirtualFree((LPVOID)v_pIORegs, 0, MEM_RELEASE);
v_pIORegs = NULL;
}
}


@written by .cpp

百度空间:http://hi.baidu.com/anglecloudy

博客园:http://www.cnblogs.com/dotcpp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: