?? 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 + -