新闻中心

EEPW首页>嵌入式系统>设计应用> 基于CAN总线的嵌入式车灯监控系统设计

基于CAN总线的嵌入式车灯监控系统设计

作者: 时间:2012-08-30 来源:网络 收藏

3.1.1节点初始化
系统的主要任务是实现上位机与下位机之间的通讯,将下位机节点采集到的电压电流参数上传至上位机并显示给用户,实时反映的工作状况。因此通讯任务具有最高级别的优先级。在任务taskican中,首先完成节点的初始化,包括端口初始化、设定波特率、设置验收滤波等,初始化通过调用Stellaris外设驱动库中的相应函数来完成。函数SysCtlPeripheralEnable()和GPIOPinTvpeCAN()可完成CAN模块外设的端口初始化,CANSetBitTiming()可以设定波特率,本中的通讯波特率设定为1 MB/s,并且上的节点都设置成相同的波特率,canAcceptFilterSet()可完成验收滤波设置。完成CAN节点的初始化之后,在任务taskican中每10 ms调用一次iCAN调度函数ICAN_Sche dul(),完成一次数据收发工作,同时将下位机节点采集的电压电流值上传至上位机并刷新显示。
3.1.2iCAN协议的消息处理
iCAN协议,即工业CAN-bus应用层协议。是由我国自主研发的CAN的高层应用协议,详细的定义了CAN报文中ID以及数据的分配和应用,建立了一个统一的设备模型,定义了设备的I/O资源和访问规则,采用“连接,面向节点”的通讯方式,既支持主从方式通讯模式,又支持事件触发通讯模式。系统中,上位机主节点的ID为0x01,下位机各节点的ID可以根据具体情况设定,范围为0x00-0x3F。
节点中,数据的发送和接收是由微处理器集成的CAN控制器自动完成。为满足实时性的要求,数据的接收操作采用中断方式。由于下位机节点数量较多,数据的发送接收量比较大,为了保证不丢失数据,这里了两个深度为40字节的CAN报文缓冲区,分别用作发送和接收缓存。对缓冲区的操作,由函数canCirBufRead和函数canCirBufWrite来完成。而对于CAN消息的发送和接收由函数ICANTxMsgObjSend、canFr ameSend和ICANRxMsgObjExplain来完成。
CAN消息的发送接收流程图如图5所示。数据的发送调用函数ICANTxMsgObiSend,其中先按照iCAN协议规定的格式填写报文的ID和数据段,然后查询缓冲区的状态,如果发送缓冲区未满,则调用canCirBufWrite将整合后的数据写入发送缓冲区,最后调用函数canFrameSend将数据发送到CAN上。

本文引用地址://m.amcfsurvey.com/article/148494.htm

c.JPG


接收采用中断方式,当有中断产生,即收到一帧数据,此时首先查询接收缓冲区的状态,如果未满,则调用函数canCirBufWrite将接收到的数据写入接收缓冲区。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭