📄 can._h
字号:
/*can.h 头文件*/
/********************************************************************
* 版本说明:1.0 Bate *
* 作者: andylee *
* 日期: 2006年7月 *
* 平台:mega16 16M *
* 说明: *
********************************************************************/
#ifndef CAN_H
#define CAN_H
#define SJA_PELICAN
//==================================================================
//结构体变量定义
//指示系统状态的位域
struct BIT_FILED
{
unsigned mess_wait : 1; //报文等待发送标志,1为等待
unsigned i_over : 1; //电流采集完成标志,1为完成
unsigned v_over : 1; //电压采集完成标志,1为完成
unsigned ad_mux : 1; //当前AD采集通道,0为0通道,1为1通道
unsigned s_100ms : 1; //
unsigned s_200ms : 1;
unsigned s_300ms : 1;
unsigned s_400ms : 1;
}flag={0,0,0,0,0,0,0,0};
//==================================================================
//电路连接描述
//PA.7-->CS
//PA.6-->RD
//PA.5-->WR
//PA.4-->ALE
//PD.6-->tx_led
//PD.7-->rx_led
#define CAN_PORT PORTA
#define CAN_DDR DDRA
#define WR PA5
#define RD PA6
#define ALE PA4
#define CS PA7
#define WR_H PORTA|=(1<<PA5) //写引脚置高
#define WR_L PORTA&=~(1<<PA5)
#define RD_H PORTA|=(1<<PA6) //读引脚置高
#define RD_L PORTA&=~(1<<PA6)
#define ALE_H PORTA|=(1<<PA4) //地址锁存引脚置高
#define ALE_L PORTA&=~(1<<PA4)
#define CS_H PORTA|=(1<<PA7) //片选引脚置高
#define CS_L PORTA&=~(1<<PA7)
#define tx_led_on PORTD&=~(1<<PD6)
#define tx_led_off PORTD|=(1<<PD6)
#define led_on PORTD&=~(1<<PD7)
#define led_off PORTD|=(1<<PD7)
/******************
*如果是PeliCAN模式*
******************/
#ifdef SJA_PELICAN
//===================================================================
//CAN寄存器地址定义
#define MODE 0x00 //模式寄存器
#define CMR 0x01 //命令寄存器
#define SR 0x02 //状态寄存器
#define IR 0x03 //中断寄存器
#define IER 0x04 //中断使能寄存器
#define BTR0 0x06 //总线时序寄存器0
#define BTR1 0x07 //总线时序寄存器1
#define OCR 0x08 //输出控制寄存器
#define TEST 0x09
#define ALC 0x0B //仲裁丢失捕捉寄存器
#define ECC 0x0C //错误代码捕捉寄存器
#define EWLR 0x0D //错误报警限额寄存器
#define RXERR 0x0E //RX错误计数寄存器
#define TXERR 0x0F //TX错误计数寄存器
#define ACR0 0x10 //验收代码寄存器
#define ACR1 0x11
#define ACR2 0x12
#define ACR3 0x13
#define AMR0 0x14 //验收屏障寄存器
#define AMR1 0x15
#define AMR2 0x16
#define AMR3 0x17
//--------------------------------------------------------------------
#define TXEFF 0x10
#define TXID0 0x11
#define TXID1 0x12
#define TXID2 0x13
#define TXID3 0x14
#define RXEFF 0x10
#define RXID0 0x11
#define RXID1 0x12
#define RXID2 0x13
#define RXID3 0x14
#define TXDATA0 0x15
#define TXDATA1 0x16
#define TXDATA2 0x17
#define TXDATA3 0x18
#define TXDATA4 0x19
#define TXDATA5 0x1A
#define TXDATA6 0x1B
#define TXDATA7 0x1C
#define RXDATA0 0x15
#define RXDATA1 0x16
#define RXDATA2 0x17
#define RXDATA3 0x18
#define RXDATA4 0x19
#define RXDATA5 0x1A
#define RXDATA6 0x1B
#define RXDATA7 0x1C
//-----------------------------------------------------------------
#define RMC 0x1D //RX报文计数器
#define RBSA 0x1E //RX缓冲器起始地址寄存器
#define CDR 0x1F //时钟分频寄存器
//------------------------------------------------------------------
/******************
*如果是BasicCAN模式*
******************/
#elif SJA_BASICCAN
//CAN寄存器地址定义
#define CR 0x00 //控制寄存器
#define CMR 0x01 //命令寄存器
#define SR 0x02 //状态寄存器
#define IR 0x03 //中断寄存器
#define ACR 0x04 //验收代码寄存器
#define AMR0 0x05 //验收屏障寄存器
#define BTR0 0x06 //总线时序寄存器0
#define BTR1 0x07 //总线时序寄存器1
#define OCR 0x08 //输出控制寄存器
#define TEST 0x09
#define TXEFF 0x10
#define TXID0 0x11
#define RXEFF 0x10
#define RXID0 0x11
#define TXDATA0 0x12
#define TXDATA1 0x13
#define TXDATA2 0x14
#define TXDATA3 0x15
#define TXDATA4 0x16
#define TXDATA5 0x17
#define TXDATA6 0x18
#define TXDATA7 0x19
#define RXDATA0 0x12
#define RXDATA1 0x13
#define RXDATA2 0x14
#define RXDATA3 0x15
#define RXDATA4 0x16
#define RXDATA5 0x17
#define RXDATA6 0x18
#define RXDATA7 0x19
#endif
//===================================================================
//CAN控制器SJA1000通讯波特率.SJA1000的晶振为必须为16MHZ
#define BTR0_Rate_20k 0x53 //20KBPS的预设值
#define BTR1_Rate_20k 0x2F //20KBPS的预设值
#define BTR0_Rate_40k 0x87 //40KBPS的预设值
#define BTR1_Rate_40k 0xFF //40KBPS的预设值
#define BTR0_Rate_50k 0x47 //50KBPS的预设值
#define BTR1_Rate_50k 0x2F //50KBPS的预设值
#define BTR0_Rate_80k 0x83 //80KBPS的预设值
#define BTR1_Rate_80k 0xFF //80KBPS的预设值
#define BTR0_Rate_100k 0x43 //100KBPS的预设值
#define BTR1_Rate_100k 0x2f //100KBPS的预设值
#define BTR0_Rate_125k 0x03 //125KBPS的预设值
#define BTR1_Rate_125k 0x1c //125KBPS的预设值
#define BTR0_Rate_200k 0x81 //200KBPS的预设值
#define BTR1_Rate_200k 0xFA //200KBPS的预设值
#define BTR0_Rate_250k 0x01 //250KBPS的预设值
#define BTR1_Rate_250k 0x1c //250KBPS的预设值
#define BTR0_Rate_400k 0x80 //400KBPS的预设值
#define BTR1_Rate_400k 0xfa //400KBPS的预设值
#define BTR0_Rate_500k 0x00 //500KBPS的预设值
#define BTR1_Rate_500k 0x1c //500KBPS的预设值
#define BTR0_Rate_666k 0x80 //666KBPS的预设值
#define BTR1_Rate_666k 0xb6 //666KBPS的预设值
#define BTR0_Rate_800k 0x00 //800KBPS的预设值
#define BTR1_Rate_800k 0x16 //800KBPS的预设值
#define BTR0_Rate_1000k 0x00 //1000KBPS的预设值
#define BTR1_Rate_1000k 0x14 //1000KBPS的预设值
//=================================================================
//功能说明: 定义系统参数
// 本地的IP地址
#define Local_IP0 0x00 // IP地址最高位
#define Local_IP1 0x00
#define Local_IP2 0xF8
#define Local_IP3 0xFF // IP地址最低位
// 本地的CAN标识
#define ACR0_ID Local_IP3 // 滤波器的标识符最高位
#define ACR1_ID Local_IP2
#define ACR2_ID Local_IP1
#define ACR3_ID Local_IP0 // 滤波器的标识符最低位
#define AMR0_ID 0xFF // 滤波器的屏蔽符最高位
#define AMR1_ID 0xFF
#define AMR2_ID 0xFF
#define AMR3_ID 0xFF // 滤波器的屏蔽符最低位
// 发往目标CAN标识
#define SEND_ACR0_FID Local_IP3 // 滤波器的最高位
#define SEND_ACR1_FID Local_IP2
#define SEND_ACR2_FID Local_IP1
#define SEND_ACR3_FID Local_IP0 // 滤波器的最低位
// 模式参数
//#define REG_MODE_DATA 0x0C // 模式控制器: 自检测模式
#define REG_MODE_DATA 0x08 // 模式控制器: 单滤波器
//#define REG_MODE_DATA 0x02 // 模式控制器: 只听模式
#define REG_TEST_DATA 0xAA // 测试值
//#define REG_CDR_DATA 0xC8 // 时分控制的值: PeilCAN模式、CLOCK无效、旁路输入比较器
#define REG_CDR_DATA 0x88 // 时分控制的值: PeilCAN模式、CLOCK无效
#define REG_IER_DATA 0x81 // 中断使能控制的值: 接收中断
//#define REG_IER_DATA 0x83 // 中断使能控制的值: 总线错误中断、发送中断、接收中断 //
//#define REG_IER_DATA 0xFF //总线错误.7,仲裁丢失.6,错误认可.5,唤醒中断.4
//溢出.3,出错报警.2,发送中断.1,接受中断.0。
#define REG_OCR_DATA 0x1A // 输出控制的值:
//#define REG_OCR_DATA 0xAA // 输出控制的值:
// 定义命令字
#define TXD_ONE_CMD 0x03 // 产生一次报文发送,当错误时不再重发(单次发送)
#define TXD_CMD 0x01 // 发送请求命令,当错误时可重发
#define T_R_CMD 0x12 // 产生一次自接收性质的报文发送,发送错误时不会重发
#define AT_CMD 0x02 // 中止发送命令
#define RRB_CMD 0x04 // 释放接收缓冲区
#define COS_CMD 0x08 // 数据溢出清除命令
//==================================================================
//函数声明
void sja_port_init(void);
void sja_write_data(unsigned char addr,unsigned char data);
unsigned char sja_read_data(unsigned char addr);
void sja_init(void);
void sja_tx_service(void);
void sja_tx(unsigned char *TransmitMessage);
void CanTransmit(void);
void sja_rx_service(void);
void play_buffer(unsigned char *ptr);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -