Browse Source

[bsp] stm32f10x correct fifo1 alloc error

Aubr.Cool 6 years ago
parent
commit
771d958e6f
1 changed files with 6 additions and 3 deletions
  1. 6 3
      bsp/stm32f10x/drivers/bxcan.c

+ 6 - 3
bsp/stm32f10x/drivers/bxcan.c

@@ -512,12 +512,14 @@ static rt_err_t bxcancalcbaseoff(struct stm_bxcan *pbxcan, rt_int32_t hdr,
     rt_uint32_t fifo1start, fifo1end;
     rt_uint32_t fifo1start, fifo1end;
     rt_uint32_t ptr;
     rt_uint32_t ptr;
     fifo0start = 0;
     fifo0start = 0;
-    fifo0end = pbxcan->filtermap[0].id32mask_cnt
+    fifo0end = fifo0start 
+               + pbxcan->filtermap[0].id32mask_cnt
                + pbxcan->filtermap[0].id32bit_cnt
                + pbxcan->filtermap[0].id32bit_cnt
                + pbxcan->filtermap[0].id16mask_cnt
                + pbxcan->filtermap[0].id16mask_cnt
                + pbxcan->filtermap[0].id16bit_cnt ;
                + pbxcan->filtermap[0].id16bit_cnt ;
     fifo1start = pbxcan->fifo1filteroff * 4;
     fifo1start = pbxcan->fifo1filteroff * 4;
-    fifo1end = pbxcan->filtermap[1].id32mask_cnt
+    fifo1end = fifo1start 
+               + pbxcan->filtermap[1].id32mask_cnt
                + pbxcan->filtermap[1].id32bit_cnt
                + pbxcan->filtermap[1].id32bit_cnt
                + pbxcan->filtermap[1].id16mask_cnt
                + pbxcan->filtermap[1].id16mask_cnt
                + pbxcan->filtermap[1].id16bit_cnt ;
                + pbxcan->filtermap[1].id16bit_cnt ;
@@ -525,17 +527,18 @@ static rt_err_t bxcancalcbaseoff(struct stm_bxcan *pbxcan, rt_int32_t hdr,
     {
     {
         *pbase = 0;
         *pbase = 0;
         ptr = 0;
         ptr = 0;
+	hdr -= fifo0start; 
     }
     }
     else if (hdr >= fifo1start && hdr < fifo1end)
     else if (hdr >= fifo1start && hdr < fifo1end)
     {
     {
         *pbase = pbxcan->fifo1filteroff;
         *pbase = pbxcan->fifo1filteroff;
         ptr = 1;
         ptr = 1;
+	hdr -= fifo1start; 
     }
     }
     else
     else
     {
     {
         return RT_ERROR;
         return RT_ERROR;
     }
     }
-    ptr = 0;
     if (hdr > pbxcan->filtermap[ptr].id32mask_cnt)
     if (hdr > pbxcan->filtermap[ptr].id32mask_cnt)
     {
     {
         hdr -= pbxcan->filtermap[ptr].id32mask_cnt;
         hdr -= pbxcan->filtermap[ptr].id32mask_cnt;