📄 serial.lst
字号:
00000044 E3A020FB MOV R2,#0xFB
00000048 E5100000 LDR R0,=0xE001001C
0000004C E5D01000 LDRB R1,[R0,#0x0]
00000050 E0011002 AND R1,R1,R2
00000054 E5C01000 STRB R1,[R0,#0x0]
51: rx_char = U1RBR; // get char and clears the interrupt
00000058 E5100000 LDR R0,=0xE0010000
0000005C E5D04000 LDRB R4,[R0,#0x0]
00000060 ---- Variable 'rx_char' assigned to Register 'R4' ----
52: wr_hex(rx_char);
00000060 E1A00C04 MOV R0,R4,LSL #24 ; rx_char
00000064 E1A00C20 MOV R0,R0,LSR #24 ; rx_char
00000068 EBFFFFE4 BL wr_hex?A ; Targ=0x0
54: if (rx_char == CR) {
0000006C E1A00C04 MOV R0,R4,LSL #24 ; rx_char
00000070 E1A00C20 MOV R0,R0,LSR #24 ; rx_char
00000074 E350000D CMP R0,#0x000D ; rx_char
00000078 1A000008 BNE L_1 ; Targ=0xA0
55: U1SCR |= 0x04; // enable kp_printf(...)
0000007C E5100000 LDR R0,=0xE001001C
00000080 E5D01000 LDRB R1,[R0,#0x0]
ARM COMPILER V2.00d, Serial 23/10/05 18:16:17 PAGE 4
00000084 E3811004 ORR R1,R1,#0x0004
00000088 E5C01000 STRB R1,[R0,#0x0]
56: U1THR = rx_char; // echo character
0000008C E5100000 LDR R0,=0xE0010000
00000090 E5C04000 STRB R4,[R0,#0x0] ; rx_char
58: break;
00000094 EA000001 B L_1 ; Targ=0xA0
69: case 0x00: // CTS or DSR
00000098 L_2:
71: temp = U1MSR; // clear interrupt
00000098 E5100000 LDR R0,=0xE0010018
0000009C E5D00000 LDRB R0,[R0,#0x0]
74: }
000000A0 L_1:
76: if ((U1SCR & 0x01) == 0x01) {
000000A0 E5100000 LDR R0,=0xE001001C
000000A4 E5D00000 LDRB R0,[R0,#0x0]
000000A8 E3A01001 MOV R1,#0x1
000000AC E0000001 AND R0,R0,R1
000000B0 E3500001 CMP R0,#0x0001
000000B4 1A000008 BNE L_8 ; Targ=0xDC
77: set_LED(3,1);
000000B8 E3A00003 MOV R0,#0x3
000000BC E3A01001 MOV R1,#0x1
000000C0 EBFFFFCE BL set_LED?A ; Targ=0x0
78: U1SCR &= 0xFE; }
000000C4 E3A020FE MOV R2,#0xFE
000000C8 E5100000 LDR R0,=0xE001001C
000000CC E5D01000 LDRB R1,[R0,#0x0]
000000D0 E0011002 AND R1,R1,R2
000000D4 E5C01000 STRB R1,[R0,#0x0]
000000D8 EA000006 B L_9 ; Targ=0xF8
000000DC L_8:
80: set_LED(3,0);
000000DC E3A00003 MOV R0,#0x3
000000E0 E3A01000 MOV R1,#0x0
000000E4 EBFFFFC5 BL set_LED?A ; Targ=0x0
81: U1SCR |= 0x01; }
000000E8 E5100000 LDR R0,=0xE001001C
000000EC E5D01000 LDRB R1,[R0,#0x0]
000000F0 E3811001 ORR R1,R1,#0x0001
000000F4 E5C01000 STRB R1,[R0,#0x0]
000000F8 L_9:
82: VICVectAddr = 0; // Acknowledge Interrupt
000000F8 E3A01000 MOV R1,#0x0
000000FC E5100000 LDR R0,=0xFFFFF030
00000100 E5801000 STR R1,[R0,#0x0]
00000104 ; SCOPE-END
83: }
00000104 E8BD5F1F LDMIA R13!,{R0-R4,R8-R12,LR}
00000108 E25EF004 SUBS R15,R14,#0x0004
0000010C ENDP ; 'uart1?A'
*** CODE SEGMENT '?PR?init_serial?T?Serial':
87: U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
00000000 2183 MOV R1,#0x83
00000002 4800 LDR R0,=0xE001000C
00000004 7001 STRB R1,[R0,#0x0]
88: U1DLL = 97; /* use 24 for 38400 Baud Rate @ 15MHz VPB Clock (was 97 or 9600 BOAD) */
00000006 2161 MOV R1,#0x61
00000008 4800 LDR R0,=0xE0010000
0000000A 7001 STRB R1,[R0,#0x0]
89: U1LCR = 0x03; /* DLAB = 0 */
0000000C 2103 MOV R1,#0x3
0000000E 4800 LDR R0,=0xE001000C
00000010 7001 STRB R1,[R0,#0x0]
90: U1IER = 0x01; // Enable reciever data available interrupt
ARM COMPILER V2.00d, Serial 23/10/05 18:16:17 PAGE 5
00000012 2101 MOV R1,#0x1
00000014 4800 LDR R0,=0xE0010004
00000016 7001 STRB R1,[R0,#0x0]
91: U1SCR = 0x05; // set two flag in UART 1 scratch pad
00000018 2105 MOV R1,#0x5
0000001A 4800 LDR R0,=0xE001001C
0000001C 7001 STRB R1,[R0,#0x0]
94: VICVectAddr4 = (unsigned long)uart1; // set interrupt vector in 4
0000001E 4900 LDR R1,=uart1?A ; uart1?A
00000020 4800 LDR R0,=0xFFFFF110
00000022 6001 STR R1,[R0,#0x0]
95: VICVectCntl4 = 0x20 | 7; // use it for UART 1 clock
00000024 2127 MOV R1,#0x27
00000026 4800 LDR R0,=0xFFFFF210
00000028 6001 STR R1,[R0,#0x0]
96: }
0000002A 4770 BX R14
0000002C ENDP ; 'init_serial?T'
*** CODE SEGMENT '?PR?putchar?T?Serial':
99: int putchar (int ch) { // Write character to Serial Port
00000000 ---- Variable 'ch' assigned to Register 'R0' ----
101: if (ch == '\n') {
00000000 280A CMP R0,#0xA ; ch
00000002 D107 BNE L_18 ; T=0x00000014
102: while (!(U1LSR & 0x20));
00000004 L_11:
00000004 4800 LDR R1,=0xE0010014
00000006 7809 LDRB R1,[R1,#0x0]
00000008 2220 MOV R2,#0x20
0000000A 4211 TST R1,R2
0000000C D0FA BEQ L_11 ; T=0x00000004
103: U1THR = CR; // output CR
0000000E 220D MOV R2,#0xD
00000010 4800 LDR R1,=0xE0010000
00000012 700A STRB R2,[R1,#0x0]
105: while (!(U1LSR & 0x20));
00000014 L_18:
00000014 L_15:
00000014 4800 LDR R1,=0xE0010014
00000016 7809 LDRB R1,[R1,#0x0]
00000018 2220 MOV R2,#0x20
0000001A 4211 TST R1,R2
0000001C D0FA BEQ L_15 ; T=0x00000014
106: return (U1THR = ch);
0000001E 4800 LDR R1,=0xE0010000
00000020 7008 STRB R0,[R1,#0x0]
00000022 0600 LSL R0,R0,#0x18 ; ch
00000024 0E00 LSR R0,R0,#0x18
107: }
00000026 4770 BX R14
00000028 ENDP ; 'putchar?T'
*** CODE SEGMENT '?PR?getchar?T?Serial':
110: while (!(U1LSR & 0x01));
00000000 L_20:
00000000 4800 LDR R0,=0xE0010014
00000002 7800 LDRB R0,[R0,#0x0]
00000004 2101 MOV R1,#0x1
00000006 4208 TST R0,R1
00000008 D0FA BEQ L_20 ; T=0x00000000
111: return (U1RBR);
0000000A 4800 LDR R0,=0xE0010000
0000000C 7800 LDRB R0,[R0,#0x0]
112: }
0000000E 4770 BX R14
00000010 ENDP ; 'getchar?T'
ARM COMPILER V2.00d, Serial 23/10/05 18:16:17 PAGE 6
Module Information Static
----------------------------------
code size = ------
data size = ------
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 + -