📄 uart.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 10/Sep/2008 16:13:49 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = E:\AT91EBxx\uart.c #
# Command line = E:\AT91EBxx\uart.c --fpu None -D RAMCODE=1 -lCN #
# E:\AT91EBxx\ramcode-EBxx\List\ -o #
# E:\AT91EBxx\ramcode-EBxx\Obj\ -z3 --no_cse #
# --no_unroll --no_inline --no_code_motion --no_tbaa #
# --no_clustering --no_scheduling --debug --cpu_mode #
# arm --endian little --cpu ARM7TDMI --stack_align 4 #
# --interwork -e --dlib_config "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 #
# Evaluation\arm\LIB\dl4tpainl8n.h" -I "C:\Program #
# Files\IAR Systems\Embedded Workbench 4.0 #
# Evaluation\arm\INC\" #
# List file = E:\AT91EBxx\ramcode-EBxx\List\uart.lst #
# Object file = E:\AT91EBxx\ramcode-EBxx\Obj\uart.r79 #
# #
# #
##############################################################################
E:\AT91EBxx\uart.c
1
2 /*
3 * $Revision: 1.4 $
4 */
5
6 #include <string.h>
7 #include "config.h"
8 #include "uart.h"
9 #include "timer.h"
10
11 #define RD_TIMEOUT 10
12
\ In segment DATA_Z, align 4, align-sorted
13 static char rbuf[RXBUF_SIZE];
\ rbuf:
\ 00000000 DS8 256
\ In segment DATA_Z, align 4, align-sorted
14 static volatile int rptr = 0;
\ rptr:
\ 00000000 DS8 4
\ In segment DATA_Z, align 4, align-sorted
15 static int(*getchar_function)();
\ getchar_function:
\ 00000000 DS8 4
\ In segment DATA_Z, align 4, align-sorted
16 static void(*putchar_function)(int);
\ putchar_function:
\ 00000000 DS8 4
17
18
\ In segment CODE, align 4, keep-with-next
19 void UartInit(int(*getchar_func)(), void(*putchar_func)(int))
20 {
21 getchar_function = getchar_func;
\ UartInit:
\ 00000000 ........ LDR R2,??DataTable2 ;; getchar_function
\ 00000004 000082E5 STR R0,[R2, #+0]
22 putchar_function = putchar_func;
\ 00000008 ........ LDR R0,??DataTable15 ;; putchar_function
\ 0000000C 001080E5 STR R1,[R0, #+0]
23 }
\ 00000010 1EFF2FE1 BX LR ;; return
24
25
\ In segment CODE, align 4, keep-with-next
26 void UartRxrdy()
27 {
\ UartRxrdy:
\ 00000000 10402DE9 PUSH {R4,LR}
28 unsigned char value;
29
30 value = (*getchar_function)();
\ 00000004 ........ LDR R0,??DataTable2 ;; getchar_function
\ 00000008 000090E5 LDR R0,[R0, #+0]
\ 0000000C 0FE0A0E1 MOV LR,PC
\ 00000010 10FF2FE1 BX R0
\ 00000014 0040B0E1 MOVS R4,R0
31
32 if (rptr >= RXBUF_SIZE)
\ 00000018 ........ LDR R0,??DataTable12 ;; rptr
\ 0000001C 000090E5 LDR R0,[R0, #+0]
\ 00000020 400F50E3 CMP R0,#+256
\ 00000024 1A0000AA BGE ??UartRxrdy_0
33 return;
34
35 if(value==0xaa)
\ 00000028 FF4014E2 ANDS R4,R4,#0xFF ;; Zero extend
\ 0000002C AA0054E3 CMP R4,#+170
\ 00000030 0600001A BNE ??UartRxrdy_1
36 {
37 (*putchar_function)(123);
\ 00000034 7B00A0E3 MOV R0,#+123
\ 00000038 ........ LDR R1,??DataTable15 ;; putchar_function
\ 0000003C 001091E5 LDR R1,[R1, #+0]
\ 00000040 0FE0A0E1 MOV LR,PC
\ 00000044 11FF2FE1 BX R1
38 AT91LedSet(0xFF);
\ 00000048 FF00A0E3 MOV R0,#+255
\ 0000004C ........ _BLF AT91LedSet,??AT91LedSet??rA
39 // Sleep(1000);
40 // AT91LedSet(0x18);
41 }
42 if(value==0xbb)
\ ??UartRxrdy_1:
\ 00000050 FF4014E2 ANDS R4,R4,#0xFF ;; Zero extend
\ 00000054 BB0054E3 CMP R4,#+187
\ 00000058 0600001A BNE ??UartRxrdy_2
43 {
44 (*putchar_function)(234);
\ 0000005C EA00A0E3 MOV R0,#+234
\ 00000060 ........ LDR R1,??DataTable15 ;; putchar_function
\ 00000064 001091E5 LDR R1,[R1, #+0]
\ 00000068 0FE0A0E1 MOV LR,PC
\ 0000006C 11FF2FE1 BX R1
45 AT91LedSet(0x00);
\ 00000070 0000A0E3 MOV R0,#+0
\ 00000074 ........ _BLF AT91LedSet,??AT91LedSet??rA
46 }
47 rbuf[rptr++] = value;
\ ??UartRxrdy_2:
\ 00000078 ........ LDR R0,??DataTable12 ;; rptr
\ 0000007C 000090E5 LDR R0,[R0, #+0]
\ 00000080 ........ LDR R1,??DataTable12 ;; rptr
\ 00000084 012090E2 ADDS R2,R0,#+1
\ 00000088 002081E5 STR R2,[R1, #+0]
\ 0000008C ........ LDR R1,??DataTable14 ;; rbuf
\ 00000090 0140C0E7 STRB R4,[R0, +R1]
48 }
\ ??UartRxrdy_0:
\ 00000094 1040BDE8 POP {R4,LR}
\ 00000098 1EFF2FE1 BX LR ;; return
49
50
\ In segment CODE, align 4, keep-with-next
51 int ReceiveLine(char* line, int timeout)
52 {
\ ReceiveLine:
\ 00000000 F0402DE9 PUSH {R4-R7,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
53 int n;
54 int elapsed = 0;
\ 0000000C 0060A0E3 MOV R6,#+0
55
56 while (rptr == 0)
\ ??ReceiveLine_0:
\ 00000010 ........ LDR R0,??DataTable12 ;; rptr
\ 00000014 000090E5 LDR R0,[R0, #+0]
\ 00000018 000050E3 CMP R0,#+0
\ 0000001C 0800001A BNE ??ReceiveLine_1
57 {
58 Sleep(RD_TIMEOUT);
\ 00000020 0A00A0E3 MOV R0,#+10
\ 00000024 ........ _BLF Sleep,??Sleep??rA
59 elapsed += RD_TIMEOUT;
\ 00000028 0A6096E2 ADDS R6,R6,#+10
60 if (timeout && elapsed > timeout)
\ 0000002C 000055E3 CMP R5,#+0
\ 00000030 F6FFFF0A BEQ ??ReceiveLine_0
\ 00000034 060055E1 CMP R5,R6
\ 00000038 F4FFFFAA BGE ??ReceiveLine_0
61 return 0;
\ 0000003C 0000A0E3 MOV R0,#+0
\ 00000040 190000EA B ??ReceiveLine_2
62 }
63
64 for (;;)
65 {
66 n = rptr;
\ ??ReceiveLine_1:
\ 00000044 ........ LDR R0,??DataTable12 ;; rptr
\ 00000048 007090E5 LDR R7,[R0, #+0]
67 Sleep(RD_TIMEOUT);
\ 0000004C 0A00A0E3 MOV R0,#+10
\ 00000050 ........ _BLF Sleep,??Sleep??rA
68 elapsed += RD_TIMEOUT;
\ 00000054 0A6096E2 ADDS R6,R6,#+10
69 if (n == rptr)
\ 00000058 ........ LDR R0,??DataTable12 ;; rptr
\ 0000005C 000090E5 LDR R0,[R0, #+0]
\ 00000060 000057E1 CMP R7,R0
\ 00000064 0B00001A BNE ??ReceiveLine_3
70 break;
71 if (timeout && elapsed > timeout)
72 return 0;
73 }
74
75 rptr = 0;
\ 00000068 ........ LDR R0,??DataTable12 ;; rptr
\ 0000006C 0010A0E3 MOV R1,#+0
\ 00000070 001080E5 STR R1,[R0, #+0]
76 memcpy(line, rbuf, n);
\ 00000074 0720B0E1 MOVS R2,R7
\ 00000078 ........ LDR R1,??DataTable14 ;; rbuf
\ 0000007C 0400B0E1 MOVS R0,R4
\ 00000080 ........ _BLF memcpy,??memcpy??rA
77 rbuf[n] = 0;
\ 00000084 ........ LDR R0,??DataTable14 ;; rbuf
\ 00000088 0010A0E3 MOV R1,#+0
\ 0000008C 0010C7E7 STRB R1,[R7, +R0]
78
79 return n;
\ 00000090 0700B0E1 MOVS R0,R7
\ 00000094 040000EA B ??ReceiveLine_2
\ ??ReceiveLine_3:
\ 00000098 000055E3 CMP R5,#+0
\ 0000009C E8FFFF0A BEQ ??ReceiveLine_1
\ 000000A0 060055E1 CMP R5,R6
\ 000000A4 E6FFFFAA BGE ??ReceiveLine_1
\ 000000A8 0000A0E3 MOV R0,#+0
\ ??ReceiveLine_2:
\ 000000AC F040BDE8 POP {R4-R7,LR}
\ 000000B0 1EFF2FE1 BX LR ;; return
80 }
81
82
\ In segment CODE, align 4, keep-with-next
83 void SendLine(char* line)
84 {
\ SendLine:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 050000EA B ??SendLine_0
85 for ( ; *line; line++)
86 {
87 (*putchar_function)(*line);
\ ??SendLine_1:
\ 0000000C 0000D4E5 LDRB R0,[R4, #+0]
\ 00000010 ........ LDR R1,??DataTable15 ;; putchar_function
\ 00000014 001091E5 LDR R1,[R1, #+0]
\ 00000018 0FE0A0E1 MOV LR,PC
\ 0000001C 11FF2FE1 BX R1
88 }
\ 00000020 014094E2 ADDS R4,R4,#+1
\ ??SendLine_0:
\ 00000024 0000D4E5 LDRB R0,[R4, #+0]
\ 00000028 000050E3 CMP R0,#+0
\ 0000002C F6FFFF1A BNE ??SendLine_1
89 }
\ 00000030 1040BDE8 POP {R4,LR}
\ 00000034 1EFF2FE1 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ ??DataTable2:
\ 00000000 ........ DC32 getchar_function
\ In segment CODE, align 4, keep-with-next
\ ??DataTable12:
\ 00000000 ........ DC32 rptr
\ In segment CODE, align 4, keep-with-next
\ ??DataTable14:
\ 00000000 ........ DC32 rbuf
\ In segment CODE, align 4, keep-with-next
\ ??DataTable15:
\ 00000000 ........ DC32 putchar_function
90
91
Maximum stack usage in bytes:
Function CSTACK
-------- ------
ReceiveLine 20
SendLine 8
UartInit 0
UartRxrdy 8
Segment part sizes:
Function/Label Bytes
-------------- -----
rbuf 256
rptr 4
getchar_function 4
putchar_function 4
UartInit 20
UartRxrdy 156
ReceiveLine 180
SendLine 56
??DataTable2 4
??DataTable12 4
??DataTable14 4
??DataTable15 4
Others 64
480 bytes in segment CODE
268 bytes in segment DATA_Z
12 bytes in segment INITTAB
428 bytes of CODE memory (+ 64 bytes shared)
268 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -