From 46bfc66ac58289bc868d982e3b0ec46176302be0 Mon Sep 17 00:00:00 2001 From: Dominik Sliwa Date: Mon, 17 Dec 2018 00:02:43 +0100 Subject: Move CAN data out of fifo in a thread not IRQ Signed-off-by: Dominik Sliwa --- app/src/can_task.c | 2 ++ drivers/src/fsl_flexcan.c | 15 ++++++--------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/can_task.c b/app/src/can_task.c index b81ed72..d24aa66 100644 --- a/app/src/can_task.c +++ b/app/src/can_task.c @@ -253,6 +253,8 @@ static inline void can_fifo_rx(uint8_t id, flexcan_fifo_transfer_t * rxXfer) FLEXCAN_TransferReceiveFifoNonBlocking(can_regs[id].base, &can_regs[id].handle, rxXfer); xSemaphoreTake(can_msg->sem, portMAX_DELAY); if (can_msg->async_status == pdTRUE) { + FLEXCAN_ReadRxFifo(can_regs[id].base, can_regs[id].handle.rxFifoFrameBuf); + FLEXCAN_TransferAbortReceiveFifo(can_regs[id].base, &can_regs[id].handle); frame_to_buffer(rxXfer->frame, id); can_regs[id].frames_in_buf++; generate_can_irq(id); diff --git a/drivers/src/fsl_flexcan.c b/drivers/src/fsl_flexcan.c index 2a07dc5..45db478 100644 --- a/drivers/src/fsl_flexcan.c +++ b/drivers/src/fsl_flexcan.c @@ -1295,12 +1295,12 @@ void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle) break; case kFLEXCAN_RxFifoFrameAvlFlag: - status = FLEXCAN_ReadRxFifo(base, handle->rxFifoFrameBuf); - if (kStatus_Success == status) - { + //status = FLEXCAN_ReadRxFifo(base, handle->rxFifoFrameBuf); + //if (kStatus_Success == status) + //{ status = kStatus_FLEXCAN_RxFifoIdle; - } - FLEXCAN_TransferAbortReceiveFifo(base, handle); + //} + //FLEXCAN_TransferAbortReceiveFifo(base, handle); break; default: @@ -1354,10 +1354,7 @@ void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle) /* Calling Callback Function if has one. */ if (handle->callback != NULL) - { - if (handle->callback(base, handle, status, result, handle->userData) == pdTRUE) - reschedule = pdTRUE; - } + reschedule = handle->callback(base, handle, status, result, handle->userData); /* Reset return status */ status = kStatus_FLEXCAN_UnHandled; -- cgit v1.2.3