CAN总线的实现-SJA1000实例_第1页
CAN总线的实现-SJA1000实例_第2页
CAN总线的实现-SJA1000实例_第3页
CAN总线的实现-SJA1000实例_第4页
CAN总线的实现-SJA1000实例_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.一、以下是我制作的CAN节点的测试程序,两个节点传送数据,程序主要实现三个部分SJA1000的初始化、数据的接收、数据的发送。/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数的原型: bit Sja_1000_Init(void )*功能:初始化SJA10000*无入口参数:*返回值:0 :初始化成功1 :复位失败2:sja1000测试失败3 :设定失败4 :检查过滤器的设定失败5 :波特率设定失败* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *unsigned char Sja_1000_Init(void )装模作样比特s;EA=0;s=BCAN_ENTER_RETMODEL ()if (s=1) return 1;s=BCAN_CREATE_COMMUNATION ()if (s=1) return 2;s=bcan _ set _ out clk (0xc0)/pelicanif (s=1) return 3;s=BCAN_SET_OBJECT(0xFF,0x4E,0 x 16,0 x 00,0 x ff,0 x 00,0 x 00 );if (s=1) return 4;s=BCAN_SET_BANDRATE(CAN_BPS_1M )if (s=1) return 5;SJA_BCANAdr=REG_OCR;*SJA_BCANAdr=0x1a;SJA_BCANAdr=REG_IER;*SJA_BCANAdr=0x03;s=BCAN_SET_CONTROL(0x08 )if (s=1) return 6;EA=1;return 0;以下称为以下称为/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数原型: bitbcan _ set _ out clk (unsignedcharclock _ out ) *参数说明: *保存* Clock_Out:时钟分频寄存器(CDR )的参数设定*返回值: * 0; 设定成功* 1; 设定失败*说明设定*:sja1000的时钟分频。 此子程序仅在复位模式下可用* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *bitbcan _ set _ out clk (unsignedcharclock _ out )装模作样SJA_BCANAdr=REG_CDR;*SJA_BCANAdr=Clock_Out;if(*SJA_BCANAdr!=Clock_Out )return 1;elsereturn 0;以下称为/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数的原型: bitbcan _ set _ object (unsignedcharbcan _ AC r0,BCAN_ACR1,BCAN_ACR2,BCAN_ACR3,BCAN_AMR0,BCAN_AMR1,BCAN_AMR2,BCAN_AMR3)*参数说明: * BCAN_ACR(0-3):检测代码寄存器(ACR )的参数设定* BCAN_AMR(0-3):存储接收掩码寄存器(AMR )的参数设置*返回值: * 0; 设定成功* 1; 设定失败*说明设置:can节点的通信对方,允许接收的消息由AMR和ACR共同决定. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。bitbcan _ set _ object (unsignedcharbcan _ ACR 0、BCAN_ACR1、BCAN_ACR2、BCAN_ACR3、BCAN_AMR0、BCAN_AMR1、BCAN_AMR2和BCAN_AMR3)装模作样sja _ bcanadr=reg _ tx缓冲器1;*SJA_BCANAdr=BCAN_ACR0; /写入参数sja _ bcanadr=reg _ tx缓冲器2;*SJA_BCANAdr=BCAN_ACR1;sja _ bcanadr=reg _ tx缓冲器3;*SJA_BCANAdr=BCAN_ACR2;sja _ bcanadr=reg _ tx缓冲器4;*SJA_BCANAdr=BCAN_ACR3;/检查写入值if(*SJA_BCANAdr!=bcan _ ACR3)返回1;sja _ bcanadr=reg _ tx缓冲器5;*SJA_BCANAdr=BCAN_AMR0; /写入参数sja _ bcanadr=reg _ tx缓冲器6;*SJA_BCANAdr=BCAN_AMR1;sja _ bcanadr=reg _ tx缓冲器7;*SJA_BCANAdr=BCAN_AMR2;sja _ bcanadr=reg _ tx缓冲器8;*SJA_BCANAdr=BCAN_AMR3;/检查写入值if(*SJA_BCANAdr!=BCAN_AMR3) return 1;return 0;以下称为/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数的原型: bitbcan _ set _ band rate (unsignedcharcan _ by tate ) *返回值: * 0; 波特率设置成功* 1; 波特率设置失败* *设定 *:can控制器SJA1000通信波特率。 SJA1000的石英振动必须是16MHz其他晶体频率值的波特率,必须自己计算。 此子程序是*复位模式* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * bitbcan _ set _ band rate (unsignedintcan _ by tate )装模作样/将波特率的默认值嵌入sja1000的总线计时器中SJA_BCANAdr=REG_BTR0;*SJA_BCANAdr=CAN_ByteRate8;/取/can_bytate的高位8位写入参数/检查写入值if(*SJA_BCANAdr!=(can_bytate8)return1;SJA_BCANAdr=REG_BTR1;*SJA_BCANAdr=CAN_ByteRate;/检查写入值if(*SJA_BCANAdr!=CAN_ByteRate) return 1;return 0;以下称为/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数原型: bitbcan _ set _ control (unsigendcharcmd ) *参数说明:控制寄存器的设定* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *bitbcan _ set _ control (unsignedcharcmd )装模作样无标题缓冲器模板;SJA_BCANAdr=REG_CONTROL; /SJA_BaseAdr0x00控制寄存器TempData=*SJA_BCANAdr;*SJA_BCANAdr=CMD;if (*SJA_BCANAdr=CMD )return 0;elsereturn 1;以下称为/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数的原型: bitbcan _ create _ commun ation (void ) *无参数说明:*返回值: * 0; 表示SJA1000接口正常* 1; 表示SJA1000和处理器接口不正常*用于检测:can控制器接口是否正常的函数* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *bitbcan _ create _ communi ation (void )装模作样SJA_BCANAdr=REG_TEST;*SJA_BCANAdr=0xaa; /写入测试值if(*SJA_BCANAdr=0xaa )return 0; /读取测试正确elsereturn 1;以下称为/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数的原型: bitbcan _ enter _ ret model (void ) *无参数说明:*返回值: * 0; 表示复位动作模式成功* 1; 表示无法进入复位动作模式* *说明: CAN控制器进入复位动作模式* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *bit BCAN_ENTER_RETMODEL(void) /位置复位请求装模作样无标题缓冲器模板;SJA_BCANAdr=REG_CONTROL;TempData=*SJA_BCANAdr;*SJA_BCANAdr=0x01; /复位请求if(*SJA_BCANAdr0x01)=1)return 0;elsereturn 1;以下称为/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数的原型: voie xx0_ int (void ) interrupt0/using 1*功能:中断接收函数*无入口参数:*出口参数: RevceData阵列* *说明当*:sja1000接收到正确的消息时会发生int中断* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *voie xx0_ int (void ) interrupt0/using 1装模作样unsigned char tt;SJA_BCANAdr=REG_INTERRUPT;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论