AnsweredAssumed Answered

How to clear CAN TX flag CANTFLG.TXE to indicate the message buffer is full after a FIFO write done?

Question asked by dp h on Apr 1, 2014
Latest reply on Apr 2, 2014 by dp h

Hello, the CAN Transmit Buffer Empty flag CANTFLG.TXE is set to 1 to clear it, after a write FIFO done to start the transmission, is that? Because from the example code below, after the TX FIFO is filled, CANTFLG = TxbufSel, at this time, TxbufSel is read from CANTBSEL, the bit of selected FIFO should be set.


byte CanTxFrame(CanMsg_t msg)


    byte TxbufSel;        

    byte idx;           // Index to data within the transmission buffer


    if (!CANTFLG)       // Retrun if Transmit Buffer is full

        return ERR_BUFFER_FULL;



    CANTBSEL = CANTFLG; // Select lowest empty buffer

    TxbufSel = CANTBSEL; // Backup selected buffer


    *((word *) ((word)(&CANTXIDR0)))= msg.ID<<5;   // 11bit ID, RTR=0: data frame; IDE=0


// Load data to Data Segment Registers

    for (idx=0; idx<(msg.DtLen); idx++) {

        *(&CANTXDSR0 + idx) = ([idx]; 




    CANTXDLR  = msg.DtLen;   // set Data Length Code

    CANTXTBPR = 0;           // set highest priority



    CANTFLG = TxbufSel;      // Start transmission


    while ( (CANTFLG&TxbufSel) != TxbufSel);  // Wait for Transmission completion


    return NO_ERR;