基于WINCE的CAN总线设备驱动研究
图4 SJA1000工作流程
4.2 WINCE下流接口驱动的接口函数实现
WINCE下每个流接口驱动都必须实现一组标准的接口函数,以下仅重点介绍部分接口函数及其实现.
a.DWORD CAN—Init(DWORD dwContext):设备管理器初始化CAN设备时调用这个函数.CAN—Init的实现原理是:初始化CAN控制器SJA1000,创建一个WINCE的系统中断用来响应SJAl000的硬件中断,创建中断服务线程,此线程等待WINCE对应的系统中断发生,然后响应中断.图5是CAN—Init函数的实现流程.
图5 CAN-Init函数的实现流程
b.WORD CAN—Open(DWORD hDeviceContext.DWORD AccessCode,DWORD ShareMode):打开一个CAN设备驱动程序时应用程序通过createFile()来调用此函数.
c. BOOL CAN—IOControl (DWORD hopenContext,DWORD dwCode,PBYTE pBufIn, DWoRDDwLenIn, PBYTE pBufOut,DWoRD dwLenout,PDWoRD pdwActualOut):应用程序通过DeviceIocontrol()函数来调用此函数.
d.DWORD CAN—Write(DWORD hOpenContext, LPCVOID DSourceBvtes, DWORD NumberOfBytes):当cAN设备驱动程序处于打开状态时由应用程序通过writeFile()来调用这个函数.
e.中断服务线程(Can Thread)的实现原理:硬件中断后,触发ISR(中断服务例程),ISR只做部分处理工作(发送事件消息),IST(中断服务线程)收到触发消息后才开始工作.中断服务线程Can-Thread的实现流程如图6所示.
图6中断服务线程工作流程
一个具体的流接口驱动程序跟注册表部分是分不开的,因此代码编制完成后,要建立一个can.reg文件保存到流接口驱动程序的目录里.
4.3应用程序对硬件设备的操作
应用程序直接通过文件操作来访问硬件设备,文件操作会自动调用系统的流接口驱动程序的函数.比如:文件操作的ReadFile函数会自动调用底层的Can-Read等函数.本研究完成了基于WINCE嵌入式车载网络的CAN总线管理单元的设计,实现了CAN网络的连接,并成功地运用到嵌入式车载网络上,实践证明这种实现方式具有良好的特性和一定的使用价值.
评论