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

📄 can_hw.lst

📁 can bus 源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 00000002  ---- Variable 'ctrl' assigned to Register 'R1' ----
 00000002            ; SCOPE-START
  208:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 00000002  1C08      MOV         R0,R1 ; ctrl
 00000004  3801      SUB         R0,#0x1
 00000006  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  209:   regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
 00000006  1C01      MOV         R1,R0 ; ctrl0
 00000008  0089      LSL         R1,R1,#0x2 ; ctrl0
 0000000A  4800      LDR         R0,=CAN_BASE ; CAN_BASE
 0000000C  5842      LDR         R2,[R0,R1]
 0000000E  ---- Variable 'ptrcan' assigned to Register 'R2' ----
  211:   ptrcan->CANMOD = 0;                 /* Enter normal operating mode         */
 0000000E  2100      MOV         R1,#0x0
 00000010  1C10      MOV         R0,R2 ; ptrcan
 00000012  6001      STR         R1,[R0,#0x0] ; ptrcan
  213:   return CAN_OK;
 00000014  2000      MOV         R0,#0x0
ARM COMPILER V2.32a,  CAN_hw                                                               15/03/07  08:58:24  PAGE 17  

 00000016            ; SCOPE-END
  214: }
 00000016  4770      BX          R14
 00000018          ENDP ; 'CAN_hw_start?T'


*** CODE SEGMENT '?PR?CAN_hw_tx_empty?T?CAN_hw':
  226: CAN_ERROR CAN_hw_tx_empty (U32 ctrl)  {
 00000000  1C01      MOV         R1,R0 ; ctrl
 00000002  ---- Variable 'ctrl' assigned to Register 'R1' ----
 00000002            ; SCOPE-START
  227:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 00000002  1C08      MOV         R0,R1 ; ctrl
 00000004  3801      SUB         R0,#0x1
 00000006  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  228:   regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
 00000006  1C01      MOV         R1,R0 ; ctrl0
 00000008  0089      LSL         R1,R1,#0x2 ; ctrl0
 0000000A  4800      LDR         R0,=CAN_BASE ; CAN_BASE
 0000000C  5841      LDR         R1,[R0,R1]
 0000000E  ---- Variable 'ptrcan' assigned to Register 'R1' ----
  230:   if (!(ptrcan->CANSR & 0x00000004))  /* Transmitter 1 busy                  */
 0000000E  1C08      MOV         R0,R1 ; ptrcan
 00000010  69C0      LDR         R0,[R0,#0x1C]
 00000012  2104      MOV         R1,#0x4
 00000014  4208      TST         R0,R1
 00000016  D101      BNE         L_11  ; T=0x0000001C
  231:     return CAN_TX_BUSY_ERROR;
 00000018  2004      MOV         R0,#0x4
 0000001A  E000      B           L_12  ; T=0x0000001E
 0000001C          L_11:
  233:   return CAN_OK;
 0000001C  2000      MOV         R0,#0x0
 0000001E            ; SCOPE-END
  234: }
 0000001E          L_12:
 0000001E  4770      BX          R14
 00000020          ENDP ; 'CAN_hw_tx_empty?T'


*** CODE SEGMENT '?PR?CAN_hw_wr?T?CAN_hw':
  247: CAN_ERROR CAN_hw_wr (U32 ctrl, CAN_msg *msg)  {
 00000000  B410      PUSH        {R4}
 00000002  ---- Variable 'msg' assigned to Register 'R1' ----
 00000002  1C02      MOV         R2,R0 ; ctrl
 00000004  ---- Variable 'ctrl' assigned to Register 'R2' ----
 00000004            ; SCOPE-START
  248:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 00000004  1C10      MOV         R0,R2 ; ctrl
 00000006  3801      SUB         R0,#0x1
 00000008  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  250:   regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
 00000008  1C02      MOV         R2,R0 ; ctrl0
 0000000A  0092      LSL         R2,R2,#0x2 ; ctrl0
 0000000C  4800      LDR         R0,=CAN_BASE ; CAN_BASE
 0000000E  5882      LDR         R2,[R0,R2]
 00000010  ---- Variable 'ptrcan' assigned to Register 'R2' ----
  252:   CANData       = (((U32) msg->len) << 16)          & 0x000F0000 | 
 00000010  1C08      MOV         R0,R1 ; msg
 00000012  7B80      LDRB        R0,[R0,#0xE]
 00000014  2801      CMP         R0,#0x1
 00000016  D101      BNE         L_13  ; T=0x0000001C
 00000018  2001      MOV         R0,#0x1
 0000001A  E000      B           L_14  ; T=0x0000001E
 0000001C          L_13:
 0000001C  2000      MOV         R0,#0x0
 0000001E          L_14:
 0000001E  07C0      LSL         R0,R0,#0x1F
 00000020  1C0B      MOV         R3,R1 ; msg
 00000022  7B1B      LDRB        R3,[R3,#0xC]
ARM COMPILER V2.32a,  CAN_hw                                                               15/03/07  08:58:24  PAGE 18  

 00000024  1C1C      MOV         R4,R3
 00000026  0424      LSL         R4,R4,#0x10
 00000028  4800      LDR         R3,=0xF0000
 0000002A  401C      AND         R4,R3
 0000002C  4304      ORR         R4,R0
 0000002E  1C08      MOV         R0,R1 ; msg
 00000030  7BC0      LDRB        R0,[R0,#0xF]
 00000032  2801      CMP         R0,#0x1
 00000034  D101      BNE         L_15  ; T=0x0000003A
 00000036  2001      MOV         R0,#0x1
 00000038  E000      B           L_16  ; T=0x0000003C
 0000003A          L_15:
 0000003A  2000      MOV         R0,#0x0
 0000003C          L_16:
 0000003C  0780      LSL         R0,R0,#0x1E
 0000003E  4304      ORR         R4,R0
 00000040  ---- Variable 'CANData' assigned to Register 'R4' ----
  256:   if (ptrcan->CANSR & 0x00000004)  {  /* Transmit buffer 1 free              */
 00000040  1C10      MOV         R0,R2 ; ptrcan
 00000042  69C0      LDR         R0,[R0,#0x1C]
 00000044  2304      MOV         R3,#0x4
 00000046  4218      TST         R0,R3
 00000048  D012      BEQ         L_17  ; T=0x00000070
  257:     ptrcan->CANTF1  = CANData;        /* Write frame informations            */
 0000004A  1C20      MOV         R0,R4 ; CANData
 0000004C  1C13      MOV         R3,R2 ; ptrcan
 0000004E  6318      STR         R0,[R3,#0x30]
  258:     ptrcan->CANTID1 = msg->id;        /* Write CAN message identifier        */
 00000050  1C08      MOV         R0,R1 ; msg
 00000052  6800      LDR         R0,[R0,#0x0] ; msg
 00000054  1C13      MOV         R3,R2 ; ptrcan
 00000056  6358      STR         R0,[R3,#0x34]
  259:     ptrcan->CANTDA1 = *(U32 *) &msg->data[0]; /* Write first 4 data bytes    */
 00000058  1C08      MOV         R0,R1 ; msg
 0000005A  6840      LDR         R0,[R0,#0x4]
 0000005C  1C13      MOV         R3,R2 ; ptrcan
 0000005E  6398      STR         R0,[R3,#0x38]
  260:     ptrcan->CANTDB1 = *(U32 *) &msg->data[4]; /* Write second 4 data bytes   */
 00000060  1C08      MOV         R0,R1 ; msg
 00000062  6880      LDR         R0,[R0,#0x8]
 00000064  1C11      MOV         R1,R2 ; ptrcan
 00000066  63C8      STR         R0,[R1,#0x3C]
  261:     ptrcan->CANCMR  = 0x30;           /* Start self-transmission             */
 00000068  2030      MOV         R0,#0x30
 0000006A  1C11      MOV         R1,R2 ; ptrcan
 0000006C  6048      STR         R0,[R1,#0x4]
  262:   }
 0000006E  E001      B           L_18  ; T=0x00000074
 00000070          L_17:
  264:     return CAN_TX_BUSY_ERROR;
 00000070  2004      MOV         R0,#0x4
 00000072  E000      B           L_19  ; T=0x00000076
 00000074          L_18:
  266:   return CAN_OK;
 00000074  2000      MOV         R0,#0x0
 00000076            ; SCOPE-END
  267: }
 00000076          L_19:
 00000076  BC10      POP         {R4}
 00000078  4770      BX          R14
 0000007A          ENDP ; 'CAN_hw_wr?T'


*** CODE SEGMENT '?PR?CAN_hw_rd?T?CAN_hw':
  280: static void CAN_hw_rd (U32 ctrl, CAN_msg *msg)  {
 00000000  B410      PUSH        {R4}
 00000002  ---- Variable 'msg' assigned to Register 'R1' ----
 00000002  1C02      MOV         R2,R0 ; ctrl
ARM COMPILER V2.32a,  CAN_hw                                                               15/03/07  08:58:24  PAGE 19  

 00000004  ---- Variable 'ctrl' assigned to Register 'R2' ----
 00000004            ; SCOPE-START
  281:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 00000004  1C10      MOV         R0,R2 ; ctrl
 00000006  3801      SUB         R0,#0x1
 00000008  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  284:   regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
 00000008  1C02      MOV         R2,R0 ; ctrl0
 0000000A  0092      LSL         R2,R2,#0x2 ; ctrl0
 0000000C  4800      LDR         R0,=CAN_BASE ; CAN_BASE
 0000000E  5883      LDR         R3,[R0,R2]
 00000010  ---- Variable 'ptrcan' assigned to Register 'R3' ----
  287:   CANData = ptrcan->CANRFS;
 00000010  1C18      MOV         R0,R3 ; ptrcan
 00000012  6A02      LDR         R2,[R0,#0x20]
 00000014  ---- Variable 'CANData' assigned to Register 'R2' ----
  288:   msg->format   = (CANData & 0x80000000) == 0x80000000;
 00000014  1C10      MOV         R0,R2 ; CANData
 00000016  4800      LDR         R4,=0x80000000
 00000018  4020      AND         R0,R4
 0000001A  4800      LDR         R4,=0x80000000
 0000001C  42E0      CMN         R0,R4
 0000001E  D101      BNE         L_20  ; T=0x00000024
 00000020  2001      MOV         R0,#0x1
 00000022  E000      B           L_21  ; T=0x00000026
 00000024          L_20:
 00000024  2000      MOV         R0,#0x0
 00000026          L_21:
 00000026  1C0C      MOV         R4,R1 ; msg
 00000028  73A0      STRB        R0,[R4,#0xE]
  289:   msg->type     = (CANData & 0x40000000) == 0x40000000;
 0000002A  1C10      MOV         R0,R2 ; CANData
 0000002C  4800      LDR         R4,=0x40000000
 0000002E  4020      AND         R0,R4
 00000030  4800      LDR         R4,=0xC0000000
 00000032  42E0      CMN         R0,R4
 00000034  D101      BNE         L_22  ; T=0x0000003A
 00000036  2001      MOV         R0,#0x1
 00000038  E000      B           L_23  ; T=0x0000003C
 0000003A          L_22:
 0000003A  2000      MOV         R0,#0x0
 0000003C          L_23:
 0000003C  1C0C      MOV         R4,R1 ; msg
 0000003E  73E0      STRB        R0,[R4,#0xF]
  290:   msg->len      = ((U8)(CANData >> 16)) & 0x0F;
 00000040  1C10      MOV         R0,R2 ; CANData
 00000042  0C00      LSR         R0,R0,#0x10 ; CANData
 00000044  220F      MOV         R2,#0xF
 00000046  4010      AND         R0,R2
 00000048  1C0A      MOV         R2,R1 ; msg
 0000004A  7310      STRB        R0,[R2,#0xC]
  293:   msg->id = ptrcan->CANRID;
 0000004C  1C18      MOV         R0,R3 ; ptrcan
 0000004E  6A42      LDR         R2,[R0,#0x24]
 00000050  1C08      MOV         R0,R1 ; msg
 00000052  6002      STR         R2,[R0,#0x0] ; msg
  296:   if (msg->type == DATA_FRAME)  {     
 00000054  1C08      MOV         R0,R1 ; msg
 00000056  7BC0      LDRB        R0,[R0,#0xF]
 00000058  2800      CMP         R0,#0x0
 0000005A  D10A      BNE         L_24  ; T=0x00000072
  299:     CANAddr = (U32 *) &msg->data[0];
 0000005C  1C0A      MOV         R2,R1 ; msg
 0000005E  3204      ADD         R2,#0x4
 00000060  ---- Variable 'CANAddr' assigned to Register 'R2' ----
  300:     *CANAddr++ = ptrcan->CANRDA;
ARM COMPILER V2.32a,  CAN_hw                                                               15/03/07  08:58:24  PAGE 20  

 00000060  1C18      MOV         R0,R3 ; ptrcan
 00000062  6A81      LDR         R1,[R0,#0x28]
 00000064  1C10      MOV         R0,R2 ; CANAddr
 00000066  3204      ADD         R2,#0x4
 00000068  6001      STR         R1,[R0,#0x0] ; CANAddr
  303:     *CANAddr   = ptrcan->CANRDB;
 0000006A  1C18      MOV         R0,R3 ; ptrcan
 0000006C  6AC1      LDR         R1,[R0,#0x2C]
 0000006E  1C10      MOV         R0,R2 ; CANAddr
 00000070  6001      STR         R1,[R0,#0x0] ; CANAddr
  304:   }
 00000072          L_24:
 00000072            ; SCOPE-END
  305: }
 00000072  BC10      POP         {R4}
 00000074  4770      BX          R14
 00000076          ENDP ; 'CAN_hw_rd?T'


*** CODE SEGMENT '?PR?CAN_hw_set?T?CAN_hw':
  323:   return CAN_NOT_IMPLEMENTED_ERROR;
 00000000  2001      MOV         R0,#0x1
  324: }
 00000002  4770      BX          R14
 00000004          ENDP ; 'CAN_hw_set?T'


*** CODE SEGMENT '?PR?CAN_hw_rx_object?T?CAN_hw':
  340: CAN_ERROR CAN_hw_rx_object (U32 ctrl, U32 ch, U32 id, CA

⌨️ 快捷键说明

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