diff options
Diffstat (limited to 'nuttx/arch/arm/src/stm32/stm32_can.c')
-rwxr-xr-x | nuttx/arch/arm/src/stm32/stm32_can.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/stm32/stm32_can.c b/nuttx/arch/arm/src/stm32/stm32_can.c index 2be900ab2..46e01797b 100755 --- a/nuttx/arch/arm/src/stm32/stm32_can.c +++ b/nuttx/arch/arm/src/stm32/stm32_can.c @@ -690,6 +690,7 @@ static int can_rx0interrupt(int irq, void *context) FAR struct stm32_can_s *priv; uint8_t data[CAN_MAXDATALEN]; uint32_t regval; + int npending; int id; int rtr; int dlc; @@ -715,6 +716,15 @@ static int can_rx0interrupt(int irq, void *context) #endif priv = dev->cd_priv; + /* Verify that a message is pending in FIFO 0 */ + + regval = can_getreg(priv, STM32_CAN_RF0R_OFFSET); + npending = (regval & CAN_RFR_FMP_MASK) >> CAN_RFR_FMP_SHIFT; + if (npending < 1) + { + return OK; + } + /* Get the CAN identifier. Only standard 11-bit IDs are supported */ regval = can_getreg(priv, STM32_CAN_RI0R_OFFSET); |