AnsweredAssumed Answered

not all msgobjects are transmitted on CANbus

Question asked by vercruysse.luc on Oct 13, 2011



I have problems using the messageRAM in CAN (STR912FW44).

The CANController is initialized to use interrupts.

In following code I update my messageRAM with new data

- There are 12 transmit messageobjects.

- CAN_TX_INTPOL is an array with the index of the messageobject (0..31).

  • I call this rouine every 250mS, so there is plenty of time to transmit the 12 messages

canmsg Msg;

for (Idx=0; Idx<12; Idx++) {

... fill Msg with new data


while (CAN_UpdateMsgObj(CAN_TX_INTPOL[Idx],&Msg) != SUCCESS) ;




fill Msg with new data


Afterwards request the transmission of all 12 message objects is done.


for (Idxi=0;Idx<12;Idx++) {

while(CAN_TransmitRequest(CAN_TX_INTPOL[Idx]) != SUCCESS);




My CANinterrupt routine releases the messageobject.

__irq void CAN_IRQHandler (void) {




Not all messages are transmitted. I Count the number of requests and the number of interrupts I get. This number is not equal. I capture the CANbus with a CANAnalyzer. Not all messages are transmitted (about 1% missing).

When I use CAN_SendMessage followed by CAN_WaitEndOfTx(), everything is OK. Of course in this case I do not use the messageRAM as it should be.

Any idea what is wrong here ?

Kind regards