فهرست منبع

Merge pull request #2998 from tyustli/can

[bsp] [stm32] fix drv_can.c and can.c bug
Bernard Xiong 5 سال پیش
والد
کامیت
f87dd2e7c4
2فایلهای تغییر یافته به همراه12 افزوده شده و 2 حذف شده
  1. 4 0
      bsp/stm32/libraries/HAL_Drivers/drv_can.c
  2. 8 2
      components/drivers/can/can.c

+ 4 - 0
bsp/stm32/libraries/HAL_Drivers/drv_can.c

@@ -515,7 +515,11 @@ static int _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo)
     /* get len */
     pmsg->len = rxheader.DLC;
     /* get hdr */
+#ifdef BSP_USING_CAN2
     pmsg->hdr = rxheader.FilterMatchIndex;
+#else
+    pmsg->hdr = (rxheader.FilterMatchIndex + 1) >> 1;
+#endif
 
     return RT_EOK;
 }

+ 8 - 2
components/drivers/can/can.c

@@ -853,7 +853,10 @@ void rt_hw_can_isr(struct rt_can_device *can, int event)
             level = rt_hw_interrupt_disable();
             rx_length = can->hdr[hdr].msgs * sizeof(struct rt_can_msg);
             rt_hw_interrupt_enable(level);
-            can->hdr[hdr].filter.ind(&can->parent, can->hdr[hdr].filter.args, hdr, rx_length);
+            if (rx_length)
+            {
+                can->hdr[hdr].filter.ind(&can->parent, can->hdr[hdr].filter.args, hdr, rx_length);
+            }
         }
         else
 #endif
@@ -867,7 +870,10 @@ void rt_hw_can_isr(struct rt_can_device *can, int event)
                 rx_length = rt_list_len(&rx_fifo->uselist)* sizeof(struct rt_can_msg);
                 rt_hw_interrupt_enable(level);
 
-                can->parent.rx_indicate(&can->parent, rx_length);
+                if (rx_length)
+                {
+                    can->parent.rx_indicate(&can->parent, rx_length);
+                }
             }
         }
         break;