找回密码
 注册
搜索
查看: 5588|回复: 4

[讨论] 介绍一种很棒的wince驱动调试方法——在wince应用程序中直接访问硬件(作者:gooog

[复制链接]
发表于 2010-6-22 17:03:11 | 显示全部楼层 |阅读模式
直接在wince下操作硬件可以避免烧写NK,避免繁琐的驱动调试,用来验证硬件好坏非常有用,是系统起来后调试外设的很好的手段,现在就来分析吧。

  一、在wince5.0 平台

  wince平台是比较成熟的平台,感觉驱动比较好调试,驱动和应用的写法可以一模一样的,甚至我们可以采用EVC来开发流驱动,我就试过用EVC开发一个流驱动到PDA上,目前已经投产,效果很不错。

  在wince5.0 上直接访问硬件有如下方法:

  1、直接访问uncached 虚拟地址,成功案例如下:

//-GPB for LCD backlight control 0xB16000XX is uncached Address
#define rGPBCON    (*(volatile unsigned *)0xB1600010) //Port B control
#define rGPBDAT    (*(volatile unsigned *)0xB1600014) //Port B data
#define rGPBUP     (*(volatile unsigned *)0xB1600018) //Pull-up control B

下面的代码在EVC下成功 控制了背光。

// test is OK ---the backlight is controlled
void CSPI_wifi_testDlg::OnButton3()
{
  // TODO: Add your control notification handler code here
  // setting GPB1 out [3:2]=01
  rGPBCON&=~(1<<3);
  rGPBCON|=(1<<2);
  rGPBDAT|=(1<<1); // backlight on
  //rGPBDAT&=~(1<<1); // backlight off

}

  2、使用MmMapIoSpace以及MmUnmapIoSpace 访问

  其实MmMapIoSpace以及MmUnmapIoSpace就是用VirtualAlloc和VirtualCopy实现的,以前我曾经写过一篇文章有详细介绍,地址

  http://blog.csdn.net/gooogleman/archive/2009/08/11/4430858.aspx

  MmMapIoSpace以及MmUnmapIoSpace成功访问硬件案例:

void CDlgDemoDlg::OnButton1()   
58 {   
59   // TODO: Add your control notification handler code here   
60   //unsigned char *gpio_base;   
61   unsigned int *gpio_base;   
62   OutputDebugString(L"TestDrv - LedDrive1\n");   
63   //PUCHAR ioPortBase;   
64   PHYSICAL_ADDRESS PortAddress = {0x56000060, 0}; //  LowPart=0x56000060;HighPart=0;
65   gpio_base =(unsigned int *)MmMapIoSpace( PortAddress, 0x04,FALSE ); // 获得内存,4字节大小。   
66   *gpio_base = 0x0585ff87; // 直接访问硬件   
67   MmUnmapIoSpace(gpio_base,0x04);//释放内存   
68 }  

  3、用VirtualAlloc和VirtualCopy访问硬件

  这个是大家最熟悉的了,因为几乎每一个驱动都有他们两个,嘿嘿,所以在这里不做介绍了,因为在wince5.0 如上的写法可以在驱动和应用中都直接使用,效果一样,嘿嘿,这就是我一直喜欢wince5.0的原因,不管咋的,调试起来方便。

  二、wince6.0

  关于wince6.0 我接触的不算多,因为我公司一直用很落后的2440 ,现在才开始慢慢使用三星的A8 S5pc100,不过刚毕业的那阵子很有激情,自己从头到尾的把2440 5.0 BSP弄到wince6.0 上,效果还不错。刚开始的时候大家都一致认为wince6.0 已经不能在应用程序中直接访问硬件了,后来sunrain_hjb老兄发了博客,证实VirtualCopyEX还是照样可以做到,我暂时还没有时间做验证,不过sunrain_hjb 老师(还是叫老师吧,因为他的确是我们wince驱动的良师益友,尽管没有见过面。)的博客很有分量的,值得信赖,下面是他的博客地址http://www.cnblogs.com/we-hjb/archive/2010/02/25/1673815.html  大家可以一起去学习,sunrain_hjb 老师更新的蛮快,并且一旦发博,都是经典。

  三、wince7.0

  最近在CSDN wince板块,一些走在前沿的老兄,已经开始探讨wince7.0 ,据说已经比wince6.0 改变很多,让我们这些wincer 对android的恐惧感减缓一些。嘿嘿,等过阵子移植wince7.0 到OK6410/REAL6410 上试试,wince6.0 的安装的复杂性,让我很不爽。不懂他如何直接访问硬件的了,到时候玩过再完善这篇博客了。This is it!



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gooogleman/archive/2010/06/09/5658503.aspx
发表于 2010-8-2 10:04:47 | 显示全部楼层
多谢分享。
受教了。
www.focushrd.cn
聚焦!专业!高效!服务人才 !  成就客户!
点评回复

使用道具 举报

发表于 2010-9-15 17:19:11 | 显示全部楼层
不错啊不错!
点评回复

使用道具 举报

发表于 2011-11-24 09:51:49 | 显示全部楼层
谢谢分享!学习了[em14]
点评回复

使用道具 举报

发表于 2012-3-16 16:49:10 | 显示全部楼层
哈哈 Googleman 支持支持
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-25 20:20 , Processed in 0.046866 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表