sja1000 中断_SJA1000程序
給你提供一些思路
1、sja1000初始化
2、發送子程序
3、中斷方式接收
下面是一些程序段
你參考下(已用于產品)
/**********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語句確保進入復位模式
{
MODR = 0x09; // 設置MOD.0=1--進入復位模式,以便設置相應的寄存器
state = MODR;
}
while( !(state & 0x01) );
// 對SJA1000部分寄存器進行初始化設置
CDR = 0x88; // CDR為時鐘分頻器,CDR.3=1--時鐘關閉, CDR.7=0---basic CAN, CDR.7=1---Peli CAN
BTR0 = 0x04;//0x31; // 總線定時寄存器0 ;總線波特率設定
BTR1 = 0x1c;//0x1c; // 總線定時寄存器1 ;總線波特率設定
IER = 0x01; // IER.0=1--接收中斷使能; IER.1=0--關閉發送中斷使能
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語句確保退出復位模式
{
MODR = 0x08; //MOD.3=0--雙濾波器模式
state = MODR;
}
while( state & 0x01 );
}//
//**********CAN發送數據到CAN-Bus***********//
void CAN_TXD(void)
{
uchar state;
//初始化標示碼頭信息
TX_buffer[0] = 0x88; //.7=0--擴展幀;.6=0--數據幀; .0-.3=100--數據長度為8字節
// TX_buffer[1] = 0xFF; //本幀信息的ID
//TX_buffer[2] = 0xFF;
TX_buffer[3] = 0xFF;
TX_buffer[4] = 0xFF;
do //查詢SJA1000是否處于接收狀態,當SJA1000不處于接收狀態時才可繼續執行
{
state = SR; //SR為SJA1000的狀態寄存器
}
while( state & 0x10 ); //SR.4=1 正在接收,等待
do //查詢SJA1000是否處于發送完畢狀態
{
state = SR;
}
while(!(state & 0x08)); //SR.3=0,發送請求未處理完,等待直到SR.3=1
do //查詢發送緩沖器狀態
{
state = SR;
}
while(!(state & 0x04)); //SR.2=0,發送緩沖器被鎖。等待直到SR.2=1
//將待發送的一幀數據信息存入SJA1000的相應寄存器中
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; //置位發
總結
以上是生活随笔為你收集整理的sja1000 中断_SJA1000程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试公司都会查学历吗,高新技术企业申
- 下一篇: 2.4 设计评选优秀教师和学生的程序,其