SLAAET4 April 2025 MSPM0G3506 , MSPM0G3507 , MSPM0G3518 , MSPM0G3519
The TX is configured as buffer mode in the current demo projects in SDK. The section below describes how to use TX in FIFO mode.
uint8_t MCAN_send_frame(uint32_t id, uint8_t* data, uint16_t len)
{
frame_send_success = false;
DL_MCAN_TxBufElement txMsg;
DL_MCAN_TxFIFOStatus txfifoStatus;
/* Initialize message to transmit. */
/* Identifier Value. */
txMsg.id = id;
/* Transmit data frame. */
txMsg.rtr = 0U;
/* 11-bit standard identifier. */
txMsg.xtd = 0U;
/* ESI bit in CAN FD format depends only on error passive flag. */
txMsg.esi = 0U;
/* Transmitting 4 bytes. */
txMsg.dlc = encode_dlc(len);
/* CAN FD frames transmitted with bit rate switching. */
txMsg.brs = protocol_mode;
/* Frame transmitted in CAN FD format. */
txMsg.fdf = protocol_mode; //protocol_mode;
/* Store Tx events. */
txMsg.efc = 1U;
/* Message Marker. */
txMsg.mm = 0xAAU;
/* Data bytes. */
for (int i = 0; i < len; i++) txMsg.data[i] = data[i];
while (DL_MCAN_OPERATION_MODE_NORMAL != DL_MCAN_getOpMode(CANFD0))
;
/* Write Tx Message to the Message RAM (FIFO). */
DL_MCAN_writeMsgRam(CANFD0, DL_MCAN_MEM_TYPE_FIFO, 0, &txMsg);
/* Get put index and other TxFIFO details in txfifoStatus*/
DL_MCAN_getTxFIFOQueStatus(CANFD0, &txfifoStatus);
/* Enable Transmission interrupt.*/
DL_MCAN_TXBufTransIntrEnable(CANFD0, txfifoStatus.putIdx, 1U);
/* Add request for transmission. */
DL_MCAN_TXBufAddReq(CANFD0, txfifoStatus.putIdx);
if (txMsg.id == MCAN_HOST_ID) {
while (frame_send_success == false) {
;
}
}
return 0;
}
First, the TX message is saved in to Message RAM in FIFO type by calling DL_MCAN_writeMsgRam(). Then, get the index of this message, which indicates the location of the saved message in FIFO, by calling DL_MCAN_getTxFIFOQueStatus(). After, enable the transmission interrupt with the put index information of this message by calling DL_MCAN_TXBufTransIntrEnable(). Finally, call the add request for transmission with put index information of this message to transmit by calling DL_MCAN_TXBufAddReq().