7462|15

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何在应用层控制gpio? [复制链接]

现在本人用的是2450的芯片,想通过应用程序记载vs环境下来控制gpio,请问如何实现?谢谢了

最新回复

CE5可以直接内存映射 CE6必须写GPIO驱动 写GPIO驱动是王道  详情 回复 发表于 2009-8-25 09:38
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
用PHYSICAL_ADDRESS 和 MmMapIoSpace
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 jeanszu 的回复:
用PHYSICAL_ADDRESS 和 MmMapIoSpace


yes
我博客写了例子。看看去吧。不过仅仅是wince5.0 可以。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
你的博客内容好多啊,在哪部分啊
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
直接google MmMapIoSpace,就能查到很多例子了。
不过作为正规的project,还是建议在驱动里增加一个driver,将IO口封装成流驱动,供应用调用。这样可以保证跨平台移植和以后移植wince6的便利。
 
 
 

回复

126

帖子

0

TA的资源

一粒金砂(初级)

6
 
赞成将GPIO的操作写成一个流接口的驱动程序,修改platform.reg和platform.bib文件,将驱动添加到内核中;上层应用程序调用IOControl函数实现对GPIO的控制。驱动中操作GPIO较为方便,只要弄清楚寄存器地址的虚拟地址映射就可以了!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
对于MmMapIoSpace还是不太会用,想用VirtualAlloc和VirtualCopy来实现。
但是现在的问题是不能在s3c2450.h下找到虚拟地址映射
如这个#define IOP_BASE      0xB1600000 // 0x56000000

这个是2440的,2450的头文件没有这个定义啊
 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

8
 
g_hGPIO = CreateFile(TEXT("PIO1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
if (INVALID_HANDLE_VALUE == g_hGPIO)
{
  MessageBox( _T("Cannot open PIO1:"), _T("OPEN ERROR"), MB_OK);
}
DeviceIoControl(g_hGPIO,IOCTL_GPN_CLR_PIN,&iIndex,1,NULL,0,NULL,NULL);
...
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 5 楼 daigua04 的回复:
赞成将GPIO的操作写成一个流接口的驱动程序,修改platform.reg和platform.bib文件,将驱动添加到内核中;上层应用程序调用IOControl函数实现对GPIO的控制。驱动中操作GPIO较为方便,只要弄清楚寄存器地址的虚拟地址映射就可以了!


赞同写个GPIO驱动,在应用层利用驱动暴露的接口控制GPIO...
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
lz好像不懂驱动。你的意思好像是通过VirtualAlloc和VirtualCopy进行虚拟地址映射,然后操作相应GPIO寄存器做自己要的动作。
所谓的IOP_BASE 没有定义,可能是2450和2440的头文件不同。我手边没有2450的资料,但肯定有(可能不像你贴出的IOP_BASE的那样)
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

11
 
是的,内存映射,然后直接读写就可以的 。
IOBASE你需要看主板是怎么定义的
我2440的

  1. #define IOP_BASE      0xB1600000 // 0x56000000
复制代码
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
内存映射的响应速度比驱动控制慢很多吧?
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 9 楼 jgj58 的回复:
lz好像不懂驱动。你的意思好像是通过VirtualAlloc和VirtualCopy进行虚拟地址映射,然后操作相应GPIO寄存器做自己要的动作。
所谓的IOP_BASE 没有定义,可能是2450和2440的头文件不同。我手边没有2450的资料,但肯定有(可能不像你贴出的IOP_BASE的那样)


九楼说的没错啊 ,我刚刚接触wince一个月,好多东西都不懂。所以上来问问,问的问题幼稚让大家见笑啦。

请问是否可以在应用层用VirtualAlloc和VirtualCopy来实现我说的功能。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

14
 
2440可以那么做
2450的应该也可以 再找找2450里相关的源文件吧(比如IDE的安装路径里的文件统统找一遍,呵呵`),应该有类似2440.h里IOP_BASE的东东。
不用客气啦 没有笑你啊
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 jgj58 的回复:
2440可以那么做
2450的应该也可以 再找找2450里相关的源文件吧(比如IDE的安装路径里的文件统统找一遍,呵呵`),应该有类似2440.h里IOP_BASE的东东。
不用客气啦 没有笑你啊


已经解决啦  谢谢啦 结贴
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

16
 
CE5可以直接内存映射
CE6必须写GPIO驱动

写GPIO驱动是王道
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表