主题 : GPIO驱动打不开怎么回事呢。。。 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 9994
精华: 0
发帖: 8
金钱: 80 两
威望: 40 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2009-10-21
最后登录: 2009-11-30
楼主  发表于: 2009-10-29 19:35

 GPIO驱动打不开怎么回事呢。。。

我使用evc编写了一个gpio输出的程序,但是用wince系统打开驱动时显示,打开gpio驱动失败,不知道是为什么,我用的是友善之臂的s3c2440实验板 ,请高手不吝赐教,不甚感激~~
难得明白
这个阶段正是我事业的上升期,我怎么能走得开呢?
级别: 精灵王
UID: 3197
精华: 3
发帖: 770
金钱: 6995 两
威望: 5398 点
贡献值: 21 点
综合积分: 1600 分
注册时间: 2008-12-30
最后登录: 2010-12-31
1楼  发表于: 2009-10-31 09:04
GPIO只是端口的用途之一,一般并不作为固定功能的driver,而是视用户的需求自行编写设置,当前的BSP中并不包含你所谓的"GPIO“的驱动。
简单的GPIO功能驱动可以参考LED和buttons自行实现,方可在应用程序中打开使用。
级别: 新手上路
UID: 9994
精华: 0
发帖: 8
金钱: 80 两
威望: 40 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2009-10-21
最后登录: 2009-11-30
2楼  发表于: 2009-11-02 15:32
引用第1楼26672624于2009-10-31 09:04发表的  :
GPIO只是端口的用途之一,一般并不作为固定功能的driver,而是视用户的需求自行编写设置,当前的BSP中并不包含你所谓的"GPIO“的驱动。
简单的GPIO功能驱动可以参考LED和buttons自行实现,方可在应用程序中打开使用。

可否详细说明一下,如何添加GPIO驱动,不胜感激
难得明白
学习linux了。
级别: 新手上路
UID: 448
精华: 0
发帖: 37
金钱: 285 两
威望: 65 点
贡献值: 0 点
综合积分: 74 分
注册时间: 2008-04-03
最后登录: 2015-05-14
3楼  发表于: 2009-11-08 09:11
手册有这个例子的吧。
庆祝淘宝http://gooogleman.taobao.com/淘出一层小洋楼,特此限量促销10个mini2440 开发板
级别: 新手上路
UID: 9994
精华: 0
发帖: 8
金钱: 80 两
威望: 40 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2009-10-21
最后登录: 2009-11-30
4楼  发表于: 2009-11-12 16:58
引用第1楼26672624于2009-10-31 09:04发表的  :
GPIO只是端口的用途之一,一般并不作为固定功能的driver,而是视用户的需求自行编写设置,当前的BSP中并不包含你所谓的"GPIO“的驱动。
简单的GPIO功能驱动可以参考LED和buttons自行实现,方可在应用程序中打开使用。

驱动写好了加载也成功,但是还是无法打开,不知道为什么。。。
难得明白
级别: 骑士
UID: 9169
精华: 0
发帖: 249
金钱: 1330 两
威望: 299 点
贡献值: 0 点
综合积分: 498 分
注册时间: 2009-09-19
最后登录: 2017-08-14
5楼  发表于: 2009-11-15 22:12
查看一下物理地址分配吧
级别: 新手上路
UID: 9994
精华: 0
发帖: 8
金钱: 80 两
威望: 40 点
贡献值: 0 点
综合积分: 16 分
注册时间: 2009-10-21
最后登录: 2009-11-30
6楼  发表于: 2009-11-17 15:58
引用第5楼libailiang于2009-11-15 22:12发表的  :
查看一下物理地址分配吧

void Virtual_Alloc()
{

    // GPIO Virtual alloc
    s2440IOP = (volatile IOPreg *) VirtualAlloc(0,sizeof(IOPreg),MEM_RESERVE, PAGE_NOACCESS);
    if(s2440IOP == NULL) {
        RETAILMSG(1,(TEXT("For s2440IOP: VirtualAlloc faiLED!\r\n")));
    }
    else {
        if(!VirtualCopy((PVOID)s2440IOP,(PVOID)(IOP_BASE),sizeof(IOPreg),PAGE_READWRITE | PAGE_NOCACHE )) {
            RETAILMSG(1,(TEXT("For s2440IOP: VirtualCopy faiLED!\r\n")));
        }
    }

    
}
这个函数可以得到相应寄存器的虚拟地址,请问物理地址要怎么对应呢?
难得明白
级别: 侠客
UID: 8911
精华: 0
发帖: 50
金钱: 350 两
威望: 127 点
贡献值: 0 点
综合积分: 100 分
注册时间: 2009-09-10
最后登录: 2015-10-23
7楼  发表于: 2009-11-18 13:35
你编写的完整驱动看一下,可能是CreateFile时没有成功,试着在udong的Open函数下打印一个调试消息,通知访问成功!然后再查看Iocontrol()函数。