您好,欢迎光临电子应用网![登录] [免费注册] 返回首页 | | 网站地图 | 反馈 | 收藏
在应用中实践
在实践中成长
  • 应用
  • 专题
  • 产品
  • 新闻
  • 展会
  • 活动
  • 招聘
当前位置:中国电子应用网 > 技术应用 > 正文

基于CAN总线的汽车CAN节点测试仪设计

2011年10月18日14:27:38 本网站 我要评论(2)字号:T | T | T
关键字:汽车 单片机 

关键字:CAN总线 节点测试仪

  CAN通讯程序包括SJA1000芯片的初始化、接收数据和发送数据。测试仪上电后进行SJA1000的初始化,该操作必须正确可靠,这是接收数据和发送数据的前提。根据SJA1000的手册,设计 代码如下:

writesja1000(MODADDR, 0x09);

   //设置方式寄存器,进入复位操作以初始化

writesja1000(CDRADDR, 0x88);

   //设置时钟分频寄存器,选PeliCAN模式

writesja1000(AMR0ADDR, AMR0 );

   //设置接收屏蔽寄存器0

writesja1000(AMR1ADDR, AMR1);

   //设置接收屏蔽寄存器1

writesja1000(AMR2ADDR, AMR2);

   //设置接收屏蔽寄存器2

writesja1000(AMR3ADDR, AMR3);

   //设置接收屏蔽寄存器3

writesja1000(ACR0ADDR, ACR0);

   //设置接收验收代码寄存器0

writesja1000(ACR1ADDR, ACR1);

   //设置接收验收代码寄存器1

writesja1000(ACR2ADDR, ACR2);

   //设置接收验收代码寄存器2

writesja1000(ACR3ADDR, ACR3);

   //设置接收验收代码寄存器3

writesja1000(BTR0ADDR, 0x03);

   //设置总线定时器0

writesja1000(BTR1ADDR, 0xFF);

   //设置总线定时器1

writesja1000(OCRADDR, 0xAA);

   //设置输出寄存器

writesja1000(RBSAADDR, 0x00);

   //设置接收数据缓冲区首地址

writesja1000(TXERRADDR, 0x00);

   //清除发送错误寄存器

writesja1000(RXERRADDR, 0x00);

   //清除接收错误寄存器

readsja1000(ECCADDR);

   //清除错误代码捕捉寄存器

writesja1000(IERADDR, 0xFF);

   //打开中断使能寄存器

writesja1000(MODADDR, 0x08);

   //设置方式寄存器,进入政党操作模式以收发数据

writesja1000()和readsja1000()是封装好的底层函数,其具体实现如下:

static void writesja1000(unsigned char addr, unsigned char data)

{
  *SJAADDR = addr;

  *SJADATA = data;
}

static unsigned char readsja1000(unsigned char addr)

{
  *SJAADDR = addr;

   return *SJADATA;
}

  其中SJADATA、SJAADDR分别是为读/写SJA1000的数据或地址所分配的AT91RM9200地址。

  接收数据和发送数据均采用中断来实现,基于中断的数据处理流程是CAN通讯程序的重点,其具体实现流程如图4所示:

  结束语

  与传统的8/16位单片机测试仪系统相比,本文介绍的测试仪基于32位ARM9处理器,运行速度可高达180MHz,扩展能力强;采用Linux操作系统,软件更加模块化,更新和移植更加方便,运行更稳定;采用虚拟仪器技术实现测试仪的操作面板,便于功能扩展,通用性强。在对汽车CAN节点现场测试时,该测试仪运行稳定快速,保证了该产品的顺利生产。

网友评论:已有2条评论 点击查看
登录 (请登录发言,并遵守相关规定)
如果您对新闻频道有任何意见或建议,请到交流平台反馈。【反馈意见】
关于我们 | 联系我们 | 本站动态 | 广告服务 | 欢迎投稿 | 友情链接 | 法律声明
Copyright (c) 2008-2024 01ea.com.All rights reserved.
电子应用网 京ICP备12009123号-2 京公网安备110105003345号