MSCAN学习
//
// MSCAN初始化
//
/*******************CAN0******************************/
void MSCAN0_Init()
{
// If MSCAN peripheral is not in Initialization Mode, enables the Inizialization Mode Request</
昨天好不容调试通了CAN模块,首先是滤波器不能关闭,关了机不接受任何帧数据了,跟我想象中的完全部不一样啊,另外通信的是标准帧,到现在扩展帧怎么弄的还没搞清楚,先记录下标准帧的东西;相关的寄存器设置这个不用说了,我没有搞清楚的就是这个滤波器设置问题,后来研究了半天,16为滤波器标准帧总算勉强懂了一点。
基本原理就是MR+AR的方式,在标准帧中ID有11为,ID10-ID0;所以如果想要通信的帧ID=0B001 0000 0000 =0x100的话,那么应该将这11个bit放入寄存器(AR0-AR1)组成的16为寄存器中,于是得到得到AR=001 0000 0000 00000(在最后面添加5个0)得到16bit,于是AR=0x2000;MR设置为全部比较,MR=0x0007;又例如,假设通信的ID=0B 0001 0000 000=0x080(最前面补0,这个数不变 ),那么将这个11bit放入寄存器中(AR0-AR1)组成的16为寄存器中,于是得到得到AR=0001 0000 000 00000(在最后面添加5个0)得到16bit,于是AR=0x1000;MR设置为全部比较,MR=0x0007;一次类推;
接下来在讲一下MR的问题,MR也就是屏蔽的意义,因为在标准帧中只有11为有效;假如要通信的ID=0B 001 0000 000X,那么应该将这11个bit放入寄存器(AR0-AR1)组成的16为寄存器中,于是得到得到AR=001 0000 000X 00000(在最后面添加5个0)得到16bit,于是AR=0x2000(或者0x2020),MR=0B 000 0000 0001 + 00111(补5位,最后三个必须为111)=0x0027.
标准帧中当设置应该是这样额。附一个网上的程序:
MSCAN学习
//
// MSCAN初始化
//
/*******************CAN0******************************/
void MSCAN0_Init()
{
// If MSCAN peripheral is not in Initialization Mode, enables the Inizialization Mode Request</