Skip to content

Commit

Permalink
CAN driver how checks if rxWaiting bit is set before waking task
Browse files Browse the repository at this point in the history
  • Loading branch information
dc42 committed Mar 10, 2021
1 parent fc4fe6c commit 9996cd5
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/CanDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1020,18 +1020,18 @@ void CanDevice::Interrupt() noexcept
{
hw->REG(IR) = ir;

if (ir & CAN_(IR_RF0N))
constexpr unsigned int rxFifo0WaitingIndex = (unsigned int)RxBufferNumber::fifo0;
if ((ir & CAN_(IR_RF0N)) && (rxBuffersWaiting & (1u << rxFifo0WaitingIndex)))
{
constexpr unsigned int waitingIndex = (unsigned int)RxBufferNumber::fifo0;
TaskBase::GiveFromISR(rxTaskWaiting[waitingIndex]);
rxBuffersWaiting &= ~(1u << waitingIndex);
TaskBase::GiveFromISR(rxTaskWaiting[rxFifo0WaitingIndex]);
rxBuffersWaiting &= ~(1u << rxFifo0WaitingIndex);
}

if (ir & CAN_(IR_RF1N))
constexpr unsigned int rxFifo1WaitingIndex = (unsigned int)RxBufferNumber::fifo1;
if ((ir & CAN_(IR_RF1N)) && (rxBuffersWaiting & (1u << rxFifo1WaitingIndex)))
{
constexpr unsigned int waitingIndex = (unsigned int)RxBufferNumber::fifo1;
TaskBase::GiveFromISR(rxTaskWaiting[waitingIndex]);
rxBuffersWaiting &= ~(1u << waitingIndex);
TaskBase::GiveFromISR(rxTaskWaiting[rxFifo1WaitingIndex]);
rxBuffersWaiting &= ~(1u << rxFifo1WaitingIndex);
}

if (ir & CAN_(IR_DRX))
Expand Down

0 comments on commit 9996cd5

Please sign in to comment.