?? uart.lst
字號:
0000004A 1C10 MOV R0,R2 ; stopb
0000004C 0600 LSL R0,R0,#0x18 ; stopb
0000004E 0E00 LSR R0,R0,#0x18
00000050 2802 CMP R0,#0x2
00000052 DD01 BLE L_6 ; T=0x00000058
00000054 L_7:
00000054 2000 MOV R0,#0x0
00000056 E03E B L_3 ; T=0x000000D6
00000058 L_6:
27: if (parity > 4) return (0);
00000058 1C18 MOV R0,R3 ; parity
0000005A 0600 LSL R0,R0,#0x18 ; parity
0000005C 0E00 LSR R0,R0,#0x18
0000005E 2804 CMP R0,#0x4
00000060 DD01 BLE L_8 ; T=0x00000066
00000062 2000 MOV R0,#0x0
00000064 E037 B L_3 ; T=0x000000D6
00000066 L_8:
30: U0LCR = 0x80; // DLAB = 1
00000066 2180 MOV R1,#0x80
00000068 4800 LDR R0,=0xE000C00C
0000006A 7001 STRB R1,[R0,#0x0]
31: bak = (Fpclk >> 4) / baud;
0000006C 1C29 MOV R1,R5 ; baud
0000006E 4800 LDR R0,=0xA8C00
00000070 F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
00000072 FFC6 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
00000074 1C08 MOV R0,R1
00000076 ---- Variable 'bak' assigned to Register 'R0' ----
32: U0DLM = bak >> 8;
00000076 1C05 MOV R5,R0 ; bak
00000078 0A2D LSR R5,R5,#0x8 ; bak
0000007A 062D LSL R5,R5,#0x18
0000007C 0E2D LSR R5,R5,#0x18
0000007E 4800 LDR R1,=0xE000C004
00000080 700D STRB R5,[R1,#0x0]
33: U0DLL = bak & 0xFF;
00000082 1C01 MOV R1,R0 ; bak
00000084 20FF MOV R0,#0xFF
00000086 4001 AND R1,R0
00000088 0609 LSL R1,R1,#0x18
0000008A 0E09 LSR R1,R1,#0x18
0000008C 4800 LDR R0,=0xE000C000
0000008E 7001 STRB R1,[R0,#0x0]
36: bak = datab - 5; // 設置字長
00000090 1C20 MOV R0,R4 ; datab
00000092 0600 LSL R0,R0,#0x18 ; datab
00000094 0E00 LSR R0,R0,#0x18
00000096 3805 SUB R0,#0x5
37: if (stopb == 2) bak |= 0x04; // 判斷是否為2位停止位
00000098 1C11 MOV R1,R2 ; stopb
0000009A 0609 LSL R1,R1,#0x18 ; stopb
0000009C 0E09 LSR R1,R1,#0x18
0000009E 2902 CMP R1,#0x2
000000A0 D101 BNE L_9 ; T=0x000000A6
000000A2 2104 MOV R1,#0x4
000000A4 4308 ORR R0,R1
000000A6 L_9:
39: if (parity != 0)
000000A6 1C19 MOV R1,R3 ; parity
000000A8 0609 LSL R1,R1,#0x18 ; parity
000000AA 0E09 LSR R1,R1,#0x18
000000AC 2900 CMP R1,#0x0
000000AE D007 BEQ L_10 ; T=0x000000C0
41: parity = parity - 1;
000000B0 1C19 MOV R1,R3 ; parity
ARM COMPILER V2.53, UART 13/07/07 19:51:17 PAGE 6
000000B2 060B LSL R3,R1,#0x18 ; parity
000000B4 0E1B LSR R3,R3,#0x18
000000B6 3B01 SUB R3,#0x1
000000B8 061B LSL R3,R3,#0x18
000000BA 0E1B LSR R3,R3,#0x18
42: bak |= 0x08;
000000BC 2108 MOV R1,#0x8
000000BE 4308 ORR R0,R1
43: }
000000C0 L_10:
44: bak |= parity << 4; // 設置奇偶校驗
000000C0 1C19 MOV R1,R3 ; parity
000000C2 0609 LSL R1,R1,#0x18 ; parity
000000C4 0E09 LSR R1,R1,#0x18
000000C6 0109 LSL R1,R1,#0x4
000000C8 4308 ORR R0,R1
46: U0LCR = bak;
000000CA 1C01 MOV R1,R0 ; bak
000000CC 0609 LSL R1,R1,#0x18 ; bak
000000CE 0E09 LSR R1,R1,#0x18
000000D0 4800 LDR R0,=0xE000C00C
000000D2 7001 STRB R1,[R0,#0x0]
48: return (1);
000000D4 2001 MOV R0,#0x1
000000D6 ; SCOPE-END
49: }
000000D6 L_3:
000000D6 BC30 POP {R4-R5}
000000D8 BC08 POP {R3}
000000DA 4718 BX R3
000000DC ENDP ; 'UART0_Init?T'
*** CODE SEGMENT '?PR?UART0_GetByte?T?UART':
59: {
00000000 ; SCOPE-START
62: while ((U0LSR & 0x01) == 0);
00000000 L_11:
00000000 4800 LDR R0,=0xE000C014
00000002 7800 LDRB R0,[R0,#0x0]
00000004 2101 MOV R1,#0x1
00000006 4208 TST R0,R1
00000008 D0FA BEQ L_11 ; T=0x00000000
63: rcv_dat = U0RBR;
0000000A 4800 LDR R0,=0xE000C000
0000000C 7801 LDRB R1,[R0,#0x0]
0000000E ---- Variable 'rcv_dat' assigned to Register 'R1' ----
65: return (rcv_dat);
0000000E 1C08 MOV R0,R1 ; rcv_dat
00000010 0600 LSL R0,R0,#0x18 ; rcv_dat
00000012 0E00 LSR R0,R0,#0x18
00000014 ; SCOPE-END
66: }
00000014 4770 BX R14
00000016 ENDP ; 'UART0_GetByte?T'
*** CODE SEGMENT '?PR?UART0_GetStr?T?UART':
75: void UART0_GetStr (uint8 *s, uint32 n)
00000000 B500 PUSH {LR}
00000002 1C0B MOV R3,R1 ; n
00000004 ---- Variable 'n' assigned to Register 'R3' ----
00000004 1C02 MOV R2,R0 ; s
00000006 ---- Variable 's' assigned to Register 'R2' ----
77: for ( ; n>0; n--)
00000006 E005 B L_18 ; T=0x00000014
00000008 L_19:
79: *s++ = UART0_GetByte();
00000008 F7FF BL UART0_GetByte?T ; T=0x0001 (1)
0000000A FFFA BL UART0_GetByte?T ; T=0x0001 (2)
ARM COMPILER V2.53, UART 13/07/07 19:51:17 PAGE 7
0000000C 1C11 MOV R1,R2 ; s
0000000E 3201 ADD R2,#0x1
00000010 7008 STRB R0,[R1,#0x0] ; s
80: }
00000012 3B01 SUB R3,#0x1
00000014 L_18:
00000014 1C18 MOV R0,R3 ; n
00000016 2800 CMP R0,#0x0 ; n
00000018 D8F6 BHI L_19 ; T=0x00000008
81: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'UART0_GetStr?T'
*** CODE SEGMENT '?PR?UART0_SendByte?T?UART':
89: void UART0_SendByte (uint8 dat)
00000000 1C02 MOV R2,R0 ; dat
00000002 ---- Variable 'dat' assigned to Register 'R2' ----
91: U0THR = dat;
00000002 1C11 MOV R1,R2 ; dat
00000004 4800 LDR R0,=0xE000C000
00000006 7001 STRB R1,[R0,#0x0]
92: while ((U0LSR & 0x40) == 0); // 等待數(shù)據(jù)發(fā)送完畢
00000008 L_21:
00000008 4800 LDR R0,=0xE000C014
0000000A 7800 LDRB R0,[R0,#0x0]
0000000C 2140 MOV R1,#0x40
0000000E 4208 TST R0,R1
00000010 D0FA BEQ L_21 ; T=0x00000008
93: }
00000012 4770 BX R14
00000014 ENDP ; 'UART0_SendByte?T'
*** CODE SEGMENT '?PR?UART0_SendStr?T?UART':
101: void UART0_SendStr (uint8 const *str)
00000000 B500 PUSH {LR}
00000002 1C03 MOV R3,R0 ; str
00000004 ---- Variable 'str' assigned to Register 'R3' ----
103: while (1)
00000004 L_27:
105: if (*str == '\0') break; // 遇到結束符,退出
00000004 1C18 MOV R0,R3 ; str
00000006 7800 LDRB R0,[R0,#0x0] ; str
00000008 2800 CMP R0,#0x0
0000000A D005 BEQ L_26 ; T=0x00000018
106: UART0_SendByte(*str++); // 發(fā)送數(shù)據(jù)
0000000C 1C18 MOV R0,R3 ; str
0000000E 3301 ADD R3,#0x1
00000010 7800 LDRB R0,[R0,#0x0] ; str
00000012 F7FF BL UART0_SendByte?T ; T=0x0001 (1)
00000014 FFF5 BL UART0_SendByte?T ; T=0x0001 (2)
107: }
00000016 E7F5 B L_27 ; T=0x00000004
00000018 L_26:
108: }
00000018 BC08 POP {R3}
0000001A 4718 BX R3
0000001C ENDP ; 'UART0_SendStr?T'
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 + -