Hi,
i am uisng FIFO Edma transfer for the recieving the can data via call back function.
problem is that i am not able use xQueueSendFromISR or xQueueSend functions in call back function.
following is the function implememtation.
static void CAN_DMA_Callback(CAN_Type *base, flexcan_edma_handle_t *handle, status_t status, void *userData)
{
(void)base;
(void)handle;
hal_can_t * pHanCb = (hal_can_t * )(userData);
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
/* Process FlexCAN Rx event. */
if (kStatus_FLEXCAN_RxFifoIdle == status)
{
for (uint32_t i = 0; i < RX_MESSAGE_NUM; i++)
{
pHanCb->iIsDataReceived = 1;
pHanCb->sMsg[i].iEventId =0;
if(pHanCb->qRxMsg != NULL)
{
if(pdFALSE == xQueueIsQueueFullFromISR(pHanCb->qRxMsg))
{
memcpy(&pHanCb->sMsg[i].sRxFrame,&rxFrame[i],sizeof(flexcan_frame_t));
bool rval = xQueueSendFromISR(pHanCb->qRxMsg,
(void*)(&(pHanCb->sMsg[i])),
&xHigherPriorityTaskWoken);
if( rval != pdPASS )
{
NVIC_ClearPendingIRQ(pHanCb->IRqn);
}
}
else
{
PRINTF("\r\n The Data Queue is FULL\r\n");
}
}
}
/* Receive data through Rx FIFO. */
pHanCb->rxFifoXfer.frame = &rxFrame[0];
pHanCb->rxFifoXfer.frameNum = RX_MESSAGE_NUM;
(void)FLEXCAN_TransferReceiveFifoEDMA(pHanCb->pCanType, &pHanCb->hFlexcanEdmaHandle, &pHanCb->rxFifoXfer);
}
}