飛思卡爾S12系列(基於MC9S12XET256MAA和/MC9S12XEP100)CAN初始化總結和分享
阿新 • • 發佈:2018-12-17
CAN初始化流程:
1.查詢是否進入初始化狀態,如不是,進入初始化狀態,此處需設定CANCTL0,CANCTL1暫存器
3.關閉相應CAN口濾波器,此處需設定CANIDMR暫存器。
4.使能MSCAN模組,進入一般模式,選擇時鐘,此處需設定CANCTL0,CANCTL1暫存器
5.設定接收或者傳送中斷使能
/*************************************************************/ /* 初始化CAN0 */ /*************************************************************/ void INIT_CAN0(void) { if(CAN0CTL0_INITRQ==0) // 查詢是否進入初始化狀態 CAN0CTL0_INITRQ =1; // 進入初始化狀態 while (CAN0CTL1_INITAK==0); //等待進入初始化狀態 CAN0BTR0_SJW = 0; //設定同步 CAN0BTR0_BRP = 8-1; //設定波特率,32M匯流排時鐘 CAN0BTR1 = 0x1c; //設定時段1和時段2的Tq個數 ,匯流排頻率為250kb/s // 關閉濾波器 CAN0IDMR0 = 0xFF; CAN0IDMR1 = 0xFF; CAN0IDMR2 = 0xFF; CAN0IDMR3 = 0xFF; CAN0IDMR4 = 0xFF; CAN0IDMR5 = 0xFF; CAN0IDMR6 = 0xFF; CAN0IDMR7 = 0xFF; CAN0CTL1 = 0xC0; //使能MSCAN模組,設定為一般執行模式、使用匯流排時鐘源 CAN0CTL0 = 0x00; //返回一般模式執行 while(CAN0CTL1_INITAK); //等待回到一般執行模式 while(CAN0CTL0_SYNCH==0); //等待匯流排時鐘同步 CAN0RIER_RXFIE = 0; //禁止接收中斷 }