基于S3C2440处理器和WinCE的智能车载仪表设计
驱动,这些驱动已经由微软公司编写好。然后启动Bootloader,把镜像文件下载到 Flash存储器中,并配置操作系统启动文件boot.ini.
3.2 CAN总线驱动开发
由于CAN是外部设备,所以需要将CAN的驱动以流接口驱动方式编写。流接口驱动函数被设计来与通常的文件系统API(如ActivateDevice、ReadFile、WriteFile和IOControl等)紧密匹配,即流接口驱动在应用程序中表现为一个系统文件,应用程序通过对系统文件的特殊文件进行操作从而完成对设备的操作。编写流接口文件主要用到流接口函数,也就是流接口驱动的入口点,如XXX_Init、XXX_Read和XXX_Open等。这些流接口文件与相应的API函数对应,使应用程序由相应的函数可以访问到外部设备。
作为流接口驱动程序,CAN总线驱动程序也有一组标准函数,可完成I/O操作。这些函数提供给WinCE操作系统内核使用,它们都是流接口驱动程序的DLL文件。动态加载CAN总线驱动程序时,系统要进行注册。CAN驱动程序注册表信息:
WCHAR * szRegKey=L"DriversBuiltInCAN";
WCHAR * szPrefix=L"CAN";
WCHAR * szDLL=L"can.dll";
WCHAR * szFriendlyName=L"CANDriver";
DWORD * DrvIndex=1;
DWORD * DrvOrder=0;
通过以上代码完成注册之后,调用 ActivateDeviceEx()函数进行加载驱动。
3.3 CAN总线驱动通信流程
CAN总线控制器驱动程序主要用于设置MCP2515的波特率、MCP2515的验收过滤器、CAN消息传送模式和CAN收发数据方式。驱动程序是连接上位应用程序和硬件的一个中间纽带。智能车载仪表系统在EVC++环境下进行CAN总线开发。
流式驱动以文件的方式打开函数CreateFile( ):驱动成功打开后,CreateFile( )函数返回不为INVALID?HANDLE?VALUE的句柄,此句柄也是关闭驱动函数CloseHandle( )的参数。CAN设置函数DeviceIoControl( )接收由CreateFile( )函数获得的句柄及控制命令码,设置输入/输出缓冲区以及缓冲区的大小。函数执行完成后返回实际输出的缓冲区大小等。CAN总线发送与接收函数 WriteFile( )和ReadFile( ),利用驱动文件句柄、发送和接收缓冲区等参数完成数据的发送和接收,操作成功后返回实际发送和接收的字节数。
为了不让主线程一直处于等待数据到来的状态,让主线程拥有时间令牌来操作其他事情,程序采用多线程设计,创建一个接收数据线程。接收数据线程是一个无限循环,它不断查询CAN总线数据退出标志,如果退出标志有效,则该循环结束退出。驱动程序流程如图3所示。
图3 CAN总线驱动通信流程
结语
目前,基于嵌入式技术的车载仪表逐渐开始流行。本文使用基于WinCE的ARM9微处理器作为开发平台,处理速度快,功能强大;使用CAN总线技术进行信号的相互传输,CAN总线实时接收汽车部件发送来的信息,并进行处理与分析;使用WinCE操作系统,界面友好。本智能车载仪表系统可以节约成本、降低功耗,并且可维护性强,便于扩展和升级。
- CAN总线镍氢电池管理解决方案(04-23)
- CAN总线在机车监控系统中的应用(04-04)
- 基于can总线技术的电子控制系统单元在汽车网络系统中的应用(07-16)
- CAN总线+单片机实现通信网络设计(08-27)
- 基于CDMA和CAN总线的车辆远程故障诊断系统(02-20)
- CAN总线技术在矿井安全生产监控系统中的应用(08-09)