📄 sja_basiccan.c
字号:
//----------------------------------------------------------------------
// FileName : SJA_BasicCan.c
// Description: BasicCan 功能实现文件
// DateTime : 2005-08-31 Create
// Author : jztx-liuweiming
// Version : TxCmsPrj Ver1.0
//----------------------------------------------------------------------
// SJA1000, 16M晶振 BasicCan模式, 2005年8月31日调试完成, 参考周立功源代码
// 锦州拓新电力电子公司 刘伟明
//----------------------------------------------------------------------
/************************************************************************
**描述: 独立的CAN 控制器SJA1000基本硬件头文件定义(BasicCAN 工作方式)
**文件名: SJA_BcanFunc.H
**应用语言: KEIL C51
**版本 : V1.0
**广州周立功单片机发展有限公司 保留所有的版权
*************************************************************************/
#include "SJA_BasicCan.H"
#include <string.h>
/************************************************************************
*以下为基本的函数说明(BasicCAN) *
************************************************************************/
/************************************************************************
*函数原型: bit BCan_SelfTest(void) *
*参数说明: 无 *
*返回值: *
* 0 ; 表示SJA1000接口正常 *
* 1 ; 表示SJA1000与处理器接口不正常 *
* *
*说明: 该函数用于检测CAN控制器的接口是否正常 *
************************************************************************/
bit BCan_SelfTest(void)
{
Sja_BasicCan = REG_TEST; //访问测试寄存器
*Sja_BasicCan = 0xAA; //写入测试值
if ( *Sja_BasicCan == 0xAA )
{
return 0; //读测试正确
}
else
{
return 1;
}
}
/************************************************************************
*函数原型: bit BCan_Enter_RstModel(void) *
*参数说明: 无 *
*返回值: *
* 0 ; 表示成功进入复位工作模式 *
* 1 ; 表示不能进入复位工作模式 *
* *
*说明: CAN控制器进入复位工作模式 *
************************************************************************/
bit BCan_Enter_RstModel(void)
{
unsigned char TempData;
Sja_BasicCan = REG_CONTROL; //访问地址指向控制寄存器
TempData = *Sja_BasicCan; //保存原始值
*Sja_BasicCan = (TempData | 0x01); //置位复位请求
if ( (*Sja_BasicCan&0x01) == 1 )
{
return 0;
}
else
{
return 1;
}
}
/************************************************************************
*函数原型: bit BCan_Quit_RstModel(void) *
*参数说明: 无 *
*返回值: *
* 0 ; 表示成功退出复位工作模式 *
* 1 ; 表示不能退出复位工作模式 *
* *
*说明: CAN控制器退出复位工作模式 *
************************************************************************/
bit BCan_Quit_RstModel(void)
{
unsigned char TempData;
Sja_BasicCan = REG_CONTROL; //访问地址指向控制寄存器
TempData = *Sja_BasicCan; //保存原始值
*Sja_BasicCan = (TempData & 0xfe); //清除复位请求
if ( (*Sja_BasicCan&0x01) == 0 )
{
return 0; //退出成功
}
else
{
return 1; //退出失败
}
}
/************************************************************************
;*函数原型: bit BCan_Set_BandRateE(unsigned char CAN_ByteRate) *
;*参数说明: CAN_ByteRate 波特率(Kbit/s) BTR0 BTR1 *
;* 0 20 053H, 02FH *
;* 1 40 087H, 0FFH *
;* 2 50 047H, 02FH *
;* 3 80 083H, 0FFH *
;* 4 100 043H, 02fH *
;* 5 125 03H, 01cH *
;* 6 200 081H, 0faH *
;* 7 250 01H, 01cH *
;* 8 400 080H, 0faH *
;* 9 500 00H, 01cH *
;* 10 666 080H, 0b6H *
;* 11 800 00H, 016H *
;* 12 1000 00H, 014H *
;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为16MHZ, *
/////////////////////////////////////////////////////////////////////////
;*参数说明: CAN_ByteRate 波特率(Kbit/s) BTR0 BTR1 *
;* 0 5 0EFH 0FFH *
;* 1 10 0D7H 0FFH *
;* 2 20 0CBH 0FFH *
;* 3 40 0C5H 0FFH *
;* 4 50 0C9H 0A7H *
;* 5 80 0C2H 0FFH *
;* 6 100 04H 0A7H *
;* 7 200 02H 025H *
;* 8 250 01H 045H *
;* 9 300 01H 025H *
;* 10 500 01H 012H *
;* 11 600 00H 025H *
;* 12 1000 00H 012H *
;* *
;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为12MHZ, *
/////////////////////////////////////////////////////////////////////////
;*返回值: *
;* 0 ;波特率设置成功 *
;* 1 ;波特率设置失败 *
;* *
;*说明:其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于 *
;* 复位模式 *
;************************************************************************/
unsigned char code SJA_BTR_CODETAB[]={
0x53,0x2F, //;(晶振16MHZ) 20KBPS的预设值
0x87,0xFF, //;(晶振16MHZ) 40KBPS的预设值
0x47,0x2F, //;(晶振16MHZ) 50KBPS的预设值
0x83,0xFF, //;(晶振16MHZ) 80KBPS的预设值
0x43,0x2f, //;(晶振16MHZ) 100KBPS的预设值
0x03,0x1c, //;(晶振16MHZ) 125KBPS的预设值
0x81,0xfa, //;(晶振16MHZ) 200KBPS的预设值
0x01,0x1c, //;(晶振16MHZ) 250KBPS的预设值
0x80,0xfa, //;(晶振16MHZ) 400KBPS的预设值
0x00,0x1c, //;(晶振16MHZ) 500KBPS的预设值
0x80,0xb6, //;(晶振16MHZ) 666KBPS的预设值
0x00,0x16, //;(晶振16MHZ) 800KBPS的预设值
0x00,0x14 //;(晶振16MHZ) 1000KBPS的预设值
};
bit BCan_Set_BandRate(unsigned char CAN_ByteRate)
{
//载入标准波特率的的预设值
unsigned char BTR0_num, BTR1_num;
BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2 + 1];
Sja_BasicCan = REG_BTR0; //访问地址指向总线定时寄存器0
*Sja_BasicCan = BTR0_num; //写入参数
if ( *Sja_BasicCan != BTR0_num ) //校验写入值
{
return 1;
}
Sja_BasicCan = REG_BTR1; //访问地址指向总线定时寄存器0
*Sja_BasicCan = BTR1_num; //写入参数
if ( *Sja_BasicCan != BTR1_num ) //校验写入值
{
return 1;
}
return 0;
}
/************************************************************************
;*函数原型: bit BCan_Set_Object(unsigned char BCAN_ACR, *
unsigned char BCAN_AMR) *
*参数说明: *
* BCAN_ACR:存放验收代码寄存器(ACR)的参数设置 *
* BCAN_AMR:存放接收屏蔽寄存器(AMR)的参数设置 *
;*返回值: *
;* 0 ;通信对象设置成功 *
;* 1 ;通信对象设置失败 *
;* *
;*说明:设置CAN节点的通讯对象,允许接收的报文ID号的高8位(D10--D3) 。 *
;* 允许接收的报文,是由AMR和ACR共同决定的. *
;* 满足以下条件的ID号的报文才可以被接收 *
;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111 *
;* 该子程序只能用于复位模式 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -