完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以OK210为例,介绍如何新建和修改ce6下的gpio驱动 只要按照步骤执行下去,即可建立一个新的GPIO驱动。并做如何修改GPIO驱动介绍。完成驱动开发的准备工作。 硬件平台:飞凌OK210 操作系统:飞凌光盘中的BSP,Win CE6.0 编译工具:VS2005 + Win CE6.0 + BSP 在上述所有工具安装完成后,直接用BSP的快捷方式打开。 驱动主要在文件夹PLATFORM/SMDK210/src/drivers下 建立过程: 1,建立驱动 在drivers文件夹上点击右键,选择add->New Source Subproject->WCE Dynamic-Link Library在name框中输入XXX,下一步。 选择A simple Windows Embedded CE DLL subproject完成。 2,打开PLATFORM/SMDK210/src/drivers/XXX文件夹 里面已经替你建好了如下文件:makefile,source,StdAfx.cpp,StdAfx.h,XXX.cpp,XXX.def 用文本编辑器打开XXX.def文件,添加如下代码: 注意:一下均不能直接复制粘贴到开发环境下,否则编译报错。 LIBRARY XXX_DRV EXPORTS XXX_Init XXX_Deinit XXX_Open XXX_Close XXX_Read XXX_Write XXX_Seek XXX_PowerDown XXX_PowerUp XXX_IOControl 打开XXX.cpp文件加入如下代码: 加上头文件: #include #include #include #include #include #include #include "pmplatform.h" #include "Pkfuncs.h" #include #include #include "xxx.h" 在xxx.cpp中设置操作变量: static volatile GPIO_REG * g_pGPIOReg = NULL; 加上入口驱动函数: BOOL WINAPI DllEntry(HANDLE hinstDLL, DWORD dwReason, LPVOID /* lpvReserved */) { switch(dwReason) { case DLL_PROCESS_ATTACH: DEBUGREGISTER((HINSTANCE)hinstDLL); return TRUE; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; #ifdef UNDER_CE case DLL_PROCESS_EXITING: break; case DLL_SYSTEM_STARTED: break; #endif } return TRUE; } 在xxx_Init函数中写入如下代码: g_pGPIOReg = (GPIO_REG*)DrvLib_MapIoSpace(BASE_REG_PA_GPIO, sizeof(GPIO_REG), FALSE); 继续增加如下代码: BOOL xxx_Deinit(DWORD hDeviceContext) { return TRUE; } DWORD xxx_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) { OutputDebugString(L"LED - LED Openn"); return 1; } BOOL xxx_Close(DWORD hOpenContext) { OutputDebugString(L"LED - LED Closen"); return TRUE; } DWORD xxx_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) { return 1; } DWORD xxx_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count) { return 1; } VOID xxx_PowerUp(DWORD hDeviceContext) { } VOID xxx_PowerDown(DWORD hDeviceContext) { } DWORD xxx_Seek(DWORD hOpenContext, long Amount, DWORD Type) { return 0; } 增加io控制函数(以ok210-a中的led为例,具体操作参考210数据手册,如果要修改gpio驱动,则应该在如下代码中修改相应的寄存器,并在xxx.h,中加上相应的操作符,操作符不能和其他的一样): BOOL xxx_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) { switch(dwCode) { case IOCTL_LED_LED_OPEN: g_pGPIOReg->GPH2.GP_CON = (g_pGPIOReg->GPH2.GP_CON & ~0xFFFF) | 0x00001111; //设置所有led灯的引脚为输出 g_pGPIOReg->GPH2.GP_DAT |= 0x0;//将led灯的引脚置低,根据原理图,低电平led灯亮 OutputDebugString(L"Led Open- LED IO Controln"); break; case IOCTL_LED_LED_CLOSE: g_pGPIOReg->GPH2.GP_CON = (g_pGPIOReg->GPH2.GP_CON & ~0xFFFF) | 0x00001111; g_pGPIOReg->GPH2.GP_DAT |= 0xf; OutputDebugString(L"Led Close- LED IO Controln"); break; } return TRUE; } 在xxx.h中,增加如下代码:(若增加驱动则应该在如下位置加上相应的操作符,格式和下面一样) #ifndef LCD_H #define LCD_H #define IOCTL_LED_LED_OPEN 0x04002060 #define IOCTL_LED_LED_CLOSE 0x04002061 #endif 打开PLATFORMSMDK210SRCDRIVERXXXsources 文件,用写字板或记事本加入如下代码:$(_SYSGENOAKROOT)lib$(_CPUINDPATH)ceddk.lib $(_TARGETPLATROOT)lib$(_CPUINDPATH)drvlib.lib $(_TARGETPLATROOT)lib$(_CPUINDPATH)drvlib_mem.lib 3,打开PLATFORMSMDK210FILES文件夹 用文本编辑器打开platform.bib文件,加入如下语句 ;------------- XXX Driver ------------------------------------------------------------- XXX.dll $(_FLATRELEASEDIR)XXX.dll NK SHK ;--------------------------------------------------------------------------------------- 注意位置,加到两个已有的驱动中间就好了 用文本编辑器打开platform.reg文件,加入如下语句 ;================= XXX ================== [HKEY_LOCAL_MACHINEDriversBuiltInXXX] "Prefix"="XXX" "Dll"="XXX.dll" "Order"=dword:OO "Index"=dword:1 同样注意位置,写到两个已有的驱动中间吧。OO代表加载顺序,请自己定义。 保存,clean sysgen 我第一次编译时出错了。第二次成功。 重编译下XXX 将生成的NK.bin烧写到板子上。 用vs2005的远程工具中的进程查看器查看板子运行中的NK.EXE下是否已经加载了XXX.dll。 如果已经加载,可以制作测试程序了。 |
|
相关推荐
3 个讨论
|
|
好评在哪里 ?
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
29个成员聚集在这个小组
加入小组windows ce 6.0 共享一个文件夹 或开机自动复制一个文件夹A到另一个文件夹B
4881 浏览 1 评论
AM335x工控主板!支持Wince系统、电容式多点触控等...
3377 浏览 2 评论
304浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 22:10 , Processed in 0.676389 second(s), Total 66, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号