一、MSCAN初始化流程
- 查詢是否進入初始化狀態,如不是,進入初始化狀態,
此處需設定CANCTL0暫存器, - 設定CAN波特率,
此處需設定CANBTR0,CANBTR1暫存器, - 設定相應CAN口濾波器,
此處需設定CANIDMR暫存器, - 使能MSCAN模塊,設定MSCAN時鐘源,
此處需設定CANCTL1暫存器, - 離開初始化狀態,回傳正常運行模式,
此處需設定CANCTL0暫存器, - 設定接收中斷使能,
此處需設定CANRIER暫存器,
二、MSCAN初始化暫存器介紹






三、CAN初始化配置具體程式實作
/*************************************************************/
/* 初始化CAN0 */
/*************************************************************/
void INIT_CAN0(void)
{
if(CAN0CTL0_INITRQ==0) // 查詢是否進入初始化狀態
CAN0CTL0_INITRQ =1; // 進入初始化狀態
while (CAN0CTL1_INITAK==0); //等待進入初始化狀態
CAN0BTR0_SJW = 0; //設定同步
CAN0BTR0_BRP = 3; //設定波特率,預分頻因子為4
CAN0BTR1 = 0x49; //TSEG1為10個時間量子,TSEG2為5個時間量子,
//MSCAN波特率為16MHz/4/(1+10+5)=250kHz
// 關閉濾波器
CAN0IDMR0 = 0xFF;
CAN0IDMR1 = 0xFF;
CAN0IDMR2 = 0xFF;
CAN0IDMR3 = 0xFF;
CAN0IDMR4 = 0xFF;
CAN0IDMR5 = 0xFF;
CAN0IDMR6 = 0xFF;
CAN0IDMR7 = 0xFF;
CAN0CTL1 = 0x80; //使能MSCAN模塊,MSCAN時鐘源為晶振
CAN0CTL0 = 0x00; //回傳正常運行模式
while(CAN0CTL1_INITAK); //等待回到一般運行模式
while(CAN0CTL0_SYNCH==0); //等待總線時鐘同步
CAN4RFLG_RXF = 1; //清空訊息接受緩沖器
CAN0RIER_RXFIE = 1; //使能接收中斷
}
點擊下載,關于MSCAN暫存器的詳細中文介紹
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/249582.html
標籤:其他
