TI中文支持网
TI专业的中文技术问题搜集分享网站

CANME寄存器按位使能导致其他邮箱误使能情况

最近在进行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

赞(0)
未经允许不得转载:TI中文支持网 » CANME寄存器按位使能导致其他邮箱误使能情况
分享到: 更多 (0)