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

📄 stm32f10x_can.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 4 页
字号:
00035e  f401f401          AND      r1,r1,#0x20000
000362  ea40ea40          ORR      r0,r0,r1,LSR #16
;;;497          State |= ((CAN->TSR & CAN_TSR_TME2) >> 28);
000366  f8d2f8d2          LDR      r1,[r2,#0x408]
00036a  f3c1f3c1          UBFX     r1,r1,#28,#1
00036e  4301              ORRS     r1,r1,r0
                  |L1.880|
;;;498          break;
;;;499        default:
;;;500          State = CANTXFAILED;
;;;501          break;
;;;502      }
;;;503    
;;;504      switch (State)
000370  b341              CBZ      r1,|L1.964|
000372  2905              CMP      r1,#5
000374  d028              BEQ      |L1.968|
000376  2907              CMP      r1,#7
000378  d128              BNE      |L1.972|
;;;505      {
;;;506          /* transmit pending  */
;;;507        case (0x0): State = CANTXPENDING;
;;;508          break;
;;;509          /* transmit failed  */
;;;510        case (0x5): State = CANTXFAILED;
;;;511          break;
;;;512          /* transmit succedeed  */
;;;513        case (0x7): State = CANTXOK;
00037a  2001              MOVS     r0,#1
;;;514          break;
00037c  e027              B        |L1.974|
                  |L1.894|
00037e  f8d2f8d2          LDR      r0,[r2,#0x408]
000382  f000f000          AND      r0,r0,#1
000386  ea41ea41          ORR      r0,r1,r0,LSL #2
00038a  f8d2f8d2          LDR      r1,[r2,#0x408]
00038e  f001f001          AND      r1,r1,#2
000392  4308              ORRS     r0,r0,r1
000394  f8d2f8d2          LDR      r1,[r2,#0x408]
000398  f3c1f3c1          UBFX     r1,r1,#26,#1
00039c  4301              ORRS     r1,r1,r0
00039e  e7e7              B        |L1.880|
                  |L1.928|
0003a0  f8d2f8d2          LDR      r0,[r2,#0x408]
0003a4  f400f400          AND      r0,r0,#0x100
0003a8  ea41ea41          ORR      r0,r1,r0,LSR #6
0003ac  f8d2f8d2          LDR      r1,[r2,#0x408]
0003b0  f401f401          AND      r1,r1,#0x200
0003b4  ea40ea40          ORR      r0,r0,r1,LSR #8
0003b8  f8d2f8d2          LDR      r1,[r2,#0x408]
0003bc  f3c1f3c1          UBFX     r1,r1,#27,#1
0003c0  4301              ORRS     r1,r1,r0
0003c2  e7d5              B        |L1.880|
                  |L1.964|
0003c4  2002              MOVS     r0,#2
0003c6  e002              B        |L1.974|
                  |L1.968|
0003c8  2000              MOVS     r0,#0
0003ca  e000              B        |L1.974|
                  |L1.972|
;;;515        default:
;;;516          State = CANTXFAILED;
0003cc  2000              MOVS     r0,#0
                  |L1.974|
;;;517          break;
;;;518      }
;;;519    
;;;520      return State;
0003ce  b2c0              UXTB     r0,r0
;;;521    }
0003d0  4770              BX       lr
;;;522    
                          ENDP

                  CAN_CancelTransmit PROC
;;;535      /* abort transmission */
;;;536      switch (Mailbox)
0003d2  490d              LDR      r1,|L1.1032|
0003d4  b150              CBZ      r0,|L1.1004|
0003d6  2801              CMP      r0,#1
0003d8  d00f              BEQ      |L1.1018|
0003da  2802              CMP      r0,#2
0003dc  d105              BNE      |L1.1002|
;;;537      {
;;;538        case (0): CAN->TSR |= CAN_TSR_ABRQ0;
;;;539          break;
;;;540        case (1): CAN->TSR |= CAN_TSR_ABRQ1;
;;;541          break;
;;;542        case (2): CAN->TSR |= CAN_TSR_ABRQ2;
0003de  f8d1f8d1          LDR      r0,[r1,#0x408]
0003e2  f440f440          ORR      r0,r0,#0x800000
0003e6  f8c1f8c1          STR      r0,[r1,#0x408]
                  |L1.1002|
;;;543          break;
;;;544        default:
;;;545          break;
;;;546      }
;;;547    }
0003ea  4770              BX       lr
                  |L1.1004|
0003ec  f8d1f8d1          LDR      r0,[r1,#0x408]
0003f0  f040f040          ORR      r0,r0,#0x80
0003f4  f8c1f8c1          STR      r0,[r1,#0x408]
0003f8  4770              BX       lr
                  |L1.1018|
0003fa  f8d1f8d1          LDR      r0,[r1,#0x408]
0003fe  f440f440          ORR      r0,r0,#0x8000
000402  f8c1f8c1          STR      r0,[r1,#0x408]
000406  4770              BX       lr
                  |L1.1032|
000408  40006000          DCD      0x40006000
                          ENDP

                  CAN_FIFORelease PROC
;;;561      /* Release FIFO0 */
;;;562      if (FIFONumber == CAN_FIFO0)
00040c  4a98              LDR      r2,|L1.1648|
00040e  2120              MOVS     r1,#0x20
000410  b910              CBNZ     r0,|L1.1048|
;;;563      {
;;;564        CAN->RF0R = CAN_RF0R_RFOM0;
000412  f8c2f8c2          STR      r1,[r2,#0x40c]
;;;565      }
;;;566      /* Release FIFO1 */
;;;567      else /* FIFONumber == CAN_FIFO1 */
;;;568      {
;;;569        CAN->RF1R = CAN_RF1R_RFOM1;
;;;570      }
;;;571    }
000416  4770              BX       lr
                  |L1.1048|
000418  f8c2f8c2          STR      r1,[r2,#0x410]
00041c  4770              BX       lr
;;;572    
                          ENDP

                  CAN_MessagePending PROC
;;;580    u8 CAN_MessagePending(u8 FIFONumber)
;;;581    {
00041e  4601              MOV      r1,r0
;;;582      u8 MessagePending=0;
000420  2000              MOVS     r0,#0
;;;583    
;;;584      /* Check the parameters */
;;;585      assert(IS_CAN_FIFO(FIFONumber));
;;;586    
;;;587      if (FIFONumber == CAN_FIFO0)
000422  4a93              LDR      r2,|L1.1648|
000424  b921              CBNZ     r1,|L1.1072|
;;;588      {
;;;589        MessagePending = (u8)(CAN->RF0R&(u32)0x03);
000426  f8d2f8d2          LDR      r0,[r2,#0x40c]
00042a  f000f000          AND      r0,r0,#3
                  |L1.1070|
;;;590      }
;;;591      else if (FIFONumber == CAN_FIFO1)
;;;592      {
;;;593        MessagePending = (u8)(CAN->RF1R&(u32)0x03);
;;;594      }
;;;595      else
;;;596      {
;;;597        MessagePending = 0;
;;;598      }
;;;599      return MessagePending;
;;;600    }
00042e  4770              BX       lr
                  |L1.1072|
000430  2901              CMP      r1,#1
000432  d1fc              BNE      |L1.1070|
000434  f8d2f8d2          LDR      r0,[r2,#0x410]
000438  f000f000          AND      r0,r0,#3
00043c  4770              BX       lr
;;;601    
                          ENDP

                  CAN_Receive PROC
;;;615      /* Get the Id */
;;;616      RxMessage->StdId = (u32)0x000007FF & (CAN->sFIFOMailBox[FIFONumber].RIR >> 21);
00043e  4a8c              LDR      r2,|L1.1648|
000440  eb02eb02          ADD      r2,r2,r0,LSL #4
000444  f8d2f8d2          LDR      r3,[r2,#0x5b0]
000448  0d5b              LSRS     r3,r3,#21
00044a  600b              STR      r3,[r1,#0]
;;;617      RxMessage->ExtId = (u32)0x0003FFFF & (CAN->sFIFOMailBox[FIFONumber].RIR >> 3);
00044c  f8d2f8d2          LDR      r3,[r2,#0x5b0]
000450  f3c3f3c3          UBFX     r3,r3,#3,#18
000454  604b              STR      r3,[r1,#4]
;;;618    
;;;619      RxMessage->IDE = (u32)0x00000004 & CAN->sFIFOMailBox[FIFONumber].RIR;
000456  f8d2f8d2          LDR      r3,[r2,#0x5b0]
00045a  f003f003          AND      r3,r3,#4
00045e  720b              STRB     r3,[r1,#8]
;;;620      RxMessage->RTR = (u32)0x00000002 & CAN->sFIFOMailBox[FIFONumber].RIR;
000460  f8d2f8d2          LDR      r3,[r2,#0x5b0]
000464  f003f003          AND      r3,r3,#2
000468  724b              STRB     r3,[r1,#9]
;;;621    
;;;622      /* Get the DLC */
;;;623      RxMessage->DLC = (u32)0x0000000F & CAN->sFIFOMailBox[FIFONumber].RDTR;
00046a  f8d2f8d2          LDR      r3,[r2,#0x5b4]
00046e  f003f003          AND      r3,r3,#0xf
000472  728b              STRB     r3,[r1,#0xa]
;;;624    
;;;625      /* Get the FMI */
;;;626      RxMessage->FMI = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDTR >> 8);
000474  f8d2f8d2          LDR      r3,[r2,#0x5b4]
000478  0a1b              LSRS     r3,r3,#8
00047a  74cb              STRB     r3,[r1,#0x13]
;;;627    
;;;628      /* Get the data field */
;;;629      RxMessage->Data[0] = (u32)0x000000FF & CAN->sFIFOMailBox[FIFONumber].RDLR;
00047c  f8d2f8d2          LDR      r3,[r2,#0x5b8]
000480  72cb              STRB     r3,[r1,#0xb]
;;;630      RxMessage->Data[1] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 8);
000482  f8d2f8d2          LDR      r3,[r2,#0x5b8]
000486  0a1b              LSRS     r3,r3,#8
000488  730b              STRB     r3,[r1,#0xc]
;;;631      RxMessage->Data[2] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 16);
00048a  f8d2f8d2          LDR      r3,[r2,#0x5b8]
00048e  0c1b              LSRS     r3,r3,#16
000490  734b              STRB     r3,[r1,#0xd]
;;;632      RxMessage->Data[3] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 24);
000492  f8d2f8d2          LDR      r3,[r2,#0x5b8]
000496  0e1b              LSRS     r3,r3,#24
000498  738b              STRB     r3,[r1,#0xe]
;;;633    
;;;634      RxMessage->Data[4] = (u32)0x000000FF & CAN->sFIFOMailBox[FIFONumber].RDHR;
00049a  f8d2f8d2          LDR      r3,[r2,#0x5bc]
00049e  73cb              STRB     r3,[r1,#0xf]
;;;635      RxMessage->Data[5] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 8);
0004a0  f8d2f8d2          LDR      r3,[r2,#0x5bc]
0004a4  0a1b              LSRS     r3,r3,#8
0004a6  740b              STRB     r3,[r1,#0x10]
;;;636      RxMessage->Data[6] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 16);
0004a8  f8d2f8d2          LDR      r3,[r2,#0x5bc]
0004ac  0c1b              LSRS     r3,r3,#16
0004ae  744b              STRB     r3,[r1,#0x11]
;;;637      RxMessage->Data[7] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 24);
0004b0  f8d2f8d2          LDR      r2,[r2,#0x5bc]
0004b4  0e12              LSRS     r2,r2,#24
0004b6  748a              STRB     r2,[r1,#0x12]
;;;638    
;;;639      /* Release the FIFO */
;;;640      CAN_FIFORelease(FIFONumber);
0004b8  e7fe              B        CAN_FIFORelease
;;;641    }
;;;642    
                          ENDP

                  CAN_Sleep PROC
;;;654      /* Sleep mode entering request */
;;;655      CAN->MCR |= CAN_MCR_SLEEP;
0004ba  496e              LDR      r1,|L1.1652|
0004bc  6808              LDR      r0,[r1,#0]
0004be  f040f040          ORR      r0,r0,#2
0004c2  6008              STR      r0,[r1,#0]
;;;656      SleepStatus = CANSLEEPOK;
0004c4  2001              MOVS     r0,#1
;;;657    
;;;658      /* Sleep mode status */
;;;659      if ((CAN->MCR&CAN_MCR_SLEEP) == 0)
0004c6  6809              LDR      r1,[r1,#0]
0004c8  f011f011          TST      r1,#2
0004cc  d100              BNE      |L1.1232|
;;;660      {
;;;661        /* Sleep mode not entered */
;;;662        SleepStatus = CANSLEEPFAILED;
0004ce  2000              MOVS     r0,#0
                  |L1.1232|
;;;663      }
;;;664    
;;;665      /* At this step, sleep mode status */
;;;666      return SleepStatus;
;;;667    }
0004d0  4770              BX       lr
;;;668    
                          ENDP

                  CAN_WakeUp PROC
;;;678    {
;;;679      u8 WakeUpStatus = 0;
0004d2  2000              MOVS     r0,#0
;;;680    
;;;681      /* Wake up request */
;;;682      CAN->MCR &= ~CAN_MCR_SLEEP;
0004d4  4967              LDR      r1,|L1.1652|
0004d6  680a              LDR      r2,[r1,#0]
0004d8  f022f022          BIC      r2,r2,#2
0004dc  600a              STR      r2,[r1,#0]
;;;683      WakeUpStatus = CANWAKEUPFAILED;
;;;684    
;;;685      /* Sleep mode status */
;;;686      if ((CAN->MCR&CAN_MCR_SLEEP) == 0)
0004de  6809              LDR      r1,[r1,#0]
0004e0  f011f011          TST      r1,#2
0004e4  d100              BNE      |L1.1256|
;;;687      {
;;;688        /* Sleep mode exited */
;;;689        WakeUpStatus = CANWAKEUPOK;
0004e6  2001              MOVS     r0,#1
                  |L1.1256|
;;;690      }
;;;691    
;;;692      /* At this step, sleep mode status */
;;;693      return WakeUpStatus;
;;;694    }
0004e8  4770              BX       lr
;;;695    
                          ENDP

                  CAN_GetFlagStatus PROC
;;;705    FlagStatus CAN_GetFlagStatus(u32 CAN_FLAG)
;;;706    {
0004ea  4601              MOV      r1,r0
;;;707      FlagStatus bitstatus = RESET;
0004ec  2000              MOVS     r0,#0
;;;708    
;;;709      /* Check the parameters */
;;;710      assert(IS_CAN_FLAG(CAN_FLAG));
;;;711    
;;;712      /* Check the status of the specified CAN flag */
;;;713      if ((CAN->ESR & CAN_FLAG) != (u32)RESET)
0004ee  4a62              LDR      r2,|L1.1656|
0004f0  6812              LDR      r2,[r2,#0]
0004f2  420a              TST      r2,r1
0004f4  d000              BEQ      |L1.1272|
;;;714      {
;;;715        /* CAN_FLAG is set */

⌨️ 快捷键说明

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