CAN总线的实现-SJA1000实例 .

上传人:Si****n 文档编号:145090131 上传时间:2020-09-16 格式:DOCX 页数:11 大小:72.01KB
返回 下载 相关 举报
CAN总线的实现-SJA1000实例 ._第1页
第1页 / 共11页
CAN总线的实现-SJA1000实例 ._第2页
第2页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《CAN总线的实现-SJA1000实例 .》由会员分享,可在线阅读,更多相关《CAN总线的实现-SJA1000实例 .(11页珍藏版)》请在金锄头文库上搜索。

1、一、以下是我做的CAN节点的测试程序, 实现两个节点传送数据,程序主要分三部分 SJA1000 的初始化,接收数据,发送数据. /*函数原型: bit Sja_1000_Init(void)*功 能: 初始化SJA10000*入口参数: 无 *返 回 值: 0: 初始化成功 1: 复位失败 2: 测试sja1000失败 3: 设置失败 4: 设置验收滤波器失败 5: 设置波特率失败 */unsigned char Sja_1000_Init(void) bit s;EA=0; s=BCAN_ENTER_RETMODEL();if (s=1) return 1; s=BCAN_CREATE_CO

2、MMUNATION(); if (s=1) return 2;s=BCAN_SET_OUTCLK(0xc0);/Pelicanif (s=1) return 3;s=BCAN_SET_OBJECT(0xFF,0x4E,0x16,0x00,0xff,0x00,0x00,0x00);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_

3、CONTROL(0x08);if (s=1) return 6;EA=1;return 0; /*函数原型: bit BCAN_SET_OUTCLK( unsigned char Clock_Out) *参数说明: * Clock_Out:存放时钟分频寄存器(CDR)的参数设置 *返回值: * 0 ;设置成功 * 1 ;设置失败 *说明:设置SJA1000的时钟分频 。该子程序只能用于复位模式 */bit BCAN_SET_OUTCLK(unsigned char Clock_Out) SJA_BCANAdr=REG_CDR; *SJA_BCANAdr=Clock_Out; if(*SJA_B

4、CANAdr != Clock_Out) return 1; else return 0; /*函数原型: bit BCAN_SET_OBJECT(unsigned char BCAN_ACR0,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节点的通讯对象,允许接收的报

5、文,是由AMR和ACR共同决定的. */bit BCAN_SET_OBJECT(unsigned char BCAN_ACR0,BCAN_ACR1,BCAN_ACR2,BCAN_ACR3,BCAN_AMR0,BCAN_AMR1,BCAN_AMR2,BCAN_AMR3) SJA_BCANAdr=REG_TxBuffer1; *SJA_BCANAdr=BCAN_ACR0; /写入参数 SJA_BCANAdr=REG_TxBuffer2; *SJA_BCANAdr=BCAN_ACR1; SJA_BCANAdr=REG_TxBuffer3; *SJA_BCANAdr=BCAN_ACR2; SJA_BC

6、ANAdr=REG_TxBuffer4; *SJA_BCANAdr=BCAN_ACR3; /校验写入值 if(*SJA_BCANAdr != BCAN_ACR3) return 1; SJA_BCANAdr=REG_TxBuffer5; *SJA_BCANAdr=BCAN_AMR0; /写入参数 SJA_BCANAdr=REG_TxBuffer6; *SJA_BCANAdr=BCAN_AMR1; SJA_BCANAdr=REG_TxBuffer7; *SJA_BCANAdr=BCAN_AMR2; SJA_BCANAdr=REG_TxBuffer8; *SJA_BCANAdr=BCAN_AMR3

7、; /校验写入值 if(*SJA_BCANAdr != BCAN_AMR3) return 1; return 0; /*;*函数原型: bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) *;*返回值: *;* 0 ;波特率设置成功 *;* 1 ;波特率设置失败 *;* * ;*说明:设置CAN控制器SJA1000通讯波特率.SJA1000的晶振必须为16MHz, *;* 其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于 *;* 复位模式 * ;*/ bit BCAN_SET_BANDRATE(unsigned int CAN_Byt

8、eRate) /将波特率的的预设值装入sja1000的总线定时器 SJA_BCANAdr =REG_BTR0; *SJA_BCANAdr =CAN_ByteRate8; / 取CAN_ByteRate的高8位写入 写入参数 /校验写入值if(*SJA_BCANAdr !=(CAN_ByteRate8) return 1; SJA_BCANAdr=REG_BTR1; *SJA_BCANAdr=CAN_ByteRate; /校验写入值 if(*SJA_BCANAdr !=CAN_ByteRate) return 1; return 0; /*函数原型: bit BCAN_SET_CONTROL(unsigend char CMD) *参数说明: 设置控制寄存器 */bit BCAN_SET_CONTROL(unsigned char CMD) unsigned char TempData; SJA_BCANAdr=REG_CONTROL; /SJA_BaseAdr+0x00 控制寄存器 TempData= *SJA_BCANAdr; *SJA_BCANAdr=CMD; if (*SJA_BCANAdr = CMD) return 0;else return 1;/*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号