嵌入式WinCE中CAN总线控制器的驱动设计1.doc
上传人:sy****28 上传时间:2024-09-15 格式:DOC 页数:4 大小:405KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

嵌入式WinCE中CAN总线控制器的驱动设计1.doc

嵌入式WinCE中CAN总线控制器的驱动设计1.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

嵌入式WinCE中CAN总线控制器的驱动设计0引言近年来,由于消费电子、计算机、通信(3c)一体化趋势日趋明显,嵌入式系统再度成为研究和应用的热点。嵌入式操作系统(:Real-timeEmbeddedOperatingSystem,RTOs或EOs)作为一种实时的、支持嵌入式系统应用的操作系统软件,成为嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等。WindowsCE操作系统就是微软公司从整体上为有限资源平台设计的多线程、完整优先权、多任务的操作系统WinCE支持各种处理器产品家族,包括x86,Xscale,ARM,MIPS和SH系列。它的模块化设计允许它对从掌上电脑到专用工业控制器的用户电子设备进行定制,选择系统模块和组件的多少决定了所需内存的大小。WindowsCE操作系统之所以能够支持各种各样的硬件设备,是因为对每一款硬件设备,都有其对应的设备驱动程序,否则这款硬件就无法在WindowsCE下正常工作。winCE提供了4种设备模型,其中2种是专门用于WinCE的模型,另外2种外部模型来自其他的操作系统。基于WinCE的两种模型是本机的设备驱动程序和流接口的驱动程序;两种外部模型用于通用串行总线(USB)和网络驱动器接口标准(NDIS)驱动程序。下面针对WinCE系统下基于三星公司的ARM9内核芯片S3c2410的CAN总线控制器SJAl000,以流接口驱动程序形式进行设计。lCAN总线及控制器工作原理控制器局域网CAN是由ISO定义的串行通信总线,主要用于各种过程检测及控制。它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率可达1Mb/s。cAN总线通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。它的基本设计规范要求有高位速率和高抗电磁干扰性,而且能够检测出产生的任何错误。由于cAN串行通信总线具有这些特性,它很自然的在汽车制造业以及航空工业中受到广泛应用。SJAl000是一种独立控制器用于移动目标和一般工业环境中的区域网络控制(CAN)。它是Philips半导体公司的PC.A82(;200CAN控制器(BasicCAN)的替代产品。而且它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN2.0B协议。其内部体系结构如下图1所示。在实际的开发中,上述接口名称中的XXX三个字母被具体设备的设备文件名所代替。流接口驱动程序通过编译后,生成DLL文件,即动态链接库文件。3CAN总线控制器sJAl000驱动程序设计CAN总线控制器SJAl000驱动采用流接口驱动程序模型,要实现的流接口函数分别为CAN_Init,CAN_Deinit,CAN_Open,CAN_Close,CAN_Read,CAN_write,CAN_IOControl等。应用程序使用CreatFile()函数以文件的方式打开CAN控制器驱动,以获取驱动文件的句柄,然后使用该句柄调用DeviceloControl(),ReadFile(),WriteFile()函数来CAN控制器的各种功能。由于篇幅有限,下面仅针对CAN_Init,CAN_Read和CAN_IntrThread函数的实现进行详细的设计。3.1CAN_Init函数的设计实现当用户开始使用CAN总线控制器时,设备管理器调用这个函数来初始化控制器设备SJAl000。这个函数是通过设备管理器提供的ActiveDeviceEx()函数来调用的。函数执行后,如果成功就返回设备的句柄。CAN_Init函数的流程如图2所示。3.3CAN_IntrThread函数的设计实现在SJAl000控制器中,报文的发送和接收是采用中断方式来完成的。内核函数InterruptInitialize()外部中断事件和将逻辑中断号绑定,这一步就会使能该中断。当该中断发生时,ISR就触发该事件生效。完成以上工作后,驱动程序中的IST就可以使用WaitForsin-gleObject()函数等待中断的发生。中断处理结束后,IST需要调用InterruptDone()告诉操作系统中断处理结束。中断服务线程CAN_IntrThread函数程序流程图如图4所示。最后需要编写自己的CEC文件。主要是添加一个BuildMethod,任务是复制注册表到WinCE的系统目录下面。加一个bibFile,其主要功能是把编译的can.dll文件添加到系统内核中去。保存写好的CEC文件,在.PlatformBuildm中添加CEC特征到系统选项中去。生成系统时,添加自己的CEC特性,