⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_can.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;280    
;;;281      }
;;;282    
;;;283      /* Filter Mode */
;;;284      if (CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdMask)
0001c2  7843              LDRB     r3,[r0,#1]
0001c4  b92b              CBNZ     r3,|L1.466|
;;;285      {
;;;286        /*Id/Mask mode for the filter*/
;;;287        CAN->FM0R &= ~(u32)FilterNumber_BitPos;
0001c6  f8d2f8d2          LDR      r3,[r2,#0x604]
0001ca  438b              BICS     r3,r3,r1
0001cc  f8c2f8c2          STR      r3,[r2,#0x604]
0001d0  e004              B        |L1.476|
                  |L1.466|
;;;288      }
;;;289      else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */
;;;290      {
;;;291        /*Identifier list mode for the filter*/
;;;292        CAN->FM0R |= (u32)FilterNumber_BitPos;
0001d2  f8d2f8d2          LDR      r3,[r2,#0x604]
0001d6  430b              ORRS     r3,r3,r1
0001d8  f8c2f8c2          STR      r3,[r2,#0x604]
                  |L1.476|
;;;293      }
;;;294    
;;;295      /* Filter FIFO assignment */
;;;296      if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_FilterFIFO0)
0001dc  8983              LDRH     r3,[r0,#0xc]
0001de  b923              CBNZ     r3,|L1.490|
;;;297      {
;;;298        /* FIFO 0 assignation for the filter */
;;;299        CAN->FFA0R &= ~(u32)FilterNumber_BitPos;
0001e0  f8d2f8d2          LDR      r3,[r2,#0x614]
0001e4  438b              BICS     r3,r3,r1
0001e6  f8c2f8c2          STR      r3,[r2,#0x614]
                  |L1.490|
;;;300      }
;;;301      if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_FilterFIFO1)
0001ea  8983              LDRH     r3,[r0,#0xc]
0001ec  2b01              CMP      r3,#1
0001ee  d104              BNE      |L1.506|
;;;302      {
;;;303        /* FIFO 1 assignation for the filter */
;;;304        CAN->FFA0R |= (u32)FilterNumber_BitPos;
0001f0  f8d2f8d2          LDR      r3,[r2,#0x614]
0001f4  430b              ORRS     r3,r3,r1
0001f6  f8c2f8c2          STR      r3,[r2,#0x614]
                  |L1.506|
;;;305      }
;;;306      
;;;307      /* Filter activation */
;;;308      if (CAN_FilterInitStruct->CAN_FilterActivation == ENABLE)
0001fa  7b80              LDRB     r0,[r0,#0xe]
0001fc  2801              CMP      r0,#1
0001fe  d104              BNE      |L1.522|
;;;309      {
;;;310        CAN->FA0R |= FilterNumber_BitPos;
000200  f8d2f8d2          LDR      r0,[r2,#0x61c]
000204  4308              ORRS     r0,r0,r1
000206  f8c2f8c2          STR      r0,[r2,#0x61c]
                  |L1.522|
;;;311      }
;;;312    
;;;313      /* Leave the initialisation mode for the filter */
;;;314      CAN->FMR &= ~CAN_FMR_FINIT;
00020a  f8d2f8d2          LDR      r0,[r2,#0x600]
00020e  f020f020          BIC      r0,r0,#1
000212  f8c2f8c2          STR      r0,[r2,#0x600]
;;;315    }
000216  4770              BX       lr
;;;316    
                          ENDP

                  CAN_StructInit PROC
;;;329      /* Initialize the time triggered communication mode */
;;;330      CAN_InitStruct->CAN_TTCM = DISABLE;
000218  2100              MOVS     r1,#0
00021a  7001              STRB     r1,[r0,#0]
;;;331    
;;;332      /* Initialize the automatic bus-off management */
;;;333      CAN_InitStruct->CAN_ABOM = DISABLE;
00021c  7041              STRB     r1,[r0,#1]
;;;334    
;;;335      /* Initialize the automatic wake-up mode */
;;;336      CAN_InitStruct->CAN_AWUM = DISABLE;
00021e  7081              STRB     r1,[r0,#2]
;;;337    
;;;338      /* Initialize the no automatic retransmission */
;;;339      CAN_InitStruct->CAN_NART = DISABLE;
000220  70c1              STRB     r1,[r0,#3]
;;;340    
;;;341      /* Initialize the receive FIFO locked mode */
;;;342      CAN_InitStruct->CAN_RFLM = DISABLE;
000222  7101              STRB     r1,[r0,#4]
;;;343    
;;;344      /* Initialize the transmit FIFO priority */
;;;345      CAN_InitStruct->CAN_TXFP = DISABLE;
000224  7141              STRB     r1,[r0,#5]
;;;346    
;;;347      /* Initialize the CAN_Mode member */
;;;348      CAN_InitStruct->CAN_Mode = CAN_Mode_Normal;
000226  7181              STRB     r1,[r0,#6]
;;;349    
;;;350      /* Initialize the CAN_SJW member */
;;;351      CAN_InitStruct->CAN_SJW = CAN_SJW_0tq;
000228  71c1              STRB     r1,[r0,#7]
;;;352    
;;;353      /* Initialize the CAN_BS1 member */
;;;354      CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq;
00022a  2103              MOVS     r1,#3
00022c  7201              STRB     r1,[r0,#8]
;;;355    
;;;356      /* Initialize the CAN_BS2 member */
;;;357      CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq;
00022e  2102              MOVS     r1,#2
000230  7241              STRB     r1,[r0,#9]
;;;358    
;;;359      /* Initialize the CAN_Prescaler member */
;;;360      CAN_InitStruct->CAN_Prescaler = 1;
000232  2101              MOVS     r1,#1
000234  8141              STRH     r1,[r0,#0xa]
;;;361    }
000236  4770              BX       lr
;;;362    
                          ENDP

                  CAN_ITConfig PROC
;;;383    
;;;384      if (NewState != DISABLE)
000238  4a73              LDR      r2,|L1.1032|
00023a  b129              CBZ      r1,|L1.584|
;;;385      {
;;;386        /* Enable the selected CAN interrupt */
;;;387        CAN->IER |= CAN_IT;
00023c  f8d2f8d2          LDR      r1,[r2,#0x414]
000240  4308              ORRS     r0,r0,r1
000242  f8c2f8c2          STR      r0,[r2,#0x414]
;;;388      }
;;;389      else
;;;390      {
;;;391        /* Disable the selected CAN interrupt */
;;;392        CAN->IER &= ~CAN_IT;
;;;393      }
;;;394    }
000246  4770              BX       lr
                  |L1.584|
000248  f8d2f8d2          LDR      r1,[r2,#0x414]
00024c  ea21ea21          BIC      r0,r1,r0
000250  f8c2f8c2          STR      r0,[r2,#0x414]
000254  4770              BX       lr
;;;395    
                          ENDP

                  CAN_Transmit PROC
;;;405    u8 CAN_Transmit(CanTxMsg* TxMessage)
;;;406    {
000256  b410              PUSH     {r4}
;;;407      u8 TransmitMailbox = 0;
000258  2200              MOVS     r2,#0
;;;408    
;;;409      /* Check the parameters */
;;;410      assert(IS_CAN_STDID(TxMessage->StdId));
;;;411      assert(IS_CAN_EXTID(TxMessage->StdId));
;;;412      assert(IS_CAN_IDTYPE(TxMessage->IDE));
;;;413      assert(IS_CAN_RTR(TxMessage->RTR));
;;;414      assert(IS_CAN_DLC(TxMessage->DLC));
;;;415    
;;;416      /* Select one empty transmit mailbox */
;;;417      if ((CAN->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
00025a  4b6b              LDR      r3,|L1.1032|
00025c  f8d3f8d3          LDR      r1,[r3,#0x408]
000260  f011f011          TST      r1,#0x4000000
000264  d10e              BNE      |L1.644|
;;;418      {
;;;419        TransmitMailbox = 0;
;;;420      }
;;;421      else if ((CAN->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
000266  f8d3f8d3          LDR      r1,[r3,#0x408]
00026a  f011f011          TST      r1,#0x8000000
00026e  d001              BEQ      |L1.628|
;;;422      {
;;;423        TransmitMailbox = 1;
000270  2201              MOVS     r2,#1
000272  e007              B        |L1.644|
                  |L1.628|
;;;424      }
;;;425      else if ((CAN->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
000274  f8d3f8d3          LDR      r1,[r3,#0x408]
000278  f011f011          TST      r1,#0x10000000
00027c  d001              BEQ      |L1.642|
;;;426      {
;;;427        TransmitMailbox = 2;
00027e  2202              MOVS     r2,#2
000280  e000              B        |L1.644|
                  |L1.642|
;;;428      }
;;;429      else
;;;430      {
;;;431        TransmitMailbox = CAN_NO_MB;
000282  2204              MOVS     r2,#4
                  |L1.644|
;;;432      }
;;;433    
;;;434      if (TransmitMailbox != CAN_NO_MB)
000284  2a04              CMP      r2,#4
000286  d058              BEQ      |L1.826|
;;;435      {
;;;436        /* Set up the Id */
;;;437        TxMessage->StdId &= (u32)0x000007FF;
000288  6801              LDR      r1,[r0,#0]
;;;438        TxMessage->StdId = TxMessage->StdId << 21;
00028a  0549              LSLS     r1,r1,#21
00028c  6001              STR      r1,[r0,#0]
;;;439        TxMessage->ExtId &= (u32)0x0003FFFF;
00028e  6841              LDR      r1,[r0,#4]
000290  f3c1f3c1          UBFX     r1,r1,#0,#18
;;;440        TxMessage->ExtId <<= 3;
000294  00c9              LSLS     r1,r1,#3
000296  6041              STR      r1,[r0,#4]
;;;441    
;;;442        CAN->sTxMailBox[TransmitMailbox].TIR &= CAN_TMIDxR_TXRQ;
000298  eb03eb03          ADD      r1,r3,r2,LSL #4
00029c  f8d1f8d1          LDR      r3,[r1,#0x580]
0002a0  f003f003          AND      r3,r3,#1
0002a4  f8c1f8c1          STR      r3,[r1,#0x580]
;;;443        CAN->sTxMailBox[TransmitMailbox].TIR |= (TxMessage->StdId | TxMessage->ExtId |
0002a8  f8d0f8d0          LDR      r12,[r0,#4]
0002ac  6803              LDR      r3,[r0,#0]
0002ae  7a44              LDRB     r4,[r0,#9]
0002b0  ea43ea43          ORR      r3,r3,r12
0002b4  f890f890          LDRB     r12,[r0,#8]
0002b8  ea4cea4c          ORR      r12,r12,r4
0002bc  ea43ea43          ORR      r3,r3,r12
0002c0  f8d1f8d1          LDR      r12,[r1,#0x580]
0002c4  ea43ea43          ORR      r3,r3,r12
0002c8  f8c1f8c1          STR      r3,[r1,#0x580]
;;;444                                                TxMessage->IDE | TxMessage->RTR);
;;;445    
;;;446        /* Set up the DLC */
;;;447        TxMessage->DLC &= (u8)0x0000000F;
0002cc  7a83              LDRB     r3,[r0,#0xa]
0002ce  f003f003          AND      r3,r3,#0xf
0002d2  7283              STRB     r3,[r0,#0xa]
;;;448        CAN->sTxMailBox[TransmitMailbox].TDTR &= (u32)0xFFFFFFF0;
0002d4  f8d1f8d1          LDR      r3,[r1,#0x584]
0002d8  f023f023          BIC      r3,r3,#0xf
0002dc  f8c1f8c1          STR      r3,[r1,#0x584]
;;;449        CAN->sTxMailBox[TransmitMailbox].TDTR |= TxMessage->DLC;
0002e0  f8d1f8d1          LDR      r3,[r1,#0x584]
0002e4  f890f890          LDRB     r12,[r0,#0xa]
0002e8  ea43ea43          ORR      r3,r3,r12
0002ec  f8c1f8c1          STR      r3,[r1,#0x584]
;;;450    
;;;451        /* Set up the data field */
;;;452        CAN->sTxMailBox[TransmitMailbox].TDLR = (((u32)TxMessage->Data[3] << 24) | 
0002f0  7ac3              LDRB     r3,[r0,#0xb]
0002f2  f890f890          LDRB     r12,[r0,#0xe]
0002f6  7b04              LDRB     r4,[r0,#0xc]
0002f8  ea43ea43          ORR      r3,r3,r12,LSL #24
0002fc  f890f890          LDRB     r12,[r0,#0xd]
000300  ea4fea4f          LSL      r12,r12,#16
000304  ea4cea4c          ORR      r12,r12,r4,LSL #8
000308  ea43ea43          ORR      r3,r3,r12
00030c  f8c1f8c1          STR      r3,[r1,#0x588]
;;;453                                                 ((u32)TxMessage->Data[2] << 16) |
;;;454                                                 ((u32)TxMessage->Data[1] << 8) | 
;;;455                                                 ((u32)TxMessage->Data[0]));
;;;456        CAN->sTxMailBox[TransmitMailbox].TDHR = (((u32)TxMessage->Data[7] << 24) | 
000310  7bc3              LDRB     r3,[r0,#0xf]
000312  f890f890          LDRB     r12,[r0,#0x12]
000316  ea43ea43          ORR      r3,r3,r12,LSL #24
00031a  f890f890          LDRB     r12,[r0,#0x11]
00031e  7c00              LDRB     r0,[r0,#0x10]
000320  ea4fea4f          LSL      r12,r12,#16
000324  ea4cea4c          ORR      r0,r12,r0,LSL #8
000328  4318              ORRS     r0,r0,r3
00032a  f8c1f8c1          STR      r0,[r1,#0x58c]
;;;457                                                 ((u32)TxMessage->Data[6] << 16) |
;;;458                                                 ((u32)TxMessage->Data[5] << 8) |
;;;459                                                 ((u32)TxMessage->Data[4]));
;;;460    
;;;461        /* Request transmission */
;;;462        CAN->sTxMailBox[TransmitMailbox].TIR |= CAN_TMIDxR_TXRQ;
00032e  f8d1f8d1          LDR      r0,[r1,#0x580]
000332  f040f040          ORR      r0,r0,#1
000336  f8c1f8c1          STR      r0,[r1,#0x580]
                  |L1.826|
;;;463      }
;;;464    
;;;465      return TransmitMailbox;
;;;466    }
00033a  bc10              POP      {r4}
00033c  4610              MOV      r0,r2
00033e  4770              BX       lr
;;;467    
                          ENDP

                  CAN_TransmitStatus PROC
;;;479      /* RQCP, TXOK and TME bits */
;;;480      u32 State = 0;
000340  2100              MOVS     r1,#0
;;;481    
;;;482      /* Check the parameters */
;;;483      assert(IS_CAN_TRANSMITMAILBOX(TransmitMailbox));
;;;484    
;;;485      switch (TransmitMailbox)
000342  4a31              LDR      r2,|L1.1032|
000344  b1d8              CBZ      r0,|L1.894|
000346  2801              CMP      r0,#1
000348  d02a              BEQ      |L1.928|
00034a  2802              CMP      r0,#2
00034c  d110              BNE      |L1.880|
;;;486      {
;;;487        case (0): State |= ((CAN->TSR & CAN_TSR_RQCP0) << 2);
;;;488          State |= ((CAN->TSR & CAN_TSR_TXOK0) >> 0);
;;;489          State |= ((CAN->TSR & CAN_TSR_TME0) >> 26);
;;;490          break;
;;;491        case (1): State |= ((CAN->TSR & CAN_TSR_RQCP1) >> 6);
;;;492          State |= ((CAN->TSR & CAN_TSR_TXOK1) >> 8);
;;;493          State |= ((CAN->TSR & CAN_TSR_TME1) >> 27);
;;;494          break;
;;;495        case (2): State |= ((CAN->TSR & CAN_TSR_RQCP2) >> 14);
00034e  f8d2f8d2          LDR      r0,[r2,#0x408]
000352  f400f400          AND      r0,r0,#0x10000
000356  ea41ea41          ORR      r0,r1,r0,LSR #14
;;;496          State |= ((CAN->TSR & CAN_TSR_TXOK2) >> 16);
00035a  f8d2f8d2          LDR      r1,[r2,#0x408]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -