📄 artx_can.lst
字号:
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 + -