日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sja1000 中断_SJA1000程序

發(fā)布時(shí)間:2024/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sja1000 中断_SJA1000程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

給你提供一些思路

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。