📄 sjabca~3.c
字号:
/*
********************************************************************************************************************
**描述: 独立的CAN 控制器SJA1000应用函数实现,用户可自由修改
**文件名: SJABcanOS.c
**应用语言: KEIL C51
**版本 : V1.0
**广州周立功单片机发展有限公司 保留所有的版权
********************************************************************************************************************
*/
#define _SJABCANOS_GLOBAL_
/*
************************************************************************************************************************
** 导入头文件
************************************************************************************************************************
*/
#include "includes.H"
/*
***********************************************************************
*以下为应用函数实现源代码 *
***********************************************************************
*/
/*
***********************************************************************
*函数原型: bit BCAN_HW_INIT(unsigned char BCAN_ACR, *
* unsigned char BCAN_AMR, *
* unsigned char Bus_Timing0, *
* unsigned char Bus_Timing1, *
* unsigned char Out_Control, *
* unsigned char Clock_Out *
* ) *
*参数说明: *
* BCAN_ACR:存放验收代码寄存器(ACR)的参数设置 *
* BCAN_AMR:存放接收屏蔽寄存器(AMR)的参数设置 *
* Bus_Timing0:存放总线定时0寄存器(BTR0)的参数设置 *
* Bus_Timing1:存放总线定时1寄存器(BTR1)的参数设置 *
* Out_Control:存放输出控制寄存器 (OC) 的参数设置 *
* Clock_Out:存放时钟分频寄存器 (CDR) 的参数设置 *
* *
*返回值: *
* 0 ; 表示初始化成功 *
* 1 ; 表示初始化失败 *
* *
*说明:CAN控制器的初始化只能在复位模式下才能完成。初始化操作之前请先进入*
* 到复位操作模式,并将要初始化的各参数的值按数据手册中的计算方法,正 *
* 确的按实际需要计算好参数后,将参数写入对应的寄存器 。 *
*注: 为了CAN控制器的正确运行,请务必仔细的阅读SJA1000的数据手册 *
* *
*示例:设应用系统中晶体频率16MHZ,节点只接收ID(标志符)高八位为 *
* '10101010'的消息,系统波特率为50Kbit/s,关闭CLKOUT输出。 *
* 则根据数据手册中的计算方法的各参数如下: *
* ACR==0AAH,AMR==00H,BTR0==0C9H,BTR1==0C9H,OC==0FFH,CDR=48H *
* 则调用本函数为: *
* BCAN_HW_INIT(0xaa,0x00,0xc9,0xc9,0xff,0x48) *
***********************************************************************
*/
bit BCAN_HW_INIT(unsigned char BCAN_ACR,
unsigned char BCAN_AMR,
unsigned char BandRate,
unsigned char Out_Control,
unsigned char Clock_Out
)
{
bit Flag =1;
if(BCAN_CREATE_COMMUNATION() != 0)
{
return Flag;
}
if(BCAN_ENTRY_RETMODEL() != 0)
{
return Flag;
}
if(BCAN_SET_OBJECT(BCAN_ACR,BCAN_AMR)!=0)
{
return Flag;
}
if(BCAN_SET_BANDRATE(BandRate) !=0)
{
return Flag;
}
if(BCAN_SET_OUTCLK(Out_Control,Clock_Out) !=0)
{
return Flag;
}
if(BCAN_QUIT_RETMODEL() !=0)
{
return Flag;
}
Flag=0;
return Flag;
}
/*
************************************************************************************************************************
**函数原型: void SJASendData(unsigned char *databuf,
** unsigned char cmd
** )
**参数说明: databuf 存放要发送到总线的特定帧格式的数据的缓冲区首地址
** cmd 发送命令
**返回值:
**说明: 本函数用于向can总线发送数据
************************************************************************************************************************
*/
void SJASendData(unsigned char *databuf,
unsigned char cmd
)
{
if(BCAN_DATA_WRITE(databuf) == 0)
{
BCAN_CMD_PRG(cmd);
}
}
/*
************************************************************************************************************************
**函数原型: void SJARcvData(unsigned char *databuf)
**参数说明: databuf 存放要接收数据缓冲区首地址
**
**返回值:
**说明: 本函数用于接收can总线数据
************************************************************************************************************************
*/
unsigned char SJARcvData(unsigned char *databuf)
{
if(BCAN_DATA_RECEIVE(databuf) == 0)
{
BCAN_CMD_PRG(RRB_CMD);
return 0;
}
else
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -