📄 irquart0.lst
字号:
ARM COMPILER V2.50a, IRQUART0 16/06/07 08:25:44 PAGE 1
ARM COMPILER V2.50a, COMPILATION OF MODULE IRQUART0
OBJECT MODULE PLACED IN IRQUART0.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe IRQUART0.C THUMB BROWSE DEBUG TABS(4)
stmt level source
1 #include "config.h"
2 #include "IRQUART0.h"
3
4
5 uint8 rcv_buf[50];
6 volatile uint8 i=0;
7 uint8 j=0;
8
9 volatile uint8 rcv_new;
10
11 void IRQ_UART0(void) __irq
12 {
13 1 // uint8 m;
14 1 if((U0IIR & 0x0F) == 0x04)
15 1 {
16 2 //while(1);
17 2 rcv_new = 1;
18 2 //for(m=0;m<8;m++)
19 2 {
20 3 rcv_buf[i] = U0RBR;
21 3 i++;
22 3 }
23 2 }
24 1
25 1 VICVectAddr = 0x00;
26 1 }
27
28 void UART0_SendByte(uint8 dat)
29 {
30 1 U0THR = dat;
31 1 while((U0LSR & 0x20) == 0);
32 1 }
33
34 void UART0_SendBuf(void)
35 {
36 1 if(rcv_new == 1)
37 1 {
38 2 rcv_new = 0;
39 2 while((i>j) && (j<50))
40 2 {
41 3 UART0_SendByte(rcv_buf[j]);
42 3 j++;
43 3 }
44 2 while((U0LSR & 0x20) == 0);
45 2 if((i==j) || (j>=50))
46 2 {
47 3 i=j=0;
48 3 }
49 2 }
50 1 }
51
52 int8 UART0_Init(uint32 baud,UARTMODE set)
53 {
54 1 uint32 bak;
55 1
56 1
57 1 U0LCR = 0x80;
58 1 bak = (Fpclk>>4)/baud;
59 1 U0DLM = bak>>8;
ARM COMPILER V2.50a, IRQUART0 16/06/07 08:25:44 PAGE 2
60 1 U0DLL = bak & 0xff;
61 1
62 1 bak = set.datab - 5;
63 1 if(set.stopb == 2) bak |= 0x04;
64 1
65 1 if(set.parity != 0)
66 1 {
67 2 set.parity = set.parity-1;
68 2 bak |= 0x08;
69 2 }
70 1 bak |= set.parity<<4;
71 1
72 1 U0LCR = bak;
73 1 i=0;j=0;
74 1 return(1);
75 1 }
76
77
78 /*----------------------------------------------------------
79 void main()
80 {
81 UARTMODE set;
82
83 set.datab = 8;
84 set.stopb = 1;
85 set.parity = 0;
86
87 rcv_new = 0;
88
89 PINSEL0 |= 0x05; //设置IO连接到UART0
90
91
92 UART0_Init(115200,set);
93 //U0FCR = 0x81; //接收器触发点为8个字符
94 U0FCR = 0x01; //接收器触发点为1个字符
95
96 U0IER = 0x01; //接收中断开,发送中断关
97
98 //串口0中断设置
99 VICVectCntl0 = 0x20|0x06;
100 VICVectAddr0 = (uint32)IRQ_UART0;
101 VICIntEnable = 1<<0x06;
102
103 VICIntSelect = 0x00; //设置所有通道为IRQ中断
104 }
105 -----------------------------------------------------------*/
ARM COMPILER V2.50a, IRQUART0 16/06/07 08:25:44 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (?C?UDIV?T)
*** PUBLICS:
PUBLIC UART0_SendByte?T
PUBLIC IRQ_UART0?A
PUBLIC UART0_SendBuf?T
PUBLIC UART0_Init?T
PUBLIC rcv_buf
PUBLIC rcv_new
PUBLIC i
PUBLIC j
*** DATA SEGMENT '?DT0?IRQUART0':
00000000 rcv_buf:
00000000 DS 50
00000032 rcv_new:
00000032 DS 1
00000033 i:
00000033 BEGIN_INIT
00000033 00 DB 0x0
00000034 END_INIT
00000034 j:
00000034 BEGIN_INIT
00000034 00 DB 0x0
00000035 END_INIT
*** CODE SEGMENT '?PR?IRQ_UART0?A?IRQUART0':
11: void IRQ_UART0(void) __irq
00000000 E92D0007 STMDB R13!,{R0-R2}
14: if((U0IIR & 0x0F) == 0x04)
00000004 E5100000 LDR R0,=0xE000C008
00000008 E5D00000 LDRB R0,[R0,#0x0]
0000000C E200000F AND R0,R0,#0x000F
00000010 E3500004 CMP R0,#0x0004
00000014 1A00000D BNE L_1 ; Targ=0x50
17: rcv_new = 1;
00000018 E3A01001 MOV R1,#0x1
0000001C E5100000 LDR R0,=rcv_new ; rcv_new
00000020 E5C01000 STRB R1,[R0,#0x0] ; rcv_new
20: rcv_buf[i] = U0RBR;
00000024 E5100000 LDR R0,=0xE000C000
00000028 E5D00000 LDRB R0,[R0,#0x0]
0000002C E5101000 LDR R1,=i ; i
00000030 E5D11000 LDRB R1,[R1,#0x0] ; i
00000034 E1A02001 MOV R2,R1
00000038 E5101000 LDR R1,=rcv_buf ; rcv_buf
0000003C E7C10002 STRB R0,[R1,+R2]
21: i++;
00000040 E5100000 LDR R0,=i ; i
00000044 E5D01000 LDRB R1,[R0,#0x0] ; i
00000048 E2811001 ADD R1,R1,#0x0001
0000004C E5C01000 STRB R1,[R0,#0x0] ; i
23: }
00000050 L_1:
25: VICVectAddr = 0x00;
00000050 E3A01000 MOV R1,#0x0
00000054 E5100000 LDR R0,=0xFFFFF030
00000058 E5801000 STR R1,[R0,#0x0]
26: }
0000005C E8BD0007 LDMIA R13!,{R0-R2}
00000060 E25EF004 SUBS R15,R14,#0x0004
00000064 ENDP ; 'IRQ_UART0?A'
ARM COMPILER V2.50a, IRQUART0 16/06/07 08:25:44 PAGE 4
*** CODE SEGMENT '?PR?UART0_SendByte?T?IRQUART0':
28: void UART0_SendByte(uint8 dat)
00000000 1C02 MOV R2,R0 ; dat
00000002 ---- Variable 'dat' assigned to Register 'R2' ----
30: U0THR = dat;
00000002 1C11 MOV R1,R2 ; dat
00000004 4800 LDR R0,=0xE000C000
00000006 7001 STRB R1,[R0,#0x0]
31: while((U0LSR & 0x20) == 0);
00000008 L_2:
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_2 ; T=0x00000008
32: }
00000012 4770 BX R14
00000014 ENDP ; 'UART0_SendByte?T'
*** CODE SEGMENT '?PR?UART0_SendBuf?T?IRQUART0':
34: void UART0_SendBuf(void)
00000000 B500 PUSH {LR}
36: if(rcv_new == 1)
00000002 4800 LDR R0,=rcv_new ; rcv_new
00000004 7800 LDRB R0,[R0,#0x0] ; rcv_new
00000006 2801 CMP R0,#0x1
00000008 D12A BNE L_6 ; T=0x00000060
38: rcv_new = 0;
0000000A 2100 MOV R1,#0x0
0000000C 4800 LDR R0,=rcv_new ; rcv_new
0000000E 7001 STRB R1,[R0,#0x0] ; rcv_new
39: while((i>j) && (j<50))
00000010 E00A B L_7 ; T=0x00000028
00000012 L_9:
41: UART0_SendByte(rcv_buf[j]);
00000012 4800 LDR R0,=j ; j
00000014 7800 LDRB R0,[R0,#0x0] ; j
00000016 1C01 MOV R1,R0
00000018 4800 LDR R0,=rcv_buf ; rcv_buf
0000001A 5C40 LDRB R0,[R0,R1]
0000001C F7FF BL UART0_SendByte?T ; T=0x0001 (1)
0000001E FFF0 BL UART0_SendByte?T ; T=0x0001 (2)
42: j++;
00000020 4800 LDR R0,=j ; j
00000022 7801 LDRB R1,[R0,#0x0] ; j
00000024 3101 ADD R1,#0x1
00000026 7001 STRB R1,[R0,#0x0] ; j
43: }
00000028 L_7:
00000028 4800 LDR R0,=j ; j
0000002A 7800 LDRB R0,[R0,#0x0] ; j
0000002C 1C02 MOV R2,R0
0000002E 4800 LDR R1,=i ; i
00000030 7809 LDRB R1,[R1,#0x0] ; i
00000032 4291 CMP R1,R2
00000034 D901 BLS L_8 ; T=0x0000003A
00000036 2832 CMP R0,#0x32
00000038 DBEB BLT L_9 ; T=0x00000012
0000003A L_8:
44: while((U0LSR & 0x20) == 0);
0000003A L_12:
0000003A 4800 LDR R0,=0xE000C014
0000003C 7800 LDRB R0,[R0,#0x0]
0000003E 2120 MOV R1,#0x20
00000040 4208 TST R0,R1
00000042 D0FA BEQ L_12 ; T=0x0000003A
45: if((i==j) || (j>=50))
ARM COMPILER V2.50a, IRQUART0 16/06/07 08:25:44 PAGE 5
00000044 4800 LDR R0,=j ; j
00000046 7800 LDRB R0,[R0,#0x0] ; j
00000048 1C02 MOV R2,R0
0000004A 4800 LDR R1,=i ; i
0000004C 7809 LDRB R1,[R1,#0x0] ; i
0000004E 4291 CMP R1,R2
00000050 D001 BEQ L_17 ; T=0x00000056
00000052 2832 CMP R0,#0x32
00000054 DB04 BLT L_6 ; T=0x00000060
00000056 L_17:
47: i=j=0;
00000056 2100 MOV R1,#0x0
00000058 4800 LDR R0,=j ; j
0000005A 7001 STRB R1,[R0,#0x0] ; j
0000005C 4800 LDR R0,=i ; i
0000005E 7001 STRB R1,[R0,#0x0] ; i
49: }
00000060 L_6:
50: }
00000060 BC08 POP {R3}
00000062 4718 BX R3
00000064 ENDP ; 'UART0_SendBuf?T'
*** CODE SEGMENT '?PR?UART0_Init?T?IRQUART0':
52: int8 UART0_Init(uint32 baud,UARTMODE set)
00000000 B500 PUSH {LR}
00000002 1C02 MOV R2,R0 ; baud
00000004 ---- Variable 'baud' assigned to Register 'R2' ----
53: {
00000004 ; SCOPE-START
57: U0LCR = 0x80;
00000004 2180 MOV R1,#0x80
00000006 4800 LDR R0,=0xE000C00C
00000008 7001 STRB R1,[R0,#0x0]
58: bak = (Fpclk>>4)/baud;
0000000A 1C11 MOV R1,R2 ; baud
0000000C 4800 LDR R0,=0xA8C00
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 ---- Variable 'bak' assigned to Register 'R0' ----
59: U0DLM = bak>>8;
00000014 1C02 MOV R2,R0 ; bak
00000016 0A12 LSR R2,R2,#0x8 ; bak
00000018 0612 LSL R2,R2,#0x18
0000001A 0E12 LSR R2,R2,#0x18
0000001C 4800 LDR R1,=0xE000C004
0000001E 700A STRB R2,[R1,#0x0]
60: U0DLL = bak & 0xff;
00000020 1C01 MOV R1,R0 ; bak
00000022 20FF MOV R0,#0xFF
00000024 4001 AND R1,R0
00000026 0609 LSL R1,R1,#0x18
00000028 0E09 LSR R1,R1,#0x18
0000002A 4800 LDR R0,=0xE000C000
0000002C 7001 STRB R1,[R0,#0x0]
62: bak = set.datab - 5;
0000002E A800 ADD R0,R13,#0x0
00000030 7800 LDRB R0,[R0,#0x0] ; set
00000032 3805 SUB R0,#0x5
63: if(set.stopb == 2) bak |= 0x04;
00000034 2101 MOV R1,#0x1
00000036 4469 ADD R1,R13
00000038 7809 LDRB R1,[R1,#0x0] ; set+1
0000003A 2902 CMP R1,#0x2
0000003C D101 BNE L_18 ; T=0x00000042
0000003E 2104 MOV R1,#0x4
ARM COMPILER V2.50a, IRQUART0 16/06/07 08:25:44 PAGE 6
00000040 4308 ORR R0,R1
00000042 L_18:
65: if(set.parity != 0)
00000042 2102 MOV R1,#0x2
00000044 4469 ADD R1,R13
00000046 780A LDRB R2,[R1,#0x0] ; set+2
00000048 2A00 CMP R2,#0x0
0000004A D005 BEQ L_19 ; T=0x00000058
67: set.parity = set.parity-1;
0000004C 3A01 SUB R2,#0x1
0000004E 0612 LSL R2,R2,#0x18
00000050 0E12 LSR R2,R2,#0x18
00000052 700A STRB R2,[R1,#0x0] ; set+2
68: bak |= 0x08;
00000054 2208 MOV R2,#0x8
00000056 4310 ORR R0,R2
69: }
00000058 L_19:
70: bak |= set.parity<<4;
00000058 7809 LDRB R1,[R1,#0x0] ; set+2
0000005A 0109 LSL R1,R1,#0x4
0000005C 4308 ORR R0,R1
72: U0LCR = bak;
0000005E 1C01 MOV R1,R0 ; bak
00000060 0609 LSL R1,R1,#0x18 ; bak
00000062 0E09 LSR R1,R1,#0x18
00000064 4800 LDR R0,=0xE000C00C
00000066 7001 STRB R1,[R0,#0x0]
73: i=0;j=0;
00000068 2100 MOV R1,#0x0
0000006A 4800 LDR R0,=i ; i
0000006C 7001 STRB R1,[R0,#0x0] ; i
0000006E 4800 LDR R0,=j ; j
00000070 7001 STRB R1,[R0,#0x0] ; j
74: return(1);
00000072 2001 MOV R0,#0x1
00000074 ; SCOPE-END
75: }
00000074 BC08 POP {R3}
00000076 4718 BX R3
00000078 ENDP ; 'UART0_Init?T'
Module Information Static
----------------------------------
code size = ------
data size = 53
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 + -