中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

您当前所在位置: 汽车电子 > 查看内容

基于ARM的CAN总线智能节点的设计

文章作者头像
发布:清雅轩 作者: webmaster来源: job.cartech8.com
PostTime:16-5-2008 21:27

以下为文章全文:(本站微信公共账号:cartech8)


汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师

  (2) 在CAN总线的两端加有两个120Ω的电阻,这两个电阻对于总线阻抗的匹配起着相当重要的作用。去掉它们会使数据通信的抗干扰性及可靠性大大降低,甚至无法通信。

  (3) CANH和CANL与地之间并联了两个30pF的小电容,可以滤除总线上的高频干扰并且具有一定的防电磁辐射的能力;在两根CAN总线接入端之间并入了5.6V的TVS管,当CAN总线窜入电压干扰时可通过TVS管的短路起到一定的过压保护作用。

  (4) 为了减小现场对节点的干扰,有用屏蔽双绞线,且根据实际使用经验,屏蔽电缆的屏蔽层无需接地。

  2 软件设计 

  软件调试环境采用ARM公司的ARM核处理器集成开发工具ADSv1.2。ADSv1.2集成了汇编、C、C++编译器和调试器,编译效率高,提供了功能强大的系统库,支持软件调式、JTAG仿真调试及硬件调试。本设计采用的是JT

AG仿真调试。

  对于一般的32位ARM应用系统,在运行主程序前必须初始化运行环境,即为ARM芯片编写启动代码。该启动代码包括异常向量表、堆栈初始化、存储系统初始化和目标板初始化等,一般用汇编语言编写。对于该设计来说,关键的是编写CAN驱动程序。主程序只需通过调用驱动程序提供的接口来实现数据的接收和发送,驱动程序包括四部分内容:CAN控制器的初始化、接收数据、发送数据和总线异常处理。图2为主程序流程图。

  2.1 CAN控制器初始化

  初始化CAN控制器的操作包括:硬件使能、软件复位、设备报警界限、设备总线波特率、设备中断工作方式、设备验收滤波器工作方式、设备工作模式并启动CAN等。初始化程序如下:

  HwEnCAN(CanEum); //硬件使能,CanNum=0~3,指四路CAN控制器

  SoftRstCAN(CanNum); //软件复位寄存器

  CANEWL(CanNum).Bits.EWL_BIT=USE_EWL_LAN[CanNum]; //设置错误警告界限

  CANBTR(CanNum).Word=USE_BTR_CAN[CanNum]; //初始化波特率

  VICDefVectAddr=(UINT32)CANIntPrg; //初始化中断为非向量中断

  VICIntEnable 1=(1<<19)|(1<<(20+CanNum))|(1<<26+CanNum));

  CANIER(CanNum).Word=USE_INT_CAL[CanNum];

  CANAFMR.Bits.Accbp_bit=1; //配置验收滤波器(旁路状态,即屏蔽验收滤波器)

  CANMOD(CanNum).Bits.TPM_BIT=USE_TPM_CAN[CanNum]; //初始化工作模式

  CANMOD(CanNum).Bits.LOM_BIT=USE_MOD_CAN[CanNum];

  SoftEnCAN(CanNum); //启动CAN

  LPC2294片内外设与引脚的连接由引脚连接模块控制。CAN控制器的硬件使能就是通过软件设备GPIO寄存器来控制多路开关的,将特定的引脚与CAN控制器连接起来。在设备各CAN寄存器之前必须进行软件复位,这是因为CAN的某些寄存器必须在软复位状态下读写。

  值得注意的是,LPC2294为所有的CAN控制器提供了全局接收标识符查询功能。2KRAM可容纳1024个标准标识符或者512个扩展标识符或两种类型混合的标识符。通过软件处理,可在该RAM中设置存放1~5个标识符表格。与独立CAN控制器SJA1000相比,它能更容易地任意复杂的ID进行筛选过滤,满足复杂的ID的接收过滤要求。这无疑大大减少了系统软件设计复杂度及运行时的负担。设置验收滤波器工作方式,必须首选创建LUT表格,指定每个表格的起始地址,并用实际的ID地址初始化该表格。最后设定验收过滤器模式寄存器。若该节点不主动发送数据,可选择在总线不活动时进入睡眠模式。

  2.2 数据发送

  将待发送的数据打包成符合CAN协议的帧格式后,便可写入发送缓站区,并自动发送。图3为发送子程序流程图。

  在写发送缓冲区前必须查询其状态。LPC2294中的每个CAN控制器有三个发送缓冲区,它们的状态可通过查询CANSR得知。只有当其中有空间的发送缓冲区即才将数据写入。在发送大量数据时,这一步显得尤其重要,否则发送可靠性将不能保证。启动发送成功后,只能通过查询CANGSR的TCS位或配置发送成功中断来判断数据是否发送成功。

[文章纠错]

文章网友提供,仅供学习参考,版权为原作者所有,如侵犯到

你的权益请联系qchjl_admin@126.com,我们会及时处理。

会员评价:

0 发表评论

渝公网安备 50010802001066号

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 14-5-2024 12:41 , Processed in 0.167921 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.