?? sja_bcanfunc.c
字號:
}
SJA_BCANAdr=REG_BTR1; //訪問地址指向總線定時寄存器0
*SJA_BCANAdr=BTR1_num; //寫入?yún)?shù)
if(*SJA_BCANAdr != BTR1_num) //校驗寫入值
{
return 1;
}
return 0;
}
/************************************************************************
;*函數(shù)原型: BCAN_SET_OBJECT *
*參數(shù)說明: *
* BCAN_ACR:存放驗收代碼寄存器(ACR)的參數(shù)設(shè)置 *
* BCAN_AMR:存放接收屏蔽寄存器(AMR)的參數(shù)設(shè)置 *
;*返回值: *
;* 0 ;通信對象設(shè)置成功 *
;* 1 ;通信對象設(shè)置失敗 *
;* *
;*說明:設(shè)置CAN節(jié)點的通訊對象,允許接收的報文ID號的高8位(D10--D3) 。 *
;* 允許接收的報文,是由AMR和ACR共同決定的. *
;* 滿足以下條件的ID號的報文才可以被接收 *
;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111 *
;* 該子程序只能用于復(fù)位模式 * *
;************************************************************************/
bit BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR)
{
SJA_BCANAdr=REG_ACR; //訪問地址指向驗收代碼寄存器(ACR)
*SJA_BCANAdr=BCAN_ACR; //寫入?yún)?shù)
if(*SJA_BCANAdr != BCAN_ACR) //校驗寫入值
{
return 1;
}
SJA_BCANAdr=REG_AMR; //訪問地址指向驗收屏蔽寄存器(AMR)
*SJA_BCANAdr=BCAN_AMR; //寫入?yún)?shù)
if(*SJA_BCANAdr != BCAN_AMR) //校驗寫入值
{
return 1;
}
return 0;
}
/************************************************************************
;*函數(shù)原型: bit BCAN_SET_OUTCLK (unsigned char Out_Control, *
unsigned char Clock_Out); *
;*參數(shù)說明: *
* Out_Control:存放輸出控制寄存器 (OC) 的參數(shù)設(shè)置 *
* Clock_Out:存放時鐘分頻寄存器 (CDR) 的參數(shù)設(shè)置 *
* *
;*返回值: *
;* 0 ;設(shè)置成功 *
;* 1 ;設(shè)置失敗 *
;* *
;*說明:設(shè)置SJA1000的輸出模式和時鐘分頻 。該子程序只能用于復(fù)位模式 * *
;************************************************************************/
bit BCAN_SET_OUTCLK (unsigned char Out_Control,
unsigned char Clock_Out)
{
SJA_BCANAdr=REG_OCR ; //訪問地址指向輸出控制寄存器
*SJA_BCANAdr=Out_Control; //寫入?yún)?shù)
if(*SJA_BCANAdr != Out_Control) //校驗寫入值
{
return 1;
}
SJA_BCANAdr=REG_CDR; //訪問地址指向輸出控制寄存器
*SJA_BCANAdr=Clock_Out; //寫入?yún)?shù)
return 0;
}
/************************************************************************
*函數(shù)原型: 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 *
* ) *
*參數(shù)說明: *
* BCAN_ACR:存放驗收代碼寄存器(ACR)的參數(shù)設(shè)置 *
* BCAN_AMR:存放接收屏蔽寄存器(AMR)的參數(shù)設(shè)置 *
* Bus_Timing0:存放總線定時0寄存器(BTR0)的參數(shù)設(shè)置 *
* Bus_Timing1:存放總線定時1寄存器(BTR1)的參數(shù)設(shè)置 *
* Out_Control:存放輸出控制寄存器 (OC) 的參數(shù)設(shè)置 *
* Clock_Out:存放時鐘分頻寄存器 (CDR) 的參數(shù)設(shè)置 *
* *
*返回值: *
* 0 ; 表示初始化成功 *
* 1 ; 表示初始化失敗 *
* *
*說明:CAN控制器的初始化只能在復(fù)位模式下才能完成。初始化操作之前請先進(jìn)入*
* 到復(fù)位操作模式,并將要初始化的各參數(shù)的值按數(shù)據(jù)手冊中的計算方法,正 *
* 確的按實際需要計算好參數(shù)后,將參數(shù)寫入對應(yīng)的寄存器 。 *
*注: 為了CAN控制器的正確運行,請務(wù)必仔細(xì)的閱讀SJA1000的數(shù)據(jù)手冊 *
* *
*示例:設(shè)應(yīng)用系統(tǒng)中晶體頻率16MHZ,節(jié)點只接收ID(標(biāo)志符)高八位為 *
* '10101010'的消息,系統(tǒng)波特率為50Kbit/s,關(guān)閉CLKOUT輸出。 *
* 則根據(jù)數(shù)據(jù)手冊中的計算方法的各參數(shù)如下: *
* ACR==0AAH,AMR==00H,BTR0==0C9H,BTR1==0C9H,OC==0FFH,CDR=48H *
* 則調(diào)用本函數(shù)為: *
* BCAN_HW_INIT(0xaa,0x00,0xc9,0xc9,0xff,0x48) *
************************************************************************
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
)
{
SJA_BCANAdr=REG_ACR; //訪問地址指向驗收代碼寄存器(ACR)
*SJA_BCANAdr=BCAN_ACR; //寫入?yún)?shù)
if(*SJA_BCANAdr != BCAN_ACR) //校驗寫入值
{
return 1;
}
SJA_BCANAdr=REG_AMR; //訪問地址指向驗收屏蔽寄存器(AMR)
*SJA_BCANAdr=BCAN_AMR; //寫入?yún)?shù)
if(*SJA_BCANAdr != BCAN_AMR) //校驗寫入值
{
return 1;
}
SJA_BCANAdr=REG_BTR0; //訪問地址指向總線定時寄存器0
*SJA_BCANAdr=Bus_Timing0; //寫入?yún)?shù)
if(*SJA_BCANAdr != Bus_Timing0)//校驗寫入值
{
return 1;
}
SJA_BCANAdr=REG_BTR1; //訪問地址指向總線定時寄存器0
*SJA_BCANAdr=Bus_Timing1; //寫入?yún)?shù)
if(*SJA_BCANAdr != Bus_Timing1)//校驗寫入值
{
return 1;
}
SJA_BCANAdr=REG_OCR ; //訪問地址指向輸出控制寄存器
*SJA_BCANAdr=Out_Control; //寫入?yún)?shù)
if(*SJA_BCANAdr != Out_Control)//校驗寫入值
{
return 1;
}
SJA_BCANAdr=REG_CDR; //訪問地址指向輸出控制寄存器
*SJA_BCANAdr=Clock_Out; //寫入?yún)?shù)
return 0;
}
/************************************************************************
*函數(shù)原型: bit BCAN_DATA_WRITE(unsigned char *SendDataBuf)*
*參數(shù)說明: 特定幀各式的數(shù)據(jù)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -