/*************************************************************/
/* 初始化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寄存器的详细中文介绍