📄 uart.lst
字号:
000000B8 4800 LDR R0,=r_first1 ; r_first1
000000BA 6001 STR R1,[R0,#0x0] ; r_first1
000000BC ; SCOPE-END
131: }
000000BC L_6:
000000BC B012 ADD R13,#0x48
000000BE BCF0 POP {R4-R7}
000000C0 BC08 POP {R3}
000000C2 4718 BX R3
000000C4 ENDP ; 'UartDataToHost?T'
*** CODE SEGMENT '?PR?HostDataToUart?T?uart':
138: void HostDataToUart(DWORD dwPort)
00000000 B5F0 PUSH {R4-R7,LR}
00000002 1C06 MOV R6,R0 ; dwPort
00000004 ---- Variable 'dwPort' assigned to Register 'R6' ----
00000004 B091 SUB R13,#0x44
00000006 ---- Variable 'next' assigned to Register 'R5' ----
00000006 ---- Variable 'pBuf' assigned to Register 'R4' ----
139: {
00000006 ; SCOPE-START
141: DWORD dwEp = dwPort==0 ? 2 : 5;
00000006 1C30 MOV R0,R6 ; dwPort
00000008 2800 CMP R0,#0x0 ; dwPort
0000000A D101 BNE L_23 ; T=0x00000010
0000000C 2102 MOV R1,#0x2
0000000E E000 B L_24 ; T=0x00000012
00000010 L_23:
00000010 2105 MOV R1,#0x5
00000012 L_24:
00000012 ---- Variable 'dwEp' assigned to Register 'R1' ----
142: DWORD next = dwPort==0 ? s_next0 : s_next1;
00000012 1C30 MOV R0,R6 ; dwPort
00000014 2800 CMP R0,#0x0 ; dwPort
00000016 D103 BNE L_25 ; T=0x00000020
00000018 4800 LDR R0,=s_next0 ; s_next0
0000001A 6800 LDR R0,[R0,#0x0] ; s_next0
0000001C 1C05 MOV R5,R0
0000001E E001 B L_26 ; T=0x00000024
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 10
00000020 L_25:
00000020 4800 LDR R0,=s_next1 ; s_next1
00000022 6805 LDR R5,[R0,#0x0] ; s_next1
00000024 L_26:
143: DWORD first = dwPort==0 ? s_first0 : s_first1;
00000024 1C30 MOV R0,R6 ; dwPort
00000026 2800 CMP R0,#0x0 ; dwPort
00000028 D102 BNE L_27 ; T=0x00000030
0000002A 4800 LDR R0,=s_first0 ; s_first0
0000002C 6800 LDR R0,[R0,#0x0] ; s_first0
0000002E E001 B L_28 ; T=0x00000034
00000030 L_27:
00000030 4800 LDR R0,=s_first1 ; s_first1
00000032 6800 LDR R0,[R0,#0x0] ; s_first1
00000034 L_28:
00000034 9010 STR R0,[R13,#0x40] ; first
144: BYTE * pBuf = dwPort==0 ? SendBuf0 : SendBuf1;
00000036 1C30 MOV R0,R6 ; dwPort
00000038 2800 CMP R0,#0x0 ; dwPort
0000003A D102 BNE L_29 ; T=0x00000042
0000003C 4800 LDR R0,=SendBuf0 ; SendBuf0
0000003E 1C04 MOV R4,R0
00000040 E000 B L_30 ; T=0x00000044
00000042 L_29:
00000042 4800 LDR R4,=SendBuf1 ; SendBuf1
00000044 L_30:
145: DWORD dwCnt = USB_ReadEP(dwEp, tmpbuf);
00000044 1C08 MOV R0,R1 ; dwEp
00000046 A900 ADD R1,R13,#0x0
00000048 F7FF BL USB_ReadEP?T ; T=0x0001 (1)
0000004A FFDA BL USB_ReadEP?T ; T=0x0001 (2)
0000004C 1C01 MOV R1,R0 ; dwCnt
0000004E ---- Variable 'dwCnt' assigned to Register 'R1' ----
146: DWORD i=0;
0000004E 2000 MOV R0,#0x0
00000050 ---- Variable 'i' assigned to Register 'R0' ----
148: while(dwCnt--)
00000050 E012 B L_31 ; T=0x00000078
00000052 L_33:
150: if(next == first-1)
00000052 9B10 LDR R3,[R13,#0x40] ; first
00000054 3B01 SUB R3,#0x1
00000056 1C2A MOV R2,R5 ; next
00000058 429A CMP R2,R3 ; next
0000005A D011 BEQ L_32 ; T=0x00000080
152: pBuf[next] = tmpbuf[i];
0000005C 1C03 MOV R3,R0 ; i
0000005E AA00 ADD R2,R13,#0x0
00000060 5CD2 LDRB R2,[R2,R3]
00000062 1C2F MOV R7,R5 ; next
00000064 1C23 MOV R3,R4 ; pBuf
00000066 55DA STRB R2,[R3,R7]
153: if(++next >= SEND_BUF_LEN)
00000068 1C2A MOV R2,R5 ; next
0000006A 3201 ADD R2,#0x1
0000006C 1C15 MOV R5,R2 ; next
0000006E 4B80 LDR R3,=0x200
00000070 429A CMP R2,R3
00000072 D300 BCC L_36 ; T=0x00000076
154: next = 0;
00000074 2500 MOV R5,#0x0
00000076 L_36:
155: i++;
00000076 3001 ADD R0,#0x1
156: }
00000078 L_31:
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 11
00000078 1C0A MOV R2,R1 ; dwCnt
0000007A 3901 SUB R1,#0x1
0000007C 2A00 CMP R2,#0x0 ; dwCnt
0000007E D1E8 BNE L_33 ; T=0x00000052
00000080 L_32:
158: if(dwPort == 0)
00000080 1C30 MOV R0,R6 ; dwPort
00000082 2800 CMP R0,#0x0 ; dwPort
00000084 D11C BNE L_37 ; T=0x000000C0
160: s_next0 = next;
00000086 1C29 MOV R1,R5 ; next
00000088 4800 LDR R0,=s_next0 ; s_next0
0000008A 6001 STR R1,[R0,#0x0] ; s_next0
161: if(U0LSR & 0x40 && s_first0 != s_next0) // 发送器为空,需要重新启动发送
0000008C 4800 LDR R0,=0xE000C014
0000008E 7800 LDRB R0,[R0,#0x0]
00000090 2140 MOV R1,#0x40
00000092 4208 TST R0,R1
00000094 D030 BEQ L_40 ; T=0x000000F8
00000096 4800 LDR R0,=s_next0 ; s_next0
00000098 6801 LDR R1,[R0,#0x0] ; s_next0
0000009A 4800 LDR R0,=s_first0 ; s_first0
0000009C 6800 LDR R0,[R0,#0x0] ; s_first0
0000009E 4288 CMP R0,R1
000000A0 D02A BEQ L_40 ; T=0x000000F8
163: U0THR = pBuf[s_first0];
000000A2 1C02 MOV R2,R0
000000A4 1C21 MOV R1,R4 ; pBuf
000000A6 5C8A LDRB R2,[R1,R2]
000000A8 4800 LDR R1,=0xE000C000
000000AA 700A STRB R2,[R1,#0x0]
164: if(++s_first0 >= SEND_BUF_LEN)
000000AC 4800 LDR R1,=s_first0 ; s_first0
000000AE 3001 ADD R0,#0x1
000000B0 6008 STR R0,[R1,#0x0] ; s_first0
000000B2 4980 LDR R1,=0x200
000000B4 4288 CMP R0,R1
000000B6 D31F BCC L_40 ; T=0x000000F8
165: s_first0 = 0;
000000B8 2100 MOV R1,#0x0
000000BA 4800 LDR R0,=s_first0 ; s_first0
000000BC 6001 STR R1,[R0,#0x0] ; s_first0
167: }
000000BE E01B B L_40 ; T=0x000000F8
000000C0 L_37:
170: s_next1 = next;
000000C0 1C29 MOV R1,R5 ; next
000000C2 4800 LDR R0,=s_next1 ; s_next1
000000C4 6001 STR R1,[R0,#0x0] ; s_next1
171: if(U1LSR & 0x40 && s_first1 != s_next1)
000000C6 4800 LDR R0,=0xE0010014
000000C8 7800 LDRB R0,[R0,#0x0]
000000CA 2140 MOV R1,#0x40
000000CC 4208 TST R0,R1
000000CE D013 BEQ L_40 ; T=0x000000F8
000000D0 4800 LDR R0,=s_next1 ; s_next1
000000D2 6801 LDR R1,[R0,#0x0] ; s_next1
000000D4 4800 LDR R0,=s_first1 ; s_first1
000000D6 6800 LDR R0,[R0,#0x0] ; s_first1
000000D8 4288 CMP R0,R1
000000DA D00D BEQ L_40 ; T=0x000000F8
173: U1THR = pBuf[s_first1];
000000DC 1C02 MOV R2,R0
000000DE 1C21 MOV R1,R4 ; pBuf
000000E0 5C8A LDRB R2,[R1,R2]
000000E2 4800 LDR R1,=0xE0010000
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 12
000000E4 700A STRB R2,[R1,#0x0]
174: if(++s_first1 >= SEND_BUF_LEN)
000000E6 4800 LDR R1,=s_first1 ; s_first1
000000E8 3001 ADD R0,#0x1
000000EA 6008 STR R0,[R1,#0x0] ; s_first1
000000EC 4980 LDR R1,=0x200
000000EE 4288 CMP R0,R1
000000F0 D302 BCC L_40 ; T=0x000000F8
175: s_first1 = 0;
000000F2 2100 MOV R1,#0x0
000000F4 4800 LDR R0,=s_first1 ; s_first1
000000F6 6001 STR R1,[R0,#0x0] ; s_first1
177: }
000000F8 L_40:
000000F8 ; SCOPE-END
178: }
000000F8 B011 ADD R13,#0x44
000000FA BCF0 POP {R4-R7}
000000FC BC08 POP {R3}
000000FE 4718 BX R3
00000100 ENDP ; 'HostDataToUart?T'
*** CODE SEGMENT '?PR?Uart0_irq?A?uart':
186: void Uart0_irq(void) __irq
00000000 E92D001F STMDB R13!,{R0-R4}
187: {
00000004 ; SCOPE-START
189: while(1) // 循环处理,直到UART0中无任何挂起的中断
00000004 L_45:
191: if((iir = U0IIR) & 1)
00000004 E5100000 LDR R0,=0xE000C008
00000008 E5900000 LDR R0,[R0,#0x0]
0000000C E1A00C00 MOV R0,R0,LSL #24
00000010 E1A00C20 MOV R0,R0,LSR #24
00000014 E1A01000 MOV R1,R0 ; iir
00000018 ---- Variable 'iir' assigned to Register 'R1' ----
00000018 E1A00C00 MOV R0,R0,LSL #24
0000001C E1A00C20 MOV R0,R0,LSR #24
00000020 E3100001 TST R0,#0x0001
00000024 1A000040 BNE L_44 ; Targ=0x12C
193: switch(iir & 0x0e)
00000028 E1A00001 MOV R0,R1 ; iir
0000002C E1A00C00 MOV R0,R0,LSL #24 ; iir
00000030 E1A00C20 MOV R0,R0,LSR #24
00000034 E200000E AND R0,R0,#0x000E
00000038 E3500002 CMP R0,#0x0002
0000003C 0A00001E BEQ L_49 ; Targ=0xBC
00000040 E350000C CMP R0,#0x000C
00000044 0A000001 BEQ L_56 ; Targ=0x50
00000048 E3500004 CMP R0,#0x0004
0000004C 1AFFFFEC BNE L_45 ; Targ=0x4
197: while(U0LSR & 1) //将fifo中的所有数据读完
00000050 L_56:
00000050 EA000014 B L_53 ; Targ=0xA8
00000054 L_55:
199: ch = U0RBR;
00000054 E5100000 LDR R0,=0xE000C000
00000058 E5D04000 LDRB R4,[R0,#0x0]
0000005C ---- Variable 'ch' assigned to Register 'R4' ----
200: if(r_next0 != r_first0-1)
0000005C E5100000 LDR R0,=r_first0 ; r_first0
00000060 E5901000 LDR R1,[R0,#0x0] ; r_first0
00000064 E2411001 SUB R1,R1,#0x0001
00000068 E5100000 LDR R0,=r_next0 ; r_next0
0000006C E5900000 LDR R0,[R0,#0x0] ; r_next0
00000070 E1500001 CMP R0,R1
00000074 0A00000B BEQ L_53 ; Targ=0xA8
ARM COMPILER V2.53, uart 09/06/07 15:43:41 PAGE 13
202: RcvBuf0[r_next0] = ch;
00000078 E1A01004 MOV R1,R4 ; ch
0000007C E1A03000 MOV R3,R0
00000080 E5102000 LDR R2,=RcvBuf0 ; RcvBuf0
00000084 E7C21003 STRB R1,[R2,+R3]
203: if (++r_next0 >= RCV_BUF_LEN)
00000088 E5101000 LDR R1,=r_next0 ; r_next0
0000008C E2800001 ADD R0,R0,#0x0001
00000090 E5810000 STR R0,[R1,#0x0] ; r_next0
00000094 E3500B01 CMP R0,#0x0400
00000098 3A000002 BCC L_53 ; Targ=0xA8
204: r_next0 = 0;
0000009C E3A01000 MOV R1,#0x0
000000A0 E5100000 LDR R0,=r_next0 ; r_next0
000000A4 E5801000 STR R1,[R0,#0x0] ; r_next0
206: }
000000A8 L_53:
000000A8 E5100000 LDR R0,=0xE000C014
000000AC E5D00000 LDRB R0,[R0,#0x0]
000000B0 E3100001 TST R0,#0x0001
000000B4 1AFFFFE6 BNE L_55 ; Targ=0x54
207: break;
000000B8 EAFFFFD1 B L_45 ; Targ=0x4
209: case 0x02: // THR Empty.
000000BC L_49:
210: {
000000BC ; SCOPE-START
211: DWORD nCnt = 16; //fifo counter
000000BC E3A00010 MOV R0,#0x10
000000C0 ---- Variable 'nCnt' assigned to Register 'R0' ----
212: while( s_next0 != s_first0 && nCnt--)
000000C0 EA00000E B L_59 ; Targ=0x100
000000C4 L_61:
214: U0THR = SendBuf0[s_first0];
000000C4 E5101000 LDR R1,=s_first0 ; s_first0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -