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

飞思卡尔MC9S12X:CAN初始化配置
飞思卡尔MC9S12X:CAN发送配置
飞思卡尔MC9S12X:CAN接收配置
飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用


一、MSCAN初始化流程

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

二、MSCAN初始化寄存器介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、CAN初始化配置具体程序实现

/*************************************************************/
/*                        初始化CAN0                         */
/*************************************************************/
void INIT_MSCAN0(void) 
{
    
    
  if(CAN0CTL0_INITRQ==0)      	// 查询是否进入初始化状态   
    CAN0CTL0_INITRQ =1;        	// 进入初始化状态
    
  while (CAN0CTL1_INITAK==0);  	//等待进入初始化状态
 
  CAN0BTR0_SJW = 0;            	//设置同步
  CAN0BTR0_BRP = 7;          	//设置波特率,预分频因子为8
  CAN0BTR1 = 0x49;       		//TSEG1为10个时间量子,TSEG2为5个时间量子,
  								//MSCAN波特率为32MHz/8/(1+10+5)=250kHz
  // 关闭滤波器                                  
  CAN0IDMR0 = 0xFF;
  CAN0IDMR1 = 0xFF;
  CAN0IDMR2 = 0xFF;
  CAN0IDMR3 = 0xFF;
  CAN0IDMR4 = 0xFF;
  CAN0IDMR5 = 0xFF;
  CAN0IDMR6 = 0xFF;
  CAN0IDMR7 = 0xFF; 
 
  CAN0CTL1 = 0xC0;             //使能MSCAN模块,MSCAN时钟源为can总线时钟
  							   //CAN总线时钟频率为32MHz
  CAN0CTL0 = 0x00;             //返回正常运行模式
  while(CAN0CTL1_INITAK);      //等待回到一般运行模式
  while(CAN0CTL0_SYNCH==0);    //等待总线时钟同步
  CAN4RFLG_RXF = 1;			   //清空消息接受缓冲器
  CAN0RIER_RXFIE = 1;          //使能接收中断
}

点击下载,关于MSCAN寄存器的详细中文介绍

猜你喜欢

转载自blog.csdn.net/MQ0522/article/details/112673901