Hello,
I have F28335 microchip and I have problem with eCAN configuration in Self-test mode - I was testing 2833xECanBack2Back example and it worked properly, but now I would like to use message filtering mechanism, so I set up proper bits (according eCAN Reference Guide). Hovever it doesen't work - whatever I will set in MSGID register sent message is received by second mailbox.
I can place full source code if it helps, but firstly I would like to know does eCAN in self-test mode accepts message filtering mechanism?
I was changing MSGID in mailboxes, I was changing LAM register too, but it doesen't affect - sent message is always received by MSGBOX1 (I am checking variables in watch window)
Part of source code is shown below
InitECana(); // Initialize eCAN-A module
//////////////// MBOX0 - transmitt
ECanaRegs.CANTRR.bit.TRR0=1;
while(ECanaRegs.CANTRS.bit.TRS0==1) {}
ECanaShadow.CANME = ECanaRegs.CANME;
ECanaShadow.CANME.bit.ME0 = 0;
ECanaRegs.CANME = ECanaShadow.CANME;
// MSGID = {IDE,AME,AAM,ID[29]}
// Extended ID=10000000
ECanaMboxes.MBOX0.MSGID.all = 0x90000001;
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8; // 8 bytes
// 0 - direction - transmitt
ECanaShadow.CANMD = ECanaRegs.CANMD;
ECanaShadow.CANMD.bit.MD0 = 0;
ECanaRegs.CANMD = ECanaShadow.CANMD;
//Activate
ECanaShadow.CANME = ECanaRegs.CANME;
ECanaShadow.CANME.bit.ME0 = 1;
ECanaRegs.CANME = ECanaShadow.CANME;
//Data
ECanaMboxes.MBOX0.MDL.all = 0x11112222;
ECanaMboxes.MBOX0.MDH.all = 0x22223333;
//////////// MBOX1 - receive
ECanaShadow.CANME = ECanaRegs.CANME;
ECanaShadow.CANME.bit.ME1 = 0;
ECanaRegs.CANME = ECanaShadow.CANME;
// IDE=1 - extended identifier, AME=1 - mask
// AAM=0
// ID=10000000 - id
ECanaMboxes.MBOX1.MSGID.all = 0xD0000000;
//LAMn
// {LAMI, rvd[2], LAM[29]}
// LAM = 10000000 - mask - bits 0-28 significiant, 29-not important
ECanaLAMRegs.LAM1.all = 0x10000000;
// 1 - receiver
ECanaShadow.CANMD = ECanaRegs.CANMD;
ECanaShadow.CANMD.bit.MD1 = 1;
ECanaRegs.CANMD = ECanaShadow.CANMD;
//Activate
ECanaShadow.CANME = ECanaRegs.CANME;
ECanaShadow.CANME.bit.ME1 = 1;
ECanaRegs.CANME = ECanaShadow.CANME;
///////////////// SELF-TEST MODE
EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.STM = 1; // Configure CAN for self-test mode
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
//Main loop
for(;;)
{
ECanaRegs.CANTRS.all = 0x00000001; // Transmitt
while(ECanaRegs.CANTA.all != 0x00000001 ) {} // Wait for all TAn bits to be set..
ECanaRegs.CANTA.all = 0x00000001; // Clear all TAn
//Read
mailbox_read(1);
}
}
Best regards,
Pawel Blaszczyk