7723|27

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince驱动问题请教不懂啊 [复制链接]

我想驱动一个普通的io口接受一段数字信号存储并处理,用的是s3c2410,wince4.2系统,看了些资料有两种方法很迷糊
1.用Virtualalloc和virtualcopy函数进行物理地址映射
2.现在driver目录下创建新文件,在添加makefile、sources文件什么的?
两个方法是不是都可以那
具体该怎么做那,能否给提供个详细的例子,说详细点
不懂啊。请指点不胜感激
此帖出自WindowsCE论坛

最新回复

恩,周立功的那本书,不错,上面流驱动各个函数及调用写的很清楚,你还是买本看看吧  详情 回复 发表于 2009-8-4 20:08
点赞 关注
 

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
随便在BSP里面找个驱动先看看再说吧,了解一下其架构
不然一下子也很难跟讲清楚怎么用
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我说的两种方法是不是都可以用啊
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

4
 
方法一肯定可以
方法二不明白你是什么意思
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

5
 
1可以
2的意思好像是要 编写IO驱动  编译到内核
1、2应该都可以
1好像更简单
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
你明白你说的所谓2种方法是什么意思吗?

你这就类似于把牛肉和牛耳朵拉到一块,问这2种肉是不是都能吃。

你所谓的2种方法,不过是创建这个驱动中的2个细节,本身就不是什么“2种方法”,而且也不是对立的。

不知道我说的,你能明白不,还是先从基础的搞起吧。
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
先看看流接口驱动的模型再说吧
此帖出自WindowsCE论坛
 
 
 

回复

85

帖子

1

TA的资源

一粒金砂(初级)

8
 
谢谢楼上各位的讲解
yashi的意思是不是我上面说的只是驱动的两个部分,一个完整的驱动都包含着两个部分
是这个意识吗
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
wince4.2是可以用第一种方法的,
wince6就只能做一个简单的流驱动了.
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
runshonin能给我解释详细点吗具体点
谢谢了
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
你就直接用Virtualalloc和virtualcopy把虚拟地址映射到PIO口的物理地址就行了啊.
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

12
 
我按照这个步骤做就可以吧:然后在编写应用程序就可以吧?谢谢你了
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  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的寄存器关联
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 10 楼 rushonin 的回复:
你就直接用Virtualalloc和virtualcopy把虚拟地址映射到PIO口的物理地址就行了啊.

虚拟地址映射只是做驱动中的一个步骤吧,楼主之需要做个IO的流驱动就行了,应该很简单的。如果你在编译内核的时候Build Options将Enable Full Kernel Mode选项选中的话,我觉得连Virtualalloc和virtualcopy这个步骤都可以省去。
楼主请仔细看一下CE牛人的这篇文章,定会受益匪浅的。
http://blog.chinaunix.net/u1/49088/showart_1281354.html
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

14
 
谢谢楼上的
我去看看您推荐的我文章
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

15
 
看了楼上推荐的文章,确实很好,y_man18您说的方法能否在给我说详细点,或者给我再推荐点资料,我的问题感觉应该不难可是刚开始接触这个真是一头雾水啊
我想要个具体做这个io驱动的步骤
谢谢了
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

16
 
你的功能比较简单,其实可以直接用你的第二种方式。

11楼已经为你提供了,地址映射,你可以直接对相应的寄存器操作。

选好你要进行I/O控制的引脚,初始化寄存器

之后就可以进行收发数据了



此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

17
 
我也一头雾水,学习中。。。
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

18
 
感谢楼上提供的资料
不过还有点迷糊
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

19
 
好多热心人,楼主只要找一本好书,然后又多Google,多来这里,很快就会了。
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

20
 
楼上的给我推荐一本书吧
谢谢
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表