相关服务

  • 《电子产品世界》2007年第10期摘录:F蓄@ld卜‘,番@4d能的实

如发现有乱码,请点击下面链接浏览原文
正文摘录:

F蓄@ld卜‘,番@4d能的实现函数,该层的函数利用硬件抽象层中对寄存器操作的接口来访问CAN控制器来实现各种CAN控制器所能提供的功能。3.应用程序接口层:在该层中的主要提供给3个函数,初始化CAN控制器CANinit()、发送数据CANSendData0、接收数据CANRecieveData0。CH372驱动程序CH372芯片在本地端提供了通用的被动并行接口。CH372芯片的读写时序主要要求读写使能信号有一个2—10p_s的持续时间,并且在a0=l时写入命令,a0--0时读写数据。在本设计中,用LPC2119的IO口来表示CH372的各信号,并需要严格按照其时序要求用软件模拟其读写时序,一个典型的写数据子函数如下:USBWriteData(uint32Data){10;//a0--0,表示以下写入为数据IOOPIN=Data;//向数据端口写入数据IOOSET=0x00000020;//rd=l,读信号无效IOOCLR=0x00000040;//wr=0,写使能Delay8us(1);//延时8us,表示写信号有效宽度100SET=0x00000060;)在以上程序中,对各端口的操作先后代表了CH372的读写时序信号的先后,适当的延时表示有效的写/读选通脉冲WR/RD的宽度,其典型值为90到10000ns,我们选择251.ts。同理可得写命令,读数据子函数:USBWriteCMD(uint32CMD),USBReadData()。调用以上子函数提供了发送和接收数据的函数:IRQ—CH372(void),UploadUSBData(unint32Length,uint32Data[])。环形缓冲区在本设计中,设计了两个环形缓冲区,分别存放USB及CAN的数据,使其能同步发送,一个典型的缓冲区数据结构如下:栏目编辑ll韩汝水IIstructCANRecRinBuf【Uint32CANBuffMAXl.Uint32WritePtr;Uint32ReadPtr:}数据元素是无符号32位整数,MAX为环形缓冲区最大长度,WritePtr为读指针,ReadPtr为写指针。读写指针初始化为writePtr=ReadPtr--0。通过CAN控制器接受的数据存放在环形缓冲区CANRecRinBuf中,再读出数据从USB端输出,保证了数据通信的可靠性。上位机监控界面安装CH372的上位机驱动后,基于CH372的USB设备就可以被上位机识别了。调用CH372提供的动态连接库CH372.dll及其相应的LIB文件CH372.Lib和头文件CH372.h,以建立上位机的工序,调用CH372提供的库函数CH3750penDevice0、CH375C10seDevice(),用于打开和关闭设备,调用CH375WriteData0;CH375ReadData0接收下位机通过CH372发送上来的数据,并根据CAN总线数据的格式将其封装成CAN格式的数据,提供对CAN数据的收发CANDownload(),CANUpload0。用c++设计相应的图形界面以实现和下位机的通信。结缙在ABSECU的研发项目中,我们使用了此转换器将ECU的CAN数据转换成USB数据和上位机通信,ECU上传需监控参数,上位机下传标定参数。其硬件上使用ARM7内核的IAaC2119作为控制器,以及底层软件的设计确保了转换器在实际的ECU开发的CCP标定的工程中,在大量数据进行传输的过程中有较好的可靠性。止j参考文献:1.QinHengElectronics.CH372Datasheet[EB/OL].hltp://winchiphead.corn/,20062.PhilipsLPC2119Datasheet[EB/OL]http://www.zlgmcu.corn/,2006

阅读此文(图):   点击此处在线翻阅