1. 程式人生 > >飛思卡爾S12系列(基於MC9S12XET256MAA和/MC9S12XEP100)CAN初始化總結和分享

飛思卡爾S12系列(基於MC9S12XET256MAA和/MC9S12XEP100)CAN初始化總結和分享

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;          //禁止接收中斷
}