《在wince应用程序中直接访问硬件》由会员分享,可在线阅读,更多相关《在wince应用程序中直接访问硬件(2页珍藏版)》请在金锄头文库上搜索。
1、在wince应用程序中直接访问硬件平台:wince5.0.0OK2440-III 5.0 BSP直接在wince下操作硬件可以避免烧写NK,避免繁琐的驱动调试,用来验证硬件好坏非常有用,是系统起来后调试外设的很好的手段。一、在wince5.0 平台wince平台是比较成熟的平台,驱动比较好调试,驱动和应用的写法可以一模一样,甚至可以采用EVC来开发流驱动,效果不错。在wince5.0 上直接访问硬件有如下方法:1、直接访问uncached 虚拟地址,成功案例如下:/-GPB for LCD backlight control 0xB16000XX is uncached Address#def
2、ine 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 controlledvoid CSPI_wifi_testDlg:OnButton3()/ TODO: Add your co
3、ntrol notification handler code here/ setting GPB1 out 3:2=01rGPBCON&=(13);rGPBCON|=(12);rGPBDAT|=(11);/ backlight on/rGPBDAT&=(11);/ backlight off2、使用MmMapIoSpace以及MmUnmapIoSpace 访问其实MmMapIoSpace以及MmUnmapIoSpace就是用VirtualAlloc和VirtualCopy实现的,下面地址有一篇文章详细介绍http:/ CDlgDemoDlg:OnButton1() / TODO: Add y
4、our control notification handler code here /unsigned char *gpio_base;unsigned int *gpio_base;OutputDebugString(LTestDrv - LedDrive1n); /PUCHAR ioPortBase;PHYSICAL_ADDRESS PortAddress = 0x56000060, 0; /LowPart=0x56000060;HighPart=0;gpio_base =(unsigned int *)MmMapIoSpace( PortAddress, 0x04,FALSE ); / 获得内存,4字节大小。*gpio_base = 0x0585FF87; / 直接访问硬件MmUnmapIoSpace(gpio_base,0x04);/释放内存3、用VirtualAlloc和VirtualCopy访问硬件几乎每一个驱动都有他们两个,在wince5.0 中, 如上的写法可以在驱动和应用中都直接使用,效果一样,调试起来方便。二、wince6.0刚开始的时候大家都一致认为wince6.0 已经不能在应用程序中直接访问硬件了,后来sunrain_hjb发了博客,证实VirtualCopyEX还是照样可以做到,下面是他的博客地址http:/