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