Other Parts Discussed in Thread: C2000WARE
Hi,
My customer use mailbox 16 and 15 as the receiving and sending mailbox respectively.
On production line, we find that half product sending data are abnormal. Data frame became to remote frame.
After change the sending mailbox from 15 to 14, it return to working well.
Attach CAN configuration code. In InitECana function, all mailbox control remote frame bits (RTR) has been cleared to '0'.
Could you kindly give some comments about why it has problem if sending mailbox is 15? Thanks.
void Can_Config(void)
{
InitECanaGpio();
InitECana();
DCDC_3KW_CANTransmit_Init();
DCDC_3KW_CANReceive_Init();
DCDC_3KW_Init_ECana_INT();
LogDataMboxInit();
Init_CAN_RcvBuf()
}
void LogDataMboxInit(void)
{
union CANLAM_REG ECanaLAMShadow;
ECanaMboxes.MBOX16.MSGID.all = LOG_Rx_ID;
ECanaLAMShadow.all = ECanaLAMRegs.LAM16.all;
ECanaLAMShadow.bit.LAMI = 1; // Keep same with mailbox 15 identifier, receive if same
ECanaLAMShadow.bit.rsvd1 = 3; // Reserved bit, invalid write
ECanaLAMShadow.bit.LAM_L = 0x0000; // Low bytes for comparison
ECanaLAMShadow.bit.LAM_H = 0x0000; // High bytes for comparison
ECanaLAMRegs.LAM16.all = ECanaLAMShadow.all;
ECanaMboxes.MBOX15.MSGID.all = LOG_Tx_ID;
ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
ECanaShadow.CANMD.bit.MD15 = 0; // Transmit mailbox
ECanaShadow.CANMD.bit.MD16 = 1; //Receive mailbox
ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
ECanaShadow.CANME.all = ECanaRegs.CANME.all;
ECanaShadow.CANME.bit.ME15 = 1;
ECanaShadow.CANME.bit.ME16 = 1;
ECanaRegs.CANME.all = ECanaShadow.CANME.all;
struct ECAN_REGS ECanaShadow;
EALLOW;
//
ECanaShadow.CANMIM.all=ECanaRegs.CANMIM.all; //
ECanaShadow.CANMIM.bit.MIM16=1;
ECanaRegs.CANMIM.all= ECanaShadow.CANMIM.all;
//
ECanaShadow.CANMIL.all=ECanaRegs.CANMIL.all;
ECanaShadow.CANMIL.bit.MIL16=0;
ECanaRegs.CANMIL.all=ECanaShadow.CANMIL.all;
//
ECanaShadow.CANGIM.all=ECanaRegs.CANGIM.all;
ECanaShadow.CANGIM.bit.AAIM=0; //
ECanaShadow.CANGIM.bit.BOIM=0; //
ECanaShadow.CANGIM.bit.EPIM=0; //
ECanaShadow.CANGIM.bit.WDIM=0; //
ECanaShadow.CANGIM.bit.WUIM=0; //
ECanaShadow.CANGIM.bit.WLIM=0; //
ECanaShadow.CANGIM.bit.I0EN=1; //
ECanaShadow.CANGIM.bit.I1EN=0; //
ECanaShadow.CANGIM.bit.GIL=0; //
ECanaShadow.CANGIM.bit.MTOM=0; //
ECanaShadow.CANGIM.bit.RMLIM=0; //
ECanaShadow.CANGIM.bit.TCOM=0; //
ECanaRegs.CANGIM.all=ECanaShadow.CANGIM.all;
EDIS;
}

