📄 can_ex1.cod
字号:
*** Disassembly of Segment '?PR?CAN_hw_init?T?CAN_hw':
FILE: 'CAN_hw.c'
0000045C CAN_hw_init?T: ; FUNCTION START
182: CAN_ERROR CAN_hw_init (U32 ctrl, U32 baudrate) {
0000045C B510 PUSH {R4,LR}
0000045E ---- Variable 'baudrate' assigned to Register 'R1' ----
0000045E 1C02 MOV R2,R0 ; ctrl
00000460 ---- Variable 'ctrl' assigned to Register 'R2' ----
00000460 ; SCOPE-START
183: U32 ctrl0 = ctrl-1; /* Controller index 0 .. x-1 */
00000460 1C10 MOV R0,R2 ; ctrl
00000462 3801 SUB R0,#0x1
00000464 ---- Variable 'ctrl0' assigned to Register 'R0' ----
184: regCAN_AF *ptrcan_af = CAN_AF_BASE;
00000464 4B0D LDR R3,[R15,#52] ; PoolRef @0x49C
00000466 ---- Variable 'ptrcan_af' assigned to Register 'R3' ----
185: regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
00000466 1C02 MOV R2,R0 ; ctrl0
00000468 0092 LSL R2,R2,#0x2 ; ctrl0
0000046A 480D LDR R0,[R15,#52] ; PoolRef @0x4A0 ; CAN_BASE
0000046C 5884 LDR R4,[R0,R2]
0000046E ---- Variable 'ptrcan' assigned to Register 'R4' ----
187: ptrcan_af->AFMR = 1; /* Disable acceptance filter */
0000046E 2201 MOV R2,#0x1
00000470 1C18 MOV R0,R3 ; ptrcan_af
00000472 6002 STR R2,[R0,#0x0] ; ptrcan_af
188: ptrcan->CANMOD = 1; /* Enter reset mode */
00000474 2201 MOV R2,#0x1
00000476 1C20 MOV R0,R4 ; ptrcan
00000478 6002 STR R2,[R0,#0x0] ; ptrcan
189: ptrcan->CANIER = 0; /* Disable all interrupts */
0000047A 2000 MOV R0,#0x0
0000047C 1C22 MOV R2,R4 ; ptrcan
0000047E 6110 STR R0,[R2,#0x10]
190: ptrcan->CANGSR = 0; /* Clear status register */
00000480 2000 MOV R0,#0x0
00000482 1C22 MOV R2,R4 ; ptrcan
00000484 6090 STR R0,[R2,#0x8]
191: ptrcan->CANBTR = CAN_calc_baudrate(baudrate); /* Set bit timing */
00000486 1C08 MOV R0,R1 ; baudrate
00000488 F000 BL CAN_calc_baudrate?T ; T=0x08D9 (1)
0000048A FA26 BL CAN_calc_baudrate?T ; T=0x08D9 (2)
0000048C 1C21 MOV R1,R4 ; ptrcan
0000048E 6148 STR R0,[R1,#0x14]
192: ptrcan->CANIER = 0x0603; /* Enable Tx and Rx interrupt */
00000490 4804 LDR R0,[R15,#16] ; PoolRef @0x4A4
00000492 1C21 MOV R1,R4 ; ptrcan
00000494 6108 STR R0,[R1,#0x10]
194: return CAN_OK;
00000496 2000 MOV R0,#0x0
00000498 ; SCOPE-END
195: }
00000498 BD10 POP {R4,PC}
0000049A ; END 'CAN_hw_init?T'
LARM LINKER/LOCATER V2.32a 03/15/2007 08:58:24 PAGE 14
0000049A ALIGN 4
0000049C E003C000 DD 0xE003C000 ; POOL-Entry U=1
000004A0 40000008 DD CAN_BASE ; POOL-Entry U=1
000004A4 00000603 DD 0x603 ; POOL-Entry U=1
*** Disassembly of Segment '?PR?CAN_hw_start?T?CAN_hw':
FILE: 'CAN_hw.c'
000004A8 CAN_hw_start?T: ; FUNCTION START
207: CAN_ERROR CAN_hw_start (U32 ctrl) {
000004A8 1C01 MOV R1,R0 ; ctrl
000004AA ---- Variable 'ctrl' assigned to Register 'R1' ----
000004AA ; SCOPE-START
208: U32 ctrl0 = ctrl-1; /* Controller index 0 .. x-1 */
000004AA 1C08 MOV R0,R1 ; ctrl
000004AC 3801 SUB R0,#0x1
000004AE ---- Variable 'ctrl0' assigned to Register 'R0' ----
209: regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
000004AE 1C01 MOV R1,R0 ; ctrl0
000004B0 0089 LSL R1,R1,#0x2 ; ctrl0
000004B2 4803 LDR R0,[R15,#12] ; PoolRef @0x4C0 ; CAN_BASE
000004B4 5842 LDR R2,[R0,R1]
000004B6 ---- Variable 'ptrcan' assigned to Register 'R2' ----
211: ptrcan->CANMOD = 0; /* Enter normal operating mode */
000004B6 2100 MOV R1,#0x0
000004B8 1C10 MOV R0,R2 ; ptrcan
000004BA 6001 STR R1,[R0,#0x0] ; ptrcan
213: return CAN_OK;
000004BC 2000 MOV R0,#0x0
000004BE ; SCOPE-END
214: }
000004BE 4770 BX R14
000004C0 ; END 'CAN_hw_start?T'
000004C0 40000008 DD CAN_BASE ; POOL-Entry U=1
*** Disassembly of Segment '?PR?CAN_hw_tx_empty?T?CAN_hw':
FILE: 'CAN_hw.c'
000004C4 CAN_hw_tx_empty?T: ; FUNCTION START
226: CAN_ERROR CAN_hw_tx_empty (U32 ctrl) {
000004C4 1C01 MOV R1,R0 ; ctrl
000004C6 ---- Variable 'ctrl' assigned to Register 'R1' ----
000004C6 ; SCOPE-START
227: U32 ctrl0 = ctrl-1; /* Controller index 0 .. x-1 */
000004C6 1C08 MOV R0,R1 ; ctrl
000004C8 3801 SUB R0,#0x1
000004CA ---- Variable 'ctrl0' assigned to Register 'R0' ----
228: regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
000004CA 1C01 MOV R1,R0 ; ctrl0
000004CC 0089 LSL R1,R1,#0x2 ; ctrl0
000004CE 4805 LDR R0,[R15,#20] ; PoolRef @0x4E4 ; CAN_BASE
000004D0 5841 LDR R1,[R0,R1]
000004D2 ---- Variable 'ptrcan' assigned to Register 'R1' ----
230: if (!(ptrcan->CANSR & 0x00000004)) /* Transmitter 1 busy */
000004D2 1C08 MOV R0,R1 ; ptrcan
000004D4 69C0 LDR R0,[R0,#0x1C]
000004D6 2104 MOV R1,#0x4
000004D8 4208 TST R0,R1
000004DA D101 BNE L_11 ; T=0x000004E0
231: return CAN_TX_BUSY_ERROR;
000004DC 2004 MOV R0,#0x4
000004DE E000 B L_12 ; T=0x000004E2
000004E0 L_11:
233: return CAN_OK;
000004E0 2000 MOV R0,#0x0
LARM LINKER/LOCATER V2.32a 03/15/2007 08:58:24 PAGE 15
000004E2 ; SCOPE-END
234: }
000004E2 L_12:
000004E2 4770 BX R14
000004E4 ; END 'CAN_hw_tx_empty?T'
000004E4 40000008 DD CAN_BASE ; POOL-Entry U=1
*** Disassembly of Segment '?PR?CAN_hw_wr?T?CAN_hw':
FILE: 'CAN_hw.c'
000004E8 CAN_hw_wr?A PROC ARM
000004E8 E59FC000 LDR R12,[R15]
000004EC E12FFF1C BX R12
000004F0 000004F5 DD CAN_hw_wr?T
000004F4 ENDP
000004F4 CAN_hw_wr?T: ; FUNCTION START
247: CAN_ERROR CAN_hw_wr (U32 ctrl, CAN_msg *msg) {
000004F4 B410 PUSH {R4}
000004F6 ---- Variable 'msg' assigned to Register 'R1' ----
000004F6 1C02 MOV R2,R0 ; ctrl
000004F8 ---- Variable 'ctrl' assigned to Register 'R2' ----
000004F8 ; SCOPE-START
248: U32 ctrl0 = ctrl-1; /* Controller index 0 .. x-1 */
000004F8 1C10 MOV R0,R2 ; ctrl
000004FA 3801 SUB R0,#0x1
000004FC ---- Variable 'ctrl0' assigned to Register 'R0' ----
250: regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
000004FC 1C02 MOV R2,R0 ; ctrl0
000004FE 0092 LSL R2,R2,#0x2 ; ctrl0
00000500 481B LDR R0,[R15,#108] ; PoolRef @0x570 ; CAN_BASE
00000502 5882 LDR R2,[R0,R2]
00000504 ---- Variable 'ptrcan' assigned to Register 'R2' ----
252: CANData = (((U32) msg->len) << 16) & 0x000F0000 |
00000504 1C08 MOV R0,R1 ; msg
00000506 7B80 LDRB R0,[R0,#0xE]
00000508 2801 CMP R0,#0x1
0000050A D101 BNE L_13 ; T=0x00000510
0000050C 2001 MOV R0,#0x1
0000050E E000 B L_14 ; T=0x00000512
00000510 L_13:
00000510 2000 MOV R0,#0x0
00000512 L_14:
00000512 07C0 LSL R0,R0,#0x1F
00000514 1C0B MOV R3,R1 ; msg
00000516 7B1B LDRB R3,[R3,#0xC]
00000518 1C1C MOV R4,R3
0000051A 0424 LSL R4,R4,#0x10
0000051C 4B15 LDR R3,[R15,#84] ; PoolRef @0x574
0000051E 401C AND R4,R3
00000520 4304 ORR R4,R0
00000522 1C08 MOV R0,R1 ; msg
00000524 7BC0 LDRB R0,[R0,#0xF]
00000526 2801 CMP R0,#0x1
00000528 D101 BNE L_15 ; T=0x0000052E
0000052A 2001 MOV R0,#0x1
0000052C E000 B L_16 ; T=0x00000530
0000052E L_15:
0000052E 2000 MOV R0,#0x0
00000530 L_16:
00000530 0780 LSL R0,R0,#0x1E
00000532 4304 ORR R4,R0
00000534 ---- Variable 'CANData' assigned to Register 'R4' ----
256: if (ptrcan->CANSR & 0x00000004) { /* Transmit buffer 1 free */
00000534 1C10 MOV R0,R2 ; ptrcan
LARM LINKER/LOCATER V2.32a 03/15/2007 08:58:24 PAGE 16
00000536 69C0 LDR R0,[R0,#0x1C]
00000538 2304 MOV R3,#0x4
0000053A 4218 TST R0,R3
0000053C D012 BEQ L_17 ; T=0x00000564
257: ptrcan->CANTF1 = CANData; /* Write frame informations */
0000053E 1C20 MOV R0,R4 ; CANData
00000540 1C13 MOV R3,R2 ; ptrcan
00000542 6318 STR R0,[R3,#0x30]
258: ptrcan->CANTID1 = msg->id; /* Write CAN message identifier */
00000544 1C08 MOV R0,R1 ; msg
00000546 6800 LDR R0,[R0,#0x0] ; msg
00000548 1C13 MOV R3,R2 ; ptrcan
0000054A 6358 STR R0,[R3,#0x34]
259: ptrcan->CANTDA1 = *(U32 *) &msg->data[0]; /* Write first 4 data bytes */
0000054C 1C08 MOV R0,R1 ; msg
0000054E 6840 LDR R0,[R0,#0x4]
00000550 1C13 MOV R3,R2 ; ptrcan
00000552 6398 STR R0,[R3,#0x38]
260: ptrcan->CANTDB1 = *(U32 *) &msg->data[4]; /* Write second 4 data bytes */
00000554 1C08 MOV R0,R1 ; msg
00000556 6880 LDR R0,[R0,#0x8]
00000558 1C11 MOV R1,R2 ; ptrcan
0000055A 63C8 STR R0,[R1,#0x3C]
261: ptrcan->CANCMR = 0x30; /* Start self-transmission */
0000055C 2030 MOV R0,#0x30
0000055E 1C11 MOV R1,R2 ; ptrcan
00000560 6048 STR R0,[R1,#0x4]
262: }
00000562 E001 B L_18 ; T=0x00000568
00000564 L_17:
264: return CAN_TX_BUSY_ERROR;
00000564 2004 MOV R0,#0x4
00000566 E000 B L_19 ; T=0x0000056A
00000568 L_18:
266: return CAN_OK;
00000568 2000 MOV R0,#0x0
0000056A ; SCOPE-END
267: }
0000056A L_19:
0000056A BC10 POP {R4}
0000056C 4770 BX R14
0000056E ; END 'CAN_hw_wr?T'
0000056E ALIGN 4
00000570 40000008 DD CAN_BASE ; POOL-Entry U=1
00000574 000F0000 DD 0xF0000 ; POOL-Entry U=1
*** Disassembly of Segment '?PR?CAN_hw_set?T?CAN_hw':
FILE: 'CAN_hw.c'
00000578 CAN_hw_set?T: ; FUNCTION START
319: CAN_ERROR CAN_hw_set (U32 ctrl, CAN_msg *msg) {
323: return CAN_NOT_IMPLEMENTED_ERROR;
00000578 2001 MOV R0,#0x1
324: }
0000057A 4770 BX R14
0000057C ; END 'CAN_hw_set?T'
*** Disassembly of Segment '?PR?CAN_hw_rx_object?T?CAN_hw':
FILE: 'CAN_hw.c'
0000057C CAN_hw_rx_object?T: ; FUNCTION START
340: CAN_ERROR CAN_hw_rx_object (U32 ctrl, U32 ch, U32 id, CAN_FORMAT format) {
0000057C B5F8 PUSH {R3-R7,LR}
0000057E 1C16 MOV R6,R2 ; id
00000580 ---- Variable 'id' assigned to Register 'R6' ----
LARM LINKER/LOCATER V2.32a 03/15/2007 08:58:24 PAGE 17
00000580 1C05 MOV R5,R0 ; ctrl
00000582 ---- Variable 'ctrl' assigned to Register 'R5' ----
00000582 B084 SUB R13,#0x10
00000584 ---- Variable 'cnt1' assigned to Register 'R4' ----
00000584 ---- Variable 'buf0' assigned to Register 'R3' ----
00000584 ; SCOPE-START
343: regCAN_AF *ptrcan_af = CAN_AF_BASE;
00000584 48CB LDR R0,[R15,#812] ; PoolRef @0x8B4
00000586 9000 STR R0,[R13,#0x0] ; ptrcan_af
344: regCAN_AFRAM *ptrcan_afram = CAN_AFRAM_BASE;
00000588 49CB LDR R1,[R15,#812] ; PoolRef @0x8B8
0000058A ---- Variable 'ptrcan_afram' assigned to Register 'R1' ----
352: if ((((CAN_std_cnt + 1) >> 1) + CAN_ext_cnt) >= 512)
0000058A 48CC LDR R0,[R15,#816] ; PoolRef @0x8BC ; CAN_std_cnt
0000058C 8802 LDRH R2,[R0,#0x0] ; CAN_std_cnt
0000058E 0412 LSL R2,R2,#0x10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -