⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can._h

📁 AT90CAN128的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 + -