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

📄 artx_can.lst

📁 can bus 源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
  268           *  Return:     CAN_ERROR:  Error code
  269           *---------------------------------------------------------------------------*/
  270          
  271          CAN_ERROR CAN_rx_object (U32 ctrl, U32 ch, U32 id, CAN_FORMAT format)  {
  272   1        return (CAN_hw_rx_object (ctrl, ch, id, format));
  273   1      }
  274          
  275          
  276          /*--------------------------- CAN_tx_object ---------------------------------
  277           *
  278           *  Enable transmission of messages on specified controller and channel with 
  279           *  specified identifier
  280           *
  281           *  Parameter:  ctrl:       Index of the hardware CAN controller (1 .. x)
  282           *              ch:         Channel for the message transmission
  283           *              CAN_FORMAT: Format of CAN identifier (standard or extended)
  284           *
  285           *  Return:     CAN_ERROR:  Error code
  286           *---------------------------------------------------------------------------*/
  287          
  288          CAN_ERROR CAN_tx_object (U32 ctrl, U32 ch, CAN_FORMAT format)  {
  289   1        return (CAN_hw_tx_object (ctrl, ch, format));
  290   1      }
  291          
  292          
  293          /*----------------------------------------------------------------------------
  294           * end of file
  295           *---------------------------------------------------------------------------*/
  296          
ARM COMPILER V2.32a,  ARTX_CAN                                                             15/03/07  08:58:24  PAGE 6   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (os_mbx_init?T)
 EXTERN CODE16 (os_mbx_send?T)
 EXTERN CODE16 (os_mbx_wait?T)
 EXTERN CODE16 (os_dly_wait?T)
 EXTERN CODE16 (_init_box?T)
 EXTERN CODE16 (_alloc_box?T)
 EXTERN CODE16 (_free_box?T)
 EXTERN CODE16 (CAN_hw_setup?T)
 EXTERN CODE16 (CAN_hw_init?T)
 EXTERN CODE16 (CAN_hw_start?T)
 EXTERN CODE16 (CAN_hw_tx_empty?T)
 EXTERN CODE16 (CAN_hw_wr?T)
 EXTERN CODE16 (CAN_hw_set?T)
 EXTERN CODE16 (CAN_hw_rx_object?T)
 EXTERN CODE16 (CAN_hw_tx_object?T)



*** PUBLICS:
 PUBLIC         CAN_init?T
 PUBLIC         CAN_start?T
 PUBLIC         CAN_send?T
 PUBLIC         CAN_request?T
 PUBLIC         CAN_set?T
 PUBLIC         CAN_receive?T
 PUBLIC         CAN_rx_object?T
 PUBLIC         CAN_tx_object?T
 PUBLIC         CAN_mpool
 PUBLIC         MBX_tx_ctrl
 PUBLIC         MBX_rx_ctrl
 PUBLIC         wr_to_CAN_hw



*** DATA SEGMENT '?DT0?ARTX_CAN':
 00000000          CAN_mpool:
 00000000            DS          1292
 0000050C          MBX_tx_ctrl:
 0000050C            DS          192
 000005CC          MBX_rx_ctrl:
 000005CC            DS          192
 0000068C          wr_to_CAN_hw:
 0000068C            DS          2
 0000068E          first_run_flag:
 0000068E           BEGIN_INIT
 0000068E  00        DB          0x0
 0000068F           END_INIT



*** CODE SEGMENT '?PR?CAN_init?T?ARTX_CAN':
   63: CAN_ERROR CAN_init (U32 ctrl, U32 baudrate)  {
 00000000  B570      PUSH        {R4-R6,LR}
 00000002  1C0C      MOV         R4,R1 ; baudrate
 00000004  ---- Variable 'baudrate' assigned to Register 'R4' ----
 00000004  1C05      MOV         R5,R0 ; ctrl
 00000006  ---- Variable 'ctrl' assigned to Register 'R5' ----
 00000006  B081      SUB         R13,#0x4
 00000008            ; SCOPE-START
   66:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 00000008  1C2E      MOV         R6,R5 ; ctrl
 0000000A  3E01      SUB         R6,#0x1
 0000000C  ---- Variable 'ctrl0' assigned to Register 'R6' ----
   70:   if (first_run_flag == 0)  {
 0000000C  4800      LDR         R0,=first_run_flag ; first_run_flag
 0000000E  7800      LDRB        R0,[R0,#0x0] ; first_run_flag
 00000010  2800      CMP         R0,#0x0
 00000012  D10B      BNE         L_1  ; T=0x0000002C
ARM COMPILER V2.32a,  ARTX_CAN                                                             15/03/07  08:58:24  PAGE 7   

   71:     first_run_flag = 1;
 00000014  2101      MOV         R1,#0x1
 00000016  4800      LDR         R0,=first_run_flag ; first_run_flag
 00000018  7001      STRB        R1,[R0,#0x0] ; first_run_flag
   72:     if (_init_box (CAN_mpool, sizeof(CAN_mpool), sizeof(CAN_msg)) == 1)
 0000001A  4800      LDR         R0,=CAN_mpool ; CAN_mpool
 0000001C  4800      LDR         R1,=0x50C
 0000001E  2210      MOV         R2,#0x10
 00000020  F7FF      BL          _init_box?T  ; T=0x0001  (1)
 00000022  FFEE      BL          _init_box?T  ; T=0x0001  (2)
 00000024  2801      CMP         R0,#0x1 ; _init_box?T
 00000026  D101      BNE         L_1  ; T=0x0000002C
   73:       return CAN_MEM_POOL_INIT_ERROR;
 00000028  2002      MOV         R0,#0x2
 0000002A  E01A      B           L_3  ; T=0x00000062
   74:   }
 0000002C          L_1:
   76:   os_mbx_init (MBX_tx_ctrl[ctrl0], sizeof(MBX_tx_ctrl[ctrl0]));
 0000002C  1C31      MOV         R1,R6 ; ctrl0
 0000002E  2060      MOV         R0,#0x60
 00000030  4341      MUL         R1,R0
 00000032  4800      LDR         R0,=MBX_tx_ctrl ; MBX_tx_ctrl
 00000034  1840      ADD         R0,R1 ; MBX_tx_ctrl
 00000036  2160      MOV         R1,#0x60
 00000038  F7FF      BL          os_mbx_init?T  ; T=0x0001  (1)
 0000003A  FFE2      BL          os_mbx_init?T  ; T=0x0001  (2)
   77:   os_mbx_init (MBX_rx_ctrl[ctrl0], sizeof(MBX_rx_ctrl[ctrl0]));
 0000003C  1C31      MOV         R1,R6 ; ctrl0
 0000003E  2060      MOV         R0,#0x60
 00000040  4341      MUL         R1,R0
 00000042  4800      LDR         R0,=MBX_rx_ctrl ; MBX_rx_ctrl
 00000044  1840      ADD         R0,R1 ; MBX_rx_ctrl
 00000046  2160      MOV         R1,#0x60
 00000048  F7FF      BL          os_mbx_init?T  ; T=0x0001  (1)
 0000004A  FFDA      BL          os_mbx_init?T  ; T=0x0001  (2)
   79:   error_code = CAN_hw_setup ();
 0000004C  F7FF      BL          CAN_hw_setup?T  ; T=0x0001  (1)
 0000004E  FFD8      BL          CAN_hw_setup?T  ; T=0x0001  (2)
 00000050  9000      STR         R0,[R13,#0x0] ; error_code
   80:   if (error_code != CAN_OK) 
 00000052  9800      LDR         R0,[R13,#0x0] ; error_code
 00000054  2800      CMP         R0,#0x0
 00000056  D000      BEQ         L_4  ; T=0x0000005A
   81:     return error_code;
 00000058  E003      B           L_3  ; T=0x00000062
 0000005A          L_4:
   83:   return (CAN_hw_init (ctrl, baudrate));
 0000005A  1C28      MOV         R0,R5 ; ctrl
 0000005C  1C21      MOV         R1,R4 ; baudrate
 0000005E  F7FF      BL          CAN_hw_init?T  ; T=0x0001  (1)
 00000060  FFCF      BL          CAN_hw_init?T  ; T=0x0001  (2)
 00000062            ; SCOPE-END
   84: }
 00000062          L_3:
 00000062  B001      ADD         R13,#0x4
 00000064  BC70      POP         {R4-R6}
 00000066  BC08      POP         {R3}
 00000068  4718      BX          R3
 0000006A          ENDP ; 'CAN_init?T'


*** CODE SEGMENT '?PR?CAN_start?T?ARTX_CAN':
   96: CAN_ERROR CAN_start (U32 ctrl)  {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; ctrl
 00000004  ---- Variable 'ctrl' assigned to Register 'R1' ----
   97:   return (CAN_hw_start (ctrl));
 00000004  1C08      MOV         R0,R1 ; ctrl
ARM COMPILER V2.32a,  ARTX_CAN                                                             15/03/07  08:58:24  PAGE 8   

 00000006  F7FF      BL          CAN_hw_start?T  ; T=0x0001  (1)
 00000008  FFFB      BL          CAN_hw_start?T  ; T=0x0001  (2)
   98: }
 0000000A  BC08      POP         {R3}
 0000000C  4718      BX          R3
 0000000E          ENDP ; 'CAN_start?T'


*** CODE SEGMENT '?PR?CAN_push?T?ARTX_CAN':
  113: static CAN_ERROR CAN_push (U32 ctrl, CAN_msg *msg, U16 timeout)  {
 00000000  B5F0      PUSH        {R4-R7,LR}
 00000002  1C15      MOV         R5,R2 ; timeout
 00000004  ---- Variable 'timeout' assigned to Register 'R5' ----
 00000004  1C0F      MOV         R7,R1 ; msg
 00000006  ---- Variable 'msg' assigned to Register 'R7' ----
 00000006  1C04      MOV         R4,R0 ; ctrl
 00000008  ---- Variable 'ctrl' assigned to Register 'R4' ----
 00000008            ; SCOPE-START
  115:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 00000008  1C26      MOV         R6,R4 ; ctrl
 0000000A  3E01      SUB         R6,#0x1
 0000000C  ---- Variable 'ctrl0' assigned to Register 'R6' ----
  117:   if (CAN_hw_tx_empty (ctrl) == 0)  { /* Transmit hardware free for sending  */
 0000000C  1C20      MOV         R0,R4 ; ctrl
 0000000E  F7FF      BL          CAN_hw_tx_empty?T  ; T=0x0001  (1)
 00000010  FFF7      BL          CAN_hw_tx_empty?T  ; T=0x0001  (2)
 00000012  2800      CMP         R0,#0x0 ; CAN_hw_tx_empty?T
 00000014  D10C      BNE         L_6  ; T=0x00000030
  118:     wr_to_CAN_hw[ctrl0] = 1;          /* Writing to transmit hardware        */
 00000016  2001      MOV         R0,#0x1
 00000018  1C32      MOV         R2,R6 ; ctrl0
 0000001A  4800      LDR         R1,=wr_to_CAN_hw ; wr_to_CAN_hw
 0000001C  5488      STRB        R0,[R1,R2]
  119:     CAN_hw_wr (ctrl, msg);            /* Send message                        */
 0000001E  1C20      MOV         R0,R4 ; ctrl
 00000020  1C39      MOV         R1,R7 ; msg
 00000022  F7FF      BL          CAN_hw_wr?T  ; T=0x0001  (1)
 00000024  FFED      BL          CAN_hw_wr?T  ; T=0x0001  (2)
  120:     wr_to_CAN_hw[ctrl0] = 0;          /* Writing to transmit hardware finished */
 00000026  2000      MOV         R0,#0x0
 00000028  1C32      MOV         R2,R6 ; ctrl0
 0000002A  4800      LDR         R1,=wr_to_CAN_hw ; wr_to_CAN_hw
 0000002C  5488      STRB        R0,[R1,R2]
  121:   }
 0000002E  E024      B           L_7  ; T=0x0000007A
 00000030          L_6:
  124:     ptrmsg = _alloc_box (CAN_mpool);
 00000030  4800      LDR         R0,=CAN_mpool ; CAN_mpool
 00000032  DF06      SWI         0x6 ; _alloc_box?T
 00000034  1C04      MOV         R4,R0 ; ptrmsg
 00000036  ---- Variable 'ptrmsg' assigned to Register 'R4' ----
  125:     if (ptrmsg != NULL)
 00000036  1C20      MOV         R0,R4 ; ptrmsg
 00000038  2800      CMP         R0,#0x0 ; ptrmsg
 0000003A  D006      BEQ         L_8  ; T=0x0000004A
  126:       *ptrmsg = *msg;
 0000003C  1C39      MOV         R1,R7 ; msg
 0000003E  1C20      MOV         R0,R4 ; ptrmsg
 00000040  2204      MOV         R2,#0x4
 00000042          L_29:
 00000042  C908      LDMIA       R1!,{R3}
 00000044  C008      STMIA       R0!,{R3}
 00000046  1E52      SUB         R2,R2,#0x1
 00000048  D1FB      BNE         L_29  ; T=0x00000042
 0000004A          L_8:
  128:       if (os_mbx_send (MBX_tx_ctrl[ctrl0], ptrmsg, timeout) == OS_R_TMO) {
 0000004A  1C31      MOV         R1,R6 ; ctrl0
 0000004C  2060      MOV         R0,#0x60
ARM COMPILER V2.32a,  ARTX_CAN                                                             15/03/07  08:58:24  PAGE 9   

 0000004E  4341      MUL         R1,R0
 00000050  4800      LDR         R0,=MBX_tx_ctrl ; MBX_tx_ctrl
 00000052  1840      ADD         R0,R1 ; MBX_tx_ctrl
 00000054  1C29      MOV         R1,R5 ; timeout
 00000056  040A      LSL         R2,R1,#0x10 ; timeout
 00000058  0C12      LSR         R2,R2,#0x10
 0000005A  1C21      MOV         R1,R4 ; ptrmsg
 0000005C  F7FF      BL          os_mbx_send?T  ; T=0x0001  (1)
 0000005E  FFD0      BL          os_mbx_send?T  ; T=0x0001  (2)
 00000060  2801      CMP         R0,#0x1 ; os_mbx_send?T
 00000062  D108      BNE         L_9  ; T=0x00000076
  129:         if (_free_box (CAN_mpool, ptrmsg) == 1)
 00000064  4800      LDR         R0,=CAN_mpool ; CAN_mpool
 00000066  1C21      MOV         R1,R4 ; ptrmsg
 00000068  DF07      SWI         0x7 ; _free_box?T
 0000006A  2801      CMP         R0,#0x1 ; _free_box?T
 0000006C  D101      BNE         L_10  ; T=0x00000072
  130:           return CAN_DEALLOC_MEM_ERROR;
 0000006E  2007      MOV         R0,#0x7
 00000070  E004      B           L_11  ; T=0x0000007C
 00000072          L_10:
  132:         return CAN_TIMEOUT_ERROR;
 00000072  2008      MOV         R0,#0x8
 00000074  E002      B           L_11  ; T=0x0000007C
  133:       }
 00000076          L_9:
  135:       return CAN_ALLOC_MEM_ERROR;
 00000076  2006      MOV         R0,#0x6
 00000078  E000      B           L_11  ; T=0x0000007C
  136:   }
 0000007A          L_7:
  137:   return CAN_OK;
 0000007A  2000      MOV         R0,#0x0
 0000007C            ; SCOPE-END
  138: }
 0000007C          L_11:
 0000007C  BCF0      POP         {R4-R7}
 0000007E  BC08      POP         {R3}
 00000080  4718      BX          R3

⌨️ 快捷键说明

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