sja1000 中断_SJA1000程序
給你提供一些思路
1、sja1000初始化
2、發(fā)送子程序
3、中斷方式接收
下面是一些程序段
你參考下(已用于產(chǎn)品)
/**********SJA1000初始化***********//
void Init_SJA1000(void)
{
uchar state;
uchar ACRR[4]={0XAA,0XFF,0X22,0X11};// 接收代碼寄存器
uchar AMRR[4]={0xff,0xff,0xff,0xff};// 接收屏蔽寄存器
//uchar AMRR[4]={0x00,0x00,0xff,0xff};// 接收屏蔽寄存器
do// 使用do--while語(yǔ)句確保進(jìn)入復(fù)位模式
{
MODR = 0x09; // 設(shè)置MOD.0=1--進(jìn)入復(fù)位模式,以便設(shè)置相應(yīng)的寄存器
state = MODR;
}
while( !(state & 0x01) );
// 對(duì)SJA1000部分寄存器進(jìn)行初始化設(shè)置
CDR = 0x88; // CDR為時(shí)鐘分頻器,CDR.3=1--時(shí)鐘關(guān)閉, CDR.7=0---basic CAN, CDR.7=1---Peli CAN
BTR0 = 0x04;//0x31; // 總線定時(shí)寄存器0 ;總線波特率設(shè)定
BTR1 = 0x1c;//0x1c; // 總線定時(shí)寄存器1 ;總線波特率設(shè)定
IER = 0x01; // IER.0=1--接收中斷使能; IER.1=0--關(guān)閉發(fā)送中斷使能
OCR = 0xaa; // 配置輸出控制寄存器
CMR = 0x04; // 釋放接收緩沖器
ACR0 = ACRR[0];// 初始化接收代碼寄存器
ACR1 = ACRR[1];
ACR2 = ACRR[2];
ACR3 = ACRR[3];
AMR0 = AMRR[0];// 初始化接收屏蔽寄存器
AMR1 = AMRR[1];
AMR2 = AMRR[2];
AMR3 = AMRR[3];
do// 使用do--while語(yǔ)句確保退出復(fù)位模式
{
MODR = 0x08; //MOD.3=0--雙濾波器模式
state = MODR;
}
while( state & 0x01 );
}//
//**********CAN發(fā)送數(shù)據(jù)到CAN-Bus***********//
void CAN_TXD(void)
{
uchar state;
//初始化標(biāo)示碼頭信息
TX_buffer[0] = 0x88; //.7=0--擴(kuò)展幀;.6=0--數(shù)據(jù)幀; .0-.3=100--數(shù)據(jù)長(zhǎng)度為8字節(jié)
// TX_buffer[1] = 0xFF; //本幀信息的ID
//TX_buffer[2] = 0xFF;
TX_buffer[3] = 0xFF;
TX_buffer[4] = 0xFF;
do //查詢SJA1000是否處于接收狀態(tài),當(dāng)SJA1000不處于接收狀態(tài)時(shí)才可繼續(xù)執(zhí)行
{
state = SR; //SR為SJA1000的狀態(tài)寄存器
}
while( state & 0x10 ); //SR.4=1 正在接收,等待
do //查詢SJA1000是否處于發(fā)送完畢狀態(tài)
{
state = SR;
}
while(!(state & 0x08)); //SR.3=0,發(fā)送請(qǐng)求未處理完,等待直到SR.3=1
do //查詢發(fā)送緩沖器狀態(tài)
{
state = SR;
}
while(!(state & 0x04)); //SR.2=0,發(fā)送緩沖器被鎖。等待直到SR.2=1
//將待發(fā)送的一幀數(shù)據(jù)信息存入SJA1000的相應(yīng)寄存器中
TBSR0 = TX_buffer[0];
TBSR1 = TX_buffer[1];
TBSR2 = TX_buffer[2];
TBSR3 = TX_buffer[3];
TBSR4 = TX_buffer[4];
TBSR5 = TX_buffer[5];
TBSR6 = TX_buffer[6];
TBSR7 = TX_buffer[7];
TBSR8 = TX_buffer[8];
TBSR9 = TX_buffer[9];
TBSR10 = TX_buffer[10];
TBSR11 = TX_buffer[11];
TBSR12 = TX_buffer[12];
CMR = 0x04; //置位發(fā)
總結(jié)
以上是生活随笔為你收集整理的sja1000 中断_SJA1000程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软件测试公司都会查学历吗,高新技术企业申
- 下一篇: 2.4 设计评选优秀教师和学生的程序,其