飞思卡尔MC9S12X:CAN初始化配置
飞思卡尔MC9S12X:CAN发送配置
飞思卡尔MC9S12X:CAN接收配置
飞思卡尔MC9S12X:CAN驱动函数在主函数中的应用
一、MSCAN初始化流程
- 查询是否进入初始化状态,如不是,进入初始化状态。
此处需设置CANCTL0寄存器。 - 设置CAN波特率。
此处需设置CANBTR0,CANBTR1寄存器。 - 设置相应CAN口滤波器。
此处需设置CANIDMR寄存器。 - 使能MSCAN模块,设置MSCAN时钟源。
此处需设置CANCTL1寄存器。 - 离开初始化状态,返回正常运行模式。
此处需设置CANCTL0寄存器。 - 设置接收中断使能。
此处需设置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; //使能接收中断
}