diff options
author | Dominik Sliwa <dominik.sliwa@toradex.com> | 2019-02-05 14:44:01 +0100 |
---|---|---|
committer | Dominik Sliwa <dominik.sliwa@toradex.com> | 2019-02-06 12:13:32 +0100 |
commit | daac8f258addd3a1177d3aa84e0bf9737000c8de (patch) | |
tree | 474ca96af52f06bd8ada7bd1b783d936fdecba27 | |
parent | 0bfd994031c82d18be9d7a8bf69126c2b7727efe (diff) |
Revert "Move CAN data out of fifo in a thread not IRQ"
This reverts commit 46bfc66ac58289bc868d982e3b0ec46176302be0.
-rw-r--r-- | app/src/can_task.c | 2 | ||||
-rw-r--r-- | drivers/src/fsl_flexcan.c | 15 |
2 files changed, 9 insertions, 8 deletions
diff --git a/app/src/can_task.c b/app/src/can_task.c index 4efb0e3..b758806 100644 --- a/app/src/can_task.c +++ b/app/src/can_task.c @@ -265,8 +265,6 @@ 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++; if (can_regs[id].frames_in_buf >= CAN_RX_BUF_SIZE) diff --git a/drivers/src/fsl_flexcan.c b/drivers/src/fsl_flexcan.c index 45db478..2a07dc5 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,7 +1354,10 @@ void FLEXCAN_TransferHandleIRQ(CAN_Type *base, flexcan_handle_t *handle) /* Calling Callback Function if has one. */ if (handle->callback != NULL) - reschedule = handle->callback(base, handle, status, result, handle->userData); + { + if (handle->callback(base, handle, status, result, handle->userData) == pdTRUE) + reschedule = pdTRUE; + } /* Reset return status */ status = kStatus_FLEXCAN_UnHandled; |