📄 can_ex1.lst
字号:
00000002 ---- Variable 'LED_state' assigned to Register 'R1' ----
51: IOCLR1 = 0x00FF0000;
00000002 4800 LDR R2,=0xFF0000
00000004 4800 LDR R0,=0xE002801C
00000006 6002 STR R2,[R0,#0x0]
52: IOSET1 = ((unsigned int) LED_state) << 16 & 0x00FF0000;
00000008 1C08 MOV R0,R1 ; LED_state
ARM COMPILER V2.32a, CAN_Ex1 15/03/07 08:58:24 PAGE 5
0000000A 0601 LSL R1,R0,#0x18 ; LED_state
0000000C 0E09 LSR R1,R1,#0x18
0000000E 0409 LSL R1,R1,#0x10
00000010 4800 LDR R0,=0xFF0000
00000012 4001 AND R1,R0
00000014 4800 LDR R0,=0xE0028014
00000016 6001 STR R1,[R0,#0x0]
53: }
00000018 4770 BX R14
0000001A ENDP ; 'LED_Byte?T'
*** CODE SEGMENT '?PR?task_send_CAN?T?CAN_Ex1':
62: void task_send_CAN (void) __task {
00000000 B084 SUB R13,#0x10
00000002 ; SCOPE-START
65: 1, 2, STANDARD_FORMAT, DATA_FRAME };
00000002 4800 LDR R1,=?tpl?0001 ; ?tpl?0001
00000004 A800 ADD R0,R13,#0x0
00000006 2204 MOV R2,#0x4
00000008 L_18:
00000008 C908 LDMIA R1!,{R3}
0000000A C008 STMIA R0!,{R3}
0000000C 1E52 SUB R2,R2,#0x1
0000000E D1FB BNE L_18 ; T=0x00000008
67: CAN_init (1, 500000); /* CAN controller 1 init, 500 kbit/s */
00000010 2001 MOV R0,#0x1
00000012 4800 LDR R1,=0x7A120
00000014 F7FF BL CAN_init?T ; T=0x0001 (1)
00000016 FFF4 BL CAN_init?T ; T=0x0001 (2)
68: CAN_init (2, 500000); /* CAN controller 2 init, 500 kbit/s */
00000018 2002 MOV R0,#0x2
0000001A 4800 LDR R1,=0x7A120
0000001C F7FF BL CAN_init?T ; T=0x0001 (1)
0000001E FFF0 BL CAN_init?T ; T=0x0001 (2)
74: CAN_rx_object (1, 2, 33, STANDARD_FORMAT); /* Enable reception of */
00000020 2001 MOV R0,#0x1
00000022 2102 MOV R1,#0x2
00000024 2221 MOV R2,#0x21
00000026 2300 MOV R3,#0x0
00000028 F7FF BL CAN_rx_object?T ; T=0x0001 (1)
0000002A FFEA BL CAN_rx_object?T ; T=0x0001 (2)
78: CAN_start (1); /* Start controller 1 */
0000002C 2001 MOV R0,#0x1
0000002E F7FF BL CAN_start?T ; T=0x0001 (1)
00000030 FFE7 BL CAN_start?T ; T=0x0001 (2)
79: CAN_start (2); /* Start controller 2 */
00000032 2002 MOV R0,#0x2
00000034 F7FF BL CAN_start?T ; T=0x0001 (1)
00000036 FFE4 BL CAN_start?T ; T=0x0001 (2)
81: tsk1 = os_tsk_self (); /* Get own task identification number */
00000038 F7FF BL os_tsk_self?T ; T=0x0001 (1)
0000003A FFE2 BL os_tsk_self?T ; T=0x0001 (2)
0000003C 4800 LDR R1,=tsk1 ; tsk1
0000003E 6008 STR R0,[R1,#0x0] ; tsk1
82: tsk2 = os_tsk_create (task_rece_CAN, 0); /* Start receive task */
00000040 4800 LDR R0,=task_rece_CAN?T ; task_rece_CAN?T
00000042 2200 MOV R2,#0x0
00000044 2100 MOV R1,#0x0
00000046 2300 MOV R3,#0x0
00000048 F7FF BL os_tsk_create_user?T ; T=0x0001 (1)
0000004A FFDA BL os_tsk_create_user?T ; T=0x0001 (2)
0000004C 4800 LDR R1,=tsk2 ; tsk2
0000004E 6008 STR R0,[R1,#0x0] ; tsk2
84: for (;;) {
00000050 L_4:
85: msg_send.data[0] = get_AD (); /* Data[0] field = analog value from */
00000050 F7FF BL get_AD?T ; T=0x0001 (1)
ARM COMPILER V2.32a, CAN_Ex1 15/03/07 08:58:24 PAGE 6
00000052 FFD6 BL get_AD?T ; T=0x0001 (2)
00000054 A901 ADD R1,R13,#0x4
00000056 7008 STRB R0,[R1,#0x0] ; msg_send+4
87: RESET_WATCH_DOG; /* potentiometer */
00000058 4800 LDR R2,=0x800
0000005A 4800 LDR R0,=0xE0028008
0000005C 6801 LDR R1,[R0,#0x0]
0000005E 4311 ORR R1,R2
00000060 6001 STR R1,[R0,#0x0]
00000062 46C0 NOP ; MOV R8,R8
00000064 46C0 NOP ; MOV R8,R8
00000066 4800 LDR R2,=0x800
00000068 4800 LDR R0,=0xE002800C
0000006A 6801 LDR R1,[R0,#0x0]
0000006C 4311 ORR R1,R2
0000006E 6001 STR R1,[R0,#0x0]
00000070 46C0 NOP ; MOV R8,R8
00000072 46C0 NOP ; MOV R8,R8
00000074 4800 LDR R2,=0x800
00000076 4800 LDR R0,=0xE0028004
00000078 6801 LDR R1,[R0,#0x0]
0000007A 4311 ORR R1,R2
0000007C 6001 STR R1,[R0,#0x0]
0000007E 46C0 NOP ; MOV R8,R8
00000080 46C0 NOP ; MOV R8,R8
00000082 4800 LDR R2,=0x800
00000084 4800 LDR R0,=0xE002800C
00000086 6801 LDR R1,[R0,#0x0]
00000088 4311 ORR R1,R2
0000008A 6001 STR R1,[R0,#0x0]
0000008C 46C0 NOP ; MOV R8,R8
0000008E 46C0 NOP ; MOV R8,R8
00000090 4800 LDR R2,=0x800
00000092 4800 LDR R0,=0xE0028004
00000094 6801 LDR R1,[R0,#0x0]
00000096 4311 ORR R1,R2
00000098 6001 STR R1,[R0,#0x0]
0000009A 46C0 NOP ; MOV R8,R8
0000009C 46C0 NOP ; MOV R8,R8
89: CAN_send (2, &msg_send, 0x0f00); /* Send msg_send on controller 2 */
0000009E A900 ADD R1,R13,#0x0
000000A0 2002 MOV R0,#0x2
000000A2 4800 LDR R2,=0xF00
000000A4 F7FF BL CAN_send?T ; T=0x0001 (1)
000000A6 FFAC BL CAN_send?T ; T=0x0001 (2)
90: os_dly_wait (100); /* Wait 1 second */
000000A8 2064 MOV R0,#0x64
000000AA F7FF BL os_dly_wait?T ; T=0x0001 (1)
000000AC FFA9 BL os_dly_wait?T ; T=0x0001 (2)
91: }
000000AE E7CF B L_4 ; T=0x00000050
000000B0 ; SCOPE-END
92: }
000000B0 B004 ADD R13,#0x10
000000B2 ENDP ; 'task_send_CAN?T'
*** CODE SEGMENT '?PR?task_rece_CAN?T?CAN_Ex1':
99: void task_rece_CAN (void) __task {
00000000 B084 SUB R13,#0x10
00000002 ; SCOPE-START
102: for (;;) {
00000002 L_9:
105: if (CAN_receive (1, &msg_rece, 0x00FF) == CAN_OK) {
00000002 A900 ADD R1,R13,#0x0
00000004 2001 MOV R0,#0x1
00000006 22FF MOV R2,#0xFF
00000008 F7FF BL CAN_receive?T ; T=0x0001 (1)
ARM COMPILER V2.32a, CAN_Ex1 15/03/07 08:58:24 PAGE 7
0000000A FFFA BL CAN_receive?T ; T=0x0001 (2)
0000000C 2800 CMP R0,#0x0 ; CAN_receive?T
0000000E D1F8 BNE L_9 ; T=0x00000002
106: LED_Byte (msg_rece.data[0]);
00000010 A801 ADD R0,R13,#0x4
00000012 7800 LDRB R0,[R0,#0x0] ; msg_rece+4
00000014 F7FF BL LED_Byte?T ; T=0x0001 (1)
00000016 FFF4 BL LED_Byte?T ; T=0x0001 (2)
108: }
00000018 E7F3 B L_9 ; T=0x00000002
0000001A ; SCOPE-END
109: }
0000001A B004 ADD R13,#0x10
0000001C ENDP ; 'task_rece_CAN?T'
*** CODE SEGMENT '?PR?get_AD?T?CAN_Ex1':
118: unsigned char get_AD (void) {
00000000 ; SCOPE-START
121: ADCR |= 0x01000000; /* Start A/D Conversion */
00000000 4800 LDR R2,=0x1000000
00000002 4800 LDR R0,=0xE0034000
00000004 6801 LDR R1,[R0,#0x0]
00000006 4311 ORR R1,R2
00000008 6001 STR R1,[R0,#0x0]
123: do {
0000000A L_12:
124: val = ADDR; /* Read A/D Data Register */
0000000A 4800 LDR R0,=0xE0034004
0000000C 6801 LDR R1,[R0,#0x0]
0000000E ---- Variable 'val' assigned to Register 'R1' ----
125: }
0000000E 1C08 MOV R0,R1 ; val
00000010 4800 LDR R2,=0x80000000
00000012 4210 TST R0,R2 ; val
00000014 D0F9 BEQ L_12 ; T=0x0000000A
128: ADCR &= ~0x01000000; /* Stop A/D Conversion */
00000016 4800 LDR R3,=0x1000000
00000018 4800 LDR R0,=0xE0034000
0000001A 6802 LDR R2,[R0,#0x0]
0000001C 439A BIC R2,R3
0000001E 6002 STR R2,[R0,#0x0]
129: val = (val >> 8) & 0xFF; /* Extract AIN0 Value */
00000020 0A09 LSR R1,R1,#0x8 ; val
00000022 20FF MOV R0,#0xFF
00000024 4001 AND R1,R0
131: return val;
00000026 1C08 MOV R0,R1 ; val
00000028 ; SCOPE-END
132: }
00000028 4770 BX R14
0000002A ENDP ; 'get_AD?T'
*** CODE SEGMENT '?PR?main?CAN_Ex1':
139: void main (void) { /* Program execution starts here */
00000000 B500 PUSH {LR}
140: ADCR = 0x00270401; /* Setup A/D: 10-bit AIN0 @ 3MHz */
00000002 4800 LDR R1,=0x270401
00000004 4800 LDR R0,=0xE0034000
00000006 6001 STR R1,[R0,#0x0]
142: LED_Init (); /* Initialize LED */
00000008 F7FF BL LED_Init?T ; T=0x0001 (1)
0000000A FFFA BL LED_Init?T ; T=0x0001 (2)
143: LED_Byte (0); /* Turn the LED off */
0000000C 2000 MOV R0,#0x0
0000000E F7FF BL LED_Byte?T ; T=0x0001 (1)
00000010 FFF7 BL LED_Byte?T ; T=0x0001 (2)
145: os_sys_init (task_send_CAN); /* Initialize and start task 1 */
00000012 4800 LDR R0,=task_send_CAN?T ; task_send_CAN?T
ARM COMPILER V2.32a, CAN_Ex1 15/03/07 08:58:24 PAGE 8
00000014 2200 MOV R2,#0x0
00000016 2100 MOV R1,#0x0
00000018 2300 MOV R3,#0x0
0000001A F7FF BL os_sys_init_user?T ; T=0x0001 (1)
0000001C FFF1 BL os_sys_init_user?T ; T=0x0001 (2)
146: }
0000001E BC08 POP {R3}
00000020 4718 BX R3
00000022 ENDP ; 'main'
Module Information Static
----------------------------------
code size = ------
data size = 8
const size = 16
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -