?? can.c
字號(hào):
// CAN操作程序
// 總線頻率:8M
// 作者:文洪奎
// 日期:2005-7-20
// CAN總線頻率:125kHz
#include "MC68HC908GZ32.h"
#include "CAN.h"
#include "main.h"
#include "sci.h"
// CMCR
char bCANState;
volatile CANSTATESTR _CANSTATE;
extern unsigned char cSCITraBuf[SCIMAXLENGTH]; //發(fā)送緩沖區(qū),把要發(fā)送的數(shù)據(jù)存在這里
extern unsigned char cSCITraLen;
void InitCAN(void)
{
LED3 = 1;
CONFIG2_MSCANEN = 1;
// 7 6 5 4 3 2 1 0
CMCR0_SFTRES = 0x001; // 0 0 0 SYNCH TLNKEN SLPAK SLPRQ SFTRES
// 0 0 0 0 0 0 0 1
//軟復(fù)位
while(!CMCR0_SFTRES); //等待進(jìn)入復(fù)位狀態(tài)
// 7 6 5 4 3 2 1 0
CMCR1 = 0x001; // - - - - - LOOPB WUPM CLKSRC
// 0 0 0 0 0 0 0 1
CBTR0 = 0x0BF; // SJW1 SJW0 BRP5 BRP4 BRP3 BRP2 BRP1 BRP0
// 1 0 1 1 1 1 1 1
CBTR1 = 0x0B9; // SAMP TSEG22 TSEG21 TSEG20 TSEG13 TSEG12 TSEG11 TSEG10
// 0 0 1 1 1 0 0 1
CIDAC = 0x000; // - - IDAM1 IDAM0 - - IDHIT1 IDHIT0
// 0 0 0 0 0 0 0 0
CIDMR0 = 0x0FF; //Identifier Mask Registers
CIDMR1 = 0x0FF;
CIDMR2 = 0x0FF;
CIDMR3 = 0x0FF; //Set up Module to receive all messages
CIDAR0 = 0x000; //Identifier Acceptance Registers
CIDAR1 = 0x000;
CIDAR2 = 0x000;
CIDAR3 = 0x000;
/*
CMCR0 = 0x000; //MSCAN08 正常.
while(!CMCR0_SYNCH); //等待同步
CRIER = 0x000; //
*/
}
//喚醒
void __interrupt CanWakeupisr(void)
{
}
//錯(cuò)誤
void __interrupt CanErrorisr(void)
{
//接收警告中斷
if(CRFLG_RWRNIF)
{
}
//發(fā)送警告中斷
if(CRFLG_TWRNIF)
{
}
//接收器出錯(cuò)被動(dòng)中斷
if(CRFLG_RERRIF)
{
}
//發(fā)送器出錯(cuò)被動(dòng)中斷標(biāo)志
if(CRFLG_TERRIF)
{
}
//脫離總線中斷標(biāo)志
if(CRFLG_BOFFIF)
{
}
//溢出中斷標(biāo)志
if(CRFLG_OVRIF)
{
}
}
//接收
void __interrupt Receiveisr(void)
{
CRFLG = 0x0FF; //清標(biāo)志
CANState_RecFull = 1; //數(shù)據(jù)已經(jīng)到達(dá)
LED3 = 1;
}
//發(fā)送
void __interrupt Transmit(void) //The transmit buffer is empty
{
CANState_TranEmpty = 1;
LED3 = 0;
}
void CanSendMsg(char *pMsg,char nLen)
{
if(nLen > 8 + 4)
return;
if(cSCIRecLen > 13 || cSCIRecLen < 3)
return;
while(!CTFLG_TXE0) //只用TXE0
TB0IDR0 = pMsg[0];
TB0IDR1 = pMsg[1];
TB0IDR2 = pMsg[2];
TB0IDR3 = pMsg[3];
TB0DSR0 = pMsg[4];
TB0DSR1 = pMsg[5];
TB0DSR2 = pMsg[6];
TB0DSR3 = pMsg[7];
TB0DSR4 = pMsg[8];
TB0DSR5 = pMsg[9];
TB0DSR6 = pMsg[10];
TB0DSR7 = pMsg[11];
TB0DLR = nLen - 4; /* Data Length Register for transmit buffer 1 */
CTFLG = 0x01; //開始發(fā)送
return;
}
void SaftTest(void)
{
CMCR0_SFTRES = 1; //進(jìn)入自檢測(cè)模式
CMCR0_SFTRES = 0; //退出自檢測(cè)模式
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -