Hi Roc_Wang,
I think the following code may helps your understanding, I think you can modify the related MB->status:
bufferMode = (MSCANBuffers[AChn_Transformed]+ABuffer)->Mode;
bufferStatus = (MSCANBuffers[AChn_Transformed]+ABuffer)->Status;
if (!((bufferMode == TXDF) || (bufferMode == TXRF)))
{
if (!(CCRcopy))
{
CLI; /* restore interrupt mask */
}
return (ERR_CONFIG);
}
if ((bufferMode == TXDF) && (bufferStatus == NODATA))
{
if (!(CCRcopy))
{
CLI; /* restore interrupt mask */
}
return (ERR_NODATA);
}
if ((bufferStatus == QUEUED) /* MB already queued */
|| (bufferStatus == QUEUED2)
|| (bufferStatus == ABORTREQ))
{
if (!(CCRcopy))
{
CLI; /* restore interrupt mask */
}
return (ERR_QED);
}
Queue_CAN_MB ( AChn, ABuffer); /* queue buffer, copy to msCAN if buffer available, */
/* abort msCAN buffer if all full and this buffer higher priority */
----------
You also can check this API:CAN_Transmit
You can find the related MB clear code:
else /* transmission completed */
{
if ((p_Buffer + buffer)->Mode == TXRF) /* transmitted remote frame */
{
(p_Buffer + buffer)->Mode = RXDF; /* receive data frame */
(p_Buffer + buffer)->Status = NODATA;
}
else /* transmitted Data TXDF or AUTOTXDF */
{
(p_Buffer + buffer)->Status = TRANSMITTED;
}
# if (TIMESTAMP_CAN)
if (TimeStampOption[AChn_Transformed])
{
p->CANTBSEL.Byte = interruptBufferBit;
(p_Buffer + buffer)->BufferTimeStamp_CAN = p->CANTXTSR.Word;
}
# endif
}
You can modify the status to your wanted data.
Wish it helps you!
Best Regards,
Kerry