飞思卡尔MC9S12X:CAN初始化配置

一、MSCAN初始化流程

  1. 查询是否进入初始化状态,如不是,进入初始化状态。
    此处需设置CANCTL0寄存器。
  2. 设置CAN波特率。
    此处需设置CANBTR0,CANBTR1寄存器。
  3. 设置相应CAN口滤波器。
    此处需设置CANIDMR寄存器。
  4. 使能MSCAN模块,设置MSCAN时钟源。
    此处需设置CANCTL1寄存器。
  5. 离开初始化状态,返回正常运行模式。
    此处需设置CANCTL0寄存器。
  6. 设置接收中断使能。
    此处需设置CANRIER寄存器。

二、MSCAN初始化寄存器介绍

飞思卡尔MC9S12X:CAN初始化配置_第1张图片
飞思卡尔MC9S12X:CAN初始化配置_第2张图片
飞思卡尔MC9S12X:CAN初始化配置_第3张图片
飞思卡尔MC9S12X:CAN初始化配置_第4张图片
飞思卡尔MC9S12X:CAN初始化配置_第5张图片
飞思卡尔MC9S12X:CAN初始化配置_第6张图片

三、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寄存器的详细中文介绍

你可能感兴趣的:(MC9S12)