📄 test.lst
字号:
00000018 E3A01001 MOV R1,#0x1
0000001C E5100000 LDR R0,=rcv_new ; rcv_new
00000020 E5C01000 STRB R1,[R0,#0x0] ; rcv_new
47: for(i=0; i<8; i++)
00000024 E3A00000 MOV R0,#0x0
00000028 ---- Variable 'i' assigned to Register 'R0' ----
00000028 L_5:
49: rcv_buf[i] = U0RBR; // 读取FIFO的数据,并清除中断标志
00000028 E5101000 LDR R1,=0xE000C000
0000002C E5D11000 LDRB R1,[R1,#0x0]
00000030 E1A03000 MOV R3,R0 ; i
00000034 E5102000 LDR R2,=rcv_buf ; rcv_buf
00000038 E7C21003 STRB R1,[R2,+R3]
50: }
0000003C E2800001 ADD R0,R0,#0x0001 ; i
00000040 E1A01000 MOV R1,R0 ; i
00000044 E3510008 CMP R1,#0x0008 ; i
00000048 3AFFFFF6 BCC L_5 ; Targ=0x28
51: }
0000004C L_1:
52: VICVectAddr = 0x00; // 中断处理结束
0000004C E3A01000 MOV R1,#0x0
00000050 E5100000 LDR R0,=0xFFFFF030
00000054 E5801000 STR R1,[R0,#0x0]
00000058 ; SCOPE-END
53: }
00000058 E8BD000F LDMIA R13!,{R0-R3}
0000005C E25EF004 SUBS R15,R14,#0x0004
00000060 ENDP ; 'IRQ_UART0?A'
*** CODE SEGMENT '?PR?SendByte?T?test':
62: void SendByte(unsigned char data)
00000000 1C02 MOV R2,R0 ; data
ARM COMPILER V2.53, test 26/07/07 15:56:53 PAGE 5
00000002 ---- Variable 'data' assigned to Register 'R2' ----
64: U0THR = data; // 发送数据
00000002 1C11 MOV R1,R2 ; data
00000004 4800 LDR R0,=0xE000C000
00000006 7001 STRB R1,[R0,#0x0]
65: while( (U0LSR & 0x20)==0 ); // 等待数据发送
00000008 L_7:
00000008 4800 LDR R0,=0xE000C014
0000000A 7800 LDRB R0,[R0,#0x0]
0000000C 2120 MOV R1,#0x20
0000000E 4208 TST R0,R1
00000010 D0FA BEQ L_7 ; T=0x00000008
66: }
00000012 4770 BX R14
00000014 ENDP ; 'SendByte?T'
*** CODE SEGMENT '?PR?ISendBuf?T?test':
75: void ISendBuf(void)
00000000 B500 PUSH {LR}
76: { unsigned char i;
00000002 ; SCOPE-START
79: for(i=0; i<8; i++)
00000002 2300 MOV R3,#0x0
00000004 ---- Variable 'i' assigned to Register 'R3' ----
00000004 E009 B L_13 ; T=0x0000001A
00000006 L_14:
80: SendByte(rcv_buf[i]);
00000006 1C18 MOV R0,R3 ; i
00000008 0601 LSL R1,R0,#0x18 ; i
0000000A 0E09 LSR R1,R1,#0x18
0000000C 4800 LDR R0,=rcv_buf ; rcv_buf
0000000E 5C40 LDRB R0,[R0,R1]
00000010 F7FF BL SendByte?T ; T=0x0001 (1)
00000012 FFF6 BL SendByte?T ; T=0x0001 (2)
00000014 3301 ADD R3,#0x1
00000016 061B LSL R3,R3,#0x18
00000018 0E1B LSR R3,R3,#0x18
0000001A L_13:
0000001A 1C18 MOV R0,R3 ; i
0000001C 0600 LSL R0,R0,#0x18 ; i
0000001E 0E00 LSR R0,R0,#0x18
00000020 2808 CMP R0,#0x8
00000022 DBF0 BLT L_14 ; T=0x00000006
81: i='\n';
00000024 230A MOV R3,#0xA
82: SendByte(i);
00000026 1C18 MOV R0,R3 ; i
00000028 0600 LSL R0,R0,#0x18 ; i
0000002A 0E00 LSR R0,R0,#0x18
0000002C F7FF BL SendByte?T ; T=0x0001 (1)
0000002E FFE8 BL SendByte?T ; T=0x0001 (2)
00000030 ; SCOPE-END
85: }
00000030 BC08 POP {R3}
00000032 4718 BX R3
00000034 ENDP ; 'ISendBuf?T'
*** CODE SEGMENT '?PR?UART0_Ini?T?test':
96: unsigned char UART0_Ini(unsigned int baud)
00000000 B500 PUSH {LR}
00000002 1C02 MOV R2,R0 ; baud
00000004 ---- Variable 'baud' assigned to Register 'R2' ----
97: {
00000004 ; SCOPE-START
107: U0LCR = 0x80; // DLAB位置1
00000004 2180 MOV R1,#0x80
00000006 4800 LDR R0,=0xE000C00C
00000008 7001 STRB R1,[R0,#0x0]
ARM COMPILER V2.53, test 26/07/07 15:56:53 PAGE 6
108: bak = (Fpclk / 16)/baud;
0000000A 1C11 MOV R1,R2 ; baud
0000000C 4800 LDR R0,=0xE4E1C
0000000E F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
00000010 FFF7 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
00000012 1C08 MOV R0,R1
00000014 1C02 MOV R2,R0
00000016 ---- Variable 'bak' assigned to Register 'R2' ----
109: U0DLM = bak / 256;
00000016 1C11 MOV R1,R2 ; bak
00000018 0A09 LSR R1,R1,#0x8 ; bak
0000001A 0609 LSL R1,R1,#0x18
0000001C 0E09 LSR R1,R1,#0x18
0000001E 4800 LDR R0,=0xE000C004
00000020 7001 STRB R1,[R0,#0x0]
110: U0DLL = bak % 256;
00000022 1C11 MOV R1,R2 ; bak
00000024 20FF MOV R0,#0xFF
00000026 4001 AND R1,R0
00000028 0609 LSL R1,R1,#0x18
0000002A 0E09 LSR R1,R1,#0x18
0000002C 4800 LDR R0,=0xE000C000
0000002E 7001 STRB R1,[R0,#0x0]
111: U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
00000030 2183 MOV R1,#0x83
00000032 4800 LDR R0,=0xE000C00C
00000034 7001 STRB R1,[R0,#0x0]
113: U0LCR = 0x03; /* DLAB = 0 */
00000036 2103 MOV R1,#0x3
00000038 4800 LDR R0,=0xE000C00C
0000003A 7001 STRB R1,[R0,#0x0]
123: return(1);
0000003C 2001 MOV R0,#0x1
0000003E ; SCOPE-END
124: }
0000003E BC08 POP {R3}
00000040 4718 BX R3
00000042 ENDP ; 'UART0_Ini?T'
*** CODE SEGMENT '?PR?main?test':
129: int main(void)
00000000 B500 PUSH {LR}
137: PINSEL0 = 0x00000005; // 设置所有管脚连接GPIO
00000002 2105 MOV R1,#0x5
00000004 4800 LDR R0,=0xE002C000
00000006 6001 STR R1,[R0,#0x0]
138: PINSEL1 = 0x00000000;
00000008 2100 MOV R1,#0x0
0000000A 4800 LDR R0,=0xE002C004
0000000C 6001 STR R1,[R0,#0x0]
140: rcv_new = 0;
0000000E 2100 MOV R1,#0x0
00000010 4800 LDR R0,=rcv_new ; rcv_new
00000012 7001 STRB R1,[R0,#0x0] ; rcv_new
145: UART0_Ini(115200); // 初始化串口模式
00000014 4800 LDR R0,=0x1C200
00000016 F7FF BL UART0_Ini?T ; T=0x0001 (1)
00000018 FFF3 BL UART0_Ini?T ; T=0x0001 (2)
147: U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节
0000001A 2181 MOV R1,#0x81
0000001C 4800 LDR R0,=0xE000C008
0000001E 7001 STRB R1,[R0,#0x0]
149: U0IER = 0x01; // 允许RBR中断,即接收中断
00000020 2101 MOV R1,#0x1
00000022 4800 LDR R0,=0xE000C004
00000024 6001 STR R1,[R0,#0x0]
152: VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断
ARM COMPILER V2.53, test 26/07/07 15:56:53 PAGE 7
00000026 2100 MOV R1,#0x0
00000028 4800 LDR R0,=0xFFFFF00C
0000002A 6001 STR R1,[R0,#0x0]
153: VICVectCntl0 = 0x26; // UART0中断通道分配到IRQ slot 0,即优先级最高
0000002C 2126 MOV R1,#0x26
0000002E 4800 LDR R0,=0xFFFFF200
00000030 6001 STR R1,[R0,#0x0]
154: VICVectAddr0 = (int)IRQ_UART0; // 设置UART0向量地址
00000032 4900 LDR R1,=IRQ_UART0?A ; IRQ_UART0?A
00000034 4800 LDR R0,=0xFFFFF100
00000036 6001 STR R1,[R0,#0x0]
155: VICIntEnable = 0x00000040; // 使能UART0中断
00000038 2140 MOV R1,#0x40
0000003A 4800 LDR R0,=0xFFFFF010
0000003C 6001 STR R1,[R0,#0x0]
157: while(1)
0000003E L_19:
159: if(1==rcv_new)
0000003E 4800 LDR R0,=rcv_new ; rcv_new
00000040 7800 LDRB R0,[R0,#0x0] ; rcv_new
00000042 2801 CMP R0,#0x1
00000044 D1FB BNE L_19 ; T=0x0000003E
161: ISendBuf(); // 将接收到的数据发送回主机
00000046 F7FF BL ISendBuf?T ; T=0x0001 (1)
00000048 FFDB BL ISendBuf?T ; T=0x0001 (2)
162: rcv_new = 0;
0000004A 2100 MOV R1,#0x0
0000004C 4800 LDR R0,=rcv_new ; rcv_new
0000004E 7001 STRB R1,[R0,#0x0] ; rcv_new
166: }
00000050 E7F5 B L_19 ; T=0x0000003E
168: }
00000052 BC08 POP {R3}
00000054 4718 BX R3
00000056 ENDP ; 'main'
Module Information Static
----------------------------------
code size = ------
data size = 9
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -