summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Sliwa <dominik.sliwa@toradex.com>2018-12-17 00:02:43 +0100
committerDominik Sliwa <dominik.sliwa@toradex.com>2018-12-17 00:02:43 +0100
commit46bfc66ac58289bc868d982e3b0ec46176302be0 (patch)
tree9da0cbb478dc66a1e0d52d4d89a4d9439eadfebe
parent91c4e8e66f28d3967e3c2a36478810c10031b8e5 (diff)
Move CAN data out of fifo in a thread not IRQ
Signed-off-by: Dominik Sliwa <dominik.sliwa@toradex.com>
-rw-r--r--app/src/can_task.c2
-rw-r--r--drivers/src/fsl_flexcan.c15
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;