summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/stm32/stm32_can.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/stm32/stm32_can.c')
-rwxr-xr-xnuttx/arch/arm/src/stm32/stm32_can.c10
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);