最近在进行eCAN邮箱初始化(多种协议并存下,不同协议单独初始化)如下:
void vYLCanIDInit(void) //上电初始化和通讯故障初始化
{
ECanaRegs.CANME.all = 0x00000000;
ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000108;
ECanaMboxes.MBOX1.MSGID.all = 0xc6900003;
ECanaRegs.CANME.all = 0x00000032;
ECanaRegs.CANMD.all = 0x00000002;
ECanaLAMRegs.LAM1.all = 0x81DFFFFF;
ECanaLAMRegs.LAM4.all = 0x800FFFFC;
ECanaLAMRegs.LAM5.all = 0x800FFFFC;
}
void InfyCanIDInit(void) //在选择此协议时初始化和通讯故障时初始化
{
ECanaRegs.CANME.bit.ME2 = 0;
ECanaRegs.CANME.bit.ME8 = 0; ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX8.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX2.MSGID.all = 0xC29A00F0;
ECanaRegs.CANME.bit.ME2 = 1;
ECanaRegs.CANME.bit.ME8 = 1; ECanaRegs.CANMD.bit.MD2 = 1;
ECanaRegs.CANMD.bit.MD8 = 0;
ECanaLAMRegs.LAM2.all = 0x807FFFFF;
}
在CCS3.3进行仿真时发现其他未使能邮箱有误使能情况:
请大牛帮忙分析分析,谢谢!
咋哥:补充说明:
用于模块中用到多种CAN通讯协议,初始化独立配置,其中void vYLCanIDInit(void)是默认执行,对应的应用协议(内部协议)也是一直使能。
其他的协议(外部协议)采用选择标志位的形式进行初始化和协议解析。现选择其中一种外部协议和默认的内部协议进行说明。
1. void vYLCanIDInit(void)函数和 void InfyCanIDInit(void)在上电之后和通讯中断之后都会调用(执行),
其中void vYLCanIDInit(void)函数先执行,void InfyCanIDInit(void)后执行。
2. 结合两个初始化函数,一共用到的邮箱有BOX1,BOX2,BOX4,BOX5,BOX8,其中BOX1,BOX2为接收,其余为发送。
3. 当监控下达广播命令: 0697FF83 03 F0 00 37 00 01 00 00 ,协议中对应的接收邮箱为BOX1 。模块偶尔出现不响应命令的情况。通过CCS3.3仿真
发现,除了上述使能的邮箱外,还有其他邮箱被使能,如图所示(CANME.MEx)。经查询,下发的命令被BOX31接收。
疑惑:
用CANME.MEx的形式使能邮箱是否会导致其他邮箱误使能?
最近在进行eCAN邮箱初始化(多种协议并存下,不同协议单独初始化)如下:
void vYLCanIDInit(void) //上电初始化和通讯故障初始化
{
ECanaRegs.CANME.all = 0x00000000;
ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000108;
ECanaMboxes.MBOX1.MSGID.all = 0xc6900003;
ECanaRegs.CANME.all = 0x00000032;
ECanaRegs.CANMD.all = 0x00000002;
ECanaLAMRegs.LAM1.all = 0x81DFFFFF;
ECanaLAMRegs.LAM4.all = 0x800FFFFC;
ECanaLAMRegs.LAM5.all = 0x800FFFFC;
}
void InfyCanIDInit(void) //在选择此协议时初始化和通讯故障时初始化
{
ECanaRegs.CANME.bit.ME2 = 0;
ECanaRegs.CANME.bit.ME8 = 0; ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX8.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX2.MSGID.all = 0xC29A00F0;
ECanaRegs.CANME.bit.ME2 = 1;
ECanaRegs.CANME.bit.ME8 = 1; ECanaRegs.CANMD.bit.MD2 = 1;
ECanaRegs.CANMD.bit.MD8 = 0;
ECanaLAMRegs.LAM2.all = 0x807FFFFF;
}
在CCS3.3进行仿真时发现其他未使能邮箱有误使能情况:
请大牛帮忙分析分析,谢谢!
咋哥:补充说明:
由于模块中用到多种CAN通讯协议,初始化独立配置,其中void vYLCanIDInit(void)是默认执行,对应的应用协议(内部协议)也是一直使能。
其他的协议(外部协议)采用选择标志位的形式进行初始化和协议解析。现选择其中一种外部协议和默认的内部协议进行说明。
1. void vYLCanIDInit(void)函数和 void InfyCanIDInit(void)在上电之后和通讯中断之后都会调用(执行),
其中void vYLCanIDInit(void)函数先执行,void InfyCanIDInit(void)后执行。
2. 结合两个初始化函数,一共用到的邮箱有BOX1,BOX2,BOX4,BOX5,BOX8,其中BOX1,BOX2为接收,其余为发送。
3. 当监控下达广播命令: 0697FF83 03 F0 00 37 00 01 00 00 ,协议中对应的接收邮箱为BOX1 。模块偶尔出现不响应命令的情况。通过CCS3.3仿真
发现,除了上述使能的邮箱外,还有其他邮箱被使能,如图所示(CANME.MEx)。经查询,下发的命令被BOX31接收。
疑惑:
用CANME.MEx的形式使能邮箱是否会导致其他邮箱误使能?
最近在进行eCAN邮箱初始化(多种协议并存下,不同协议单独初始化)如下:
void vYLCanIDInit(void) //上电初始化和通讯故障初始化
{
ECanaRegs.CANME.all = 0x00000000;
ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000108;
ECanaMboxes.MBOX1.MSGID.all = 0xc6900003;
ECanaRegs.CANME.all = 0x00000032;
ECanaRegs.CANMD.all = 0x00000002;
ECanaLAMRegs.LAM1.all = 0x81DFFFFF;
ECanaLAMRegs.LAM4.all = 0x800FFFFC;
ECanaLAMRegs.LAM5.all = 0x800FFFFC;
}
void InfyCanIDInit(void) //在选择此协议时初始化和通讯故障时初始化
{
ECanaRegs.CANME.bit.ME2 = 0;
ECanaRegs.CANME.bit.ME8 = 0; ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX8.MSGCTRL.all = 0x00000008;
ECanaMboxes.MBOX2.MSGID.all = 0xC29A00F0;
ECanaRegs.CANME.bit.ME2 = 1;
ECanaRegs.CANME.bit.ME8 = 1; ECanaRegs.CANMD.bit.MD2 = 1;
ECanaRegs.CANMD.bit.MD8 = 0;
ECanaLAMRegs.LAM2.all = 0x807FFFFF;
}
在CCS3.3进行仿真时发现其他未使能邮箱有误使能情况:
请大牛帮忙分析分析,谢谢!
Seven Han:
回复 咋哥:
从第一段代码邮箱4.5为发送邮箱,并分别写了 LAM registers。第二段代码中看到您没有使用32-bit R/W. For example, the following statements are not permitted:
ECanaRegs.CANME.bit.ME2 = 1;
ECanaRegs.CANME.bit.ME8 = 1;
ECanaRegs.CANMD.bit.MD2 = 1;
ECanaRegs.CANMD.bit.MD8 = 0;
You need to use the shadow registers to ensure all R/W are 32-bit.具体可以参考:http://www.ti.com/lit/an/spra876b/spra876b.pdf