/* param base FlexCAN peripheral base address. param handle Pointer to flexcan_edma_handle_t structure. param pEdmaConfig The user configuration structure of type edma_transfer_t. retval kStatus_Success if succeed, others failed. retval kStatus_FLEXCAN_RxFifoBusy Previous transfer ongoing.  */
status_t FLEXCAN_StartTransferDatafromRxFIFO(CAN_Type *base, flexcan_edma_handle_t *handle, edma_transfer_config_t *pEdmaConfig)
/* param base FlexCAN peripheral base address. param handle Pointer to flexcan_edma_handle_t structure. param pEdmaConfig The user configuration structure of type edma_transfer_t. retval kStatus_Success if succeed, others failed. retval kStatus_FLEXCAN_RxFifoBusy Previous transfer ongoing.  */
status_t FLEXCAN_StartTransferDatafromRxFIFO(CAN_Type *base, flexcan_edma_handle_t *handle, edma_transfer_config_t *pEdmaConfig)
{
    assert(NULL != handle->rxFifoEdmaHandle);
    assert(NULL != pEdmaConfig);
    status_t status;
    if ((uint8_t)KFLEXCAN_RxFifoBusy == handle->rxFifoState)
    {
        status = kStatus_FLEXCAN_RxFifoBusy;
    }
    else
    {
        handle->rxFifoState = (uint8_t)KFLEXCAN_RxFifoBusy;
        FLEXCAN_EnableRxFifoDMA(base, true);
        (void)EDMA_SubmitTransfer(handle->rxFifoEdmaHandle, (const edma_transfer_config_t *)pEdmaConfig);
        EDMA_StartTransfer(handle->rxFifoEdmaHandle);
        status = kStatus_Success;
    }
    return status;
}