📄 ledswitch.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 939] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\obj\ledswitch.o --depend=.\obj\ledswitch.d --device=DARMP --apcs=interwork -O0 -IC:\Keil305\ARM\INC\Philips -D__MICROLIB --omf_browse=.\obj\ledswitch.crf LEDswitch.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
init PROC
;;;32 /* I/O Ports configured as Output (Push-pull) */
;;;33 FIO2DIR = 0x000000FF;
000000 e3a000ff MOV r0,#0xff
000004 e59f1270 LDR r1,|L1.636|
000008 e5810040 STR r0,[r1,#0x40]
;;;34 FIO2MASK = 0x00000000;
00000c e3a00000 MOV r0,#0
000010 e5810050 STR r0,[r1,#0x50]
;;;35 FIO2PIN = 0x00000000;
000014 e5810054 STR r0,[r1,#0x54]
;;;36 PINSEL10 = 0;
000018 e59f1260 LDR r1,|L1.640|
00001c e5810028 STR r0,[r1,#0x28]
;;;37
;;;38 /* Timer 1 as interval timer, reload to 100ms. */
;;;39 T1TCR = 1;
000020 e3a00001 MOV r0,#1
000024 e2411909 SUB r1,r1,#0x24000
000028 e5810004 STR r0,[r1,#4]
;;;40 T1MCR = 3;
00002c e3a00003 MOV r0,#3
000030 e5810014 STR r0,[r1,#0x14]
;;;41 T1MR0 = TCNT - 1;
000034 e59f0248 LDR r0,|L1.644|
000038 e5810018 STR r0,[r1,#0x18]
;;;42
;;;43 /* Configure UART1 for 115200 baud. */
;;;44 PINSEL0 = 0x40000000; /* Enable TxD1 pin */
00003c e3a00101 MOV r0,#0x40000000
000040 e2811909 ADD r1,r1,#0x24000
000044 e5810000 STR r0,[r1,#0]
;;;45 PINSEL1 = 0x00000001; /* Enable RxD1 pin */
000048 e3a00001 MOV r0,#1
00004c e5810004 STR r0,[r1,#4]
;;;46 U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit*/
000050 e3a00083 MOV r0,#0x83
000054 e2411907 SUB r1,r1,#0x1c000
000058 e581000c STR r0,[r1,#0xc]
;;;47 U1DLL = 3; /* for 12MHz PCLK Clock */
00005c e3a00003 MOV r0,#3
000060 e5810000 STR r0,[r1,#0]
;;;48 U1FDR = 0x67; /* Fractional Divider */
000064 e3a00067 MOV r0,#0x67
000068 e5810028 STR r0,[r1,#0x28]
;;;49 U1LCR = 0x03; /* DLAB = 0 */
00006c e3a00003 MOV r0,#3
000070 e581000c STR r0,[r1,#0xc]
;;;50 }
000074 e12fff1e BX lr
;;;51
ENDP
init_display PROC
;;;61 // " LEDsw. example ");
;;;62 }
000078 e12fff1e BX lr
;;;63
ENDP
timer_poll PROC
;;;66
;;;67 static void timer_poll () {
00007c e92d4010 PUSH {r4,lr}
;;;68 /* System tick timer running in poll mode */
;;;69
;;;70 if (T1IR & 1) {
000080 e59f0200 LDR r0,|L1.648|
000084 e5900000 LDR r0,[r0,#0]
000088 e3100001 TST r0,#1
00008c 0a000003 BEQ |L1.160|
;;;71 T1IR = 1;
000090 e3a00001 MOV r0,#1
000094 e59f11ec LDR r1,|L1.648|
000098 e5810000 STR r0,[r1,#0]
;;;72 /* Timer tick every 100 ms */
;;;73 timer_tick ();
00009c ebfffffe BL timer_tick
|L1.160|
;;;74 }
;;;75 }
0000a0 e8bd4010 POP {r4,lr}
0000a4 e12fff1e BX lr
;;;76
ENDP
fputc PROC
;;;82
;;;83 if (ch == '\n') {
0000a8 e350000a CMP r0,#0xa
0000ac 1a000007 BNE |L1.208|
;;;84 while (!(U1LSR & 0x20));
0000b0 e1a00000 MOV r0,r0
|L1.180|
0000b4 e59f21d0 LDR r2,|L1.652|
0000b8 e5922014 LDR r2,[r2,#0x14]
0000bc e3120020 TST r2,#0x20
0000c0 0afffffb BEQ |L1.180|
;;;85 U1THR = '\r'; /* output CR */
0000c4 e3a0200d MOV r2,#0xd
0000c8 e59f31bc LDR r3,|L1.652|
0000cc e5832000 STR r2,[r3,#0]
|L1.208|
;;;86 }
;;;87 while (!(U1LSR & 0x20));
0000d0 e1a00000 MOV r0,r0
|L1.212|
0000d4 e59f21b0 LDR r2,|L1.652|
0000d8 e5922014 LDR r2,[r2,#0x14]
0000dc e3120020 TST r2,#0x20
0000e0 0afffffb BEQ |L1.212|
;;;88 return (U1THR = ch);
0000e4 e59f21a0 LDR r2,|L1.652|
0000e8 e5820000 STR r0,[r2,#0]
;;;89 }
0000ec e12fff1e BX lr
;;;90
ENDP
procrec PROC
;;;94 void procrec (U8 *buf) {
;;;95 switch (buf[0]) {
0000f0 e5d01000 LDRB r1,[r0,#0]
0000f4 e3510001 CMP r1,#1
0000f8 1a000007 BNE |L1.284|
;;;96 case BLINKLED:
0000fc e1a00000 MOV r0,r0
;;;97 FIO2SET = buf[1];
000100 e5d01001 LDRB r1,[r0,#1]
000104 e59f2170 LDR r2,|L1.636|
000108 e5821058 STR r1,[r2,#0x58]
;;;98 FIO2CLR = ~buf[1];
00010c e5d01001 LDRB r1,[r0,#1]
000110 e1e01001 MVN r1,r1
000114 e582105c STR r1,[r2,#0x5c]
;;;99 break;
000118 e1a00000 MOV r0,r0
|L1.284|
00011c e1a00000 MOV r0,r0
;;;100 }
;;;101 }
000120 e12fff1e BX lr
;;;102 /*--------------------------- UDP socket ------------------------------------*/
ENDP
udp_callback PROC
;;;103
;;;104 U16 udp_callback (U8 soc, U8 *rip, U16 rport, U8 *buf, U16 len) {
000124 e92d40f0 PUSH {r4-r7,lr}
000128 e1a04000 MOV r4,r0
00012c e1a05001 MOV r5,r1
000130 e1a06002 MOV r6,r2
000134 e59d7014 LDR r7,[sp,#0x14]
;;;105 rip = rip;
000138 e1a00000 MOV r0,r0
;;;106 rport= rport;
00013c e1a00000 MOV r0,r0
;;;107 len = len;
000140 e1a00000 MOV r0,r0
;;;108
;;;109 if (soc != socket_udp) {
000144 e59f0144 LDR r0,|L1.656|
000148 e5d00000 LDRB r0,[r0,#0] ; socket_udp
00014c e1540000 CMP r4,r0
000150 0a000002 BEQ |L1.352|
;;;110 /* Check if this is the socket we are connected to */
;;;111 return (0);
000154 e3a00000 MOV r0,#0
|L1.344|
000158 e8bd40f0 POP {r4-r7,lr}
;;;112 }
;;;113
;;;114 procrec(buf);
;;;115 return (0);
;;;116 }
00015c e12fff1e BX lr
|L1.352|
000160 e1a00003 MOV r0,r3 ;114
000164 ebfffffe BL procrec
000168 e3a00000 MOV r0,#0 ;115
00016c eafffff9 B |L1.344|
;;;117
ENDP
tcp_callback PROC
;;;119
;;;120 U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) {
000170 e92d4070 PUSH {r4-r6,lr}
000174 e1a04000 MOV r4,r0
000178 e1a05001 MOV r5,r1
00017c e1a06002 MOV r6,r2
;;;121 /* This function is called by the TCP module on TCP event */
;;;122 /* Check the 'Net_Config.h' for possible events. */
;;;123
;;;124 par = par;
000180 e1a00000 MOV r0,r0
;;;125
;;;126 if (soc != socket_tcp) {
000184 e59f0108 LDR r0,|L1.660|
000188 e5d00000 LDRB r0,[r0,#0] ; socket_tcp
00018c e1540000 CMP r4,r0
000190 0a000002 BEQ |L1.416|
;;;127 return (1);
000194 e3a00001 MOV r0,#1
|L1.408|
000198 e8bd4070 POP {r4-r6,lr}
;;;128 }
;;;129
;;;130 switch (evt) {
;;;131 case TCP_EVT_DATA:
;;;132 /* TCP data frame has arrived, data is located at *par1, */
;;;133 /* data length is par2. Allocate buffer to send reply. */
;;;134 procrec(ptr);
;;;135 break;
;;;136
;;;137 case TCP_EVT_CONREQ:
;;;138 /* Remote peer requested connect, accept it */
;;;139 return (1);
;;;140
;;;141 case TCP_EVT_CONNECT:
;;;142 /* The TCP socket is connected */
;;;143 return (1);
;;;144 }
;;;145 return (0);
;;;146 }
00019c e12fff1e BX lr
|L1.416|
0001a0 e3550000 CMP r5,#0 ;130
0001a4 0a000007 BEQ |L1.456|
0001a8 e3550001 CMP r5,#1 ;130
0001ac 0a000008 BEQ |L1.468|
0001b0 e3550005 CMP r5,#5 ;130
0001b4 1a000009 BNE |L1.480|
0001b8 e1a00000 MOV r0,r0 ;131
0001bc e1a00006 MOV r0,r6 ;134
0001c0 ebfffffe BL procrec
0001c4 ea000005 B |L1.480|
|L1.456|
0001c8 e1a00000 MOV r0,r0 ;137
0001cc e3a00001 MOV r0,#1 ;139
0001d0 eafffff0 B |L1.408|
|L1.468|
0001d4 e1a00000 MOV r0,r0 ;141
0001d8 e3a00001 MOV r0,#1 ;143
0001dc eaffffed B |L1.408|
|L1.480|
0001e0 e1a00000 MOV r0,r0 ;135
0001e4 e3a00000 MOV r0,#0 ;145
0001e8 eaffffea B |L1.408|
;;;147
ENDP
main PROC
;;;150
;;;151 int main (void) {
0001ec e92d4010 PUSH {r4,lr}
;;;152 /* Main Thread of the TcpNet */
;;;153
;;;154 init();
0001f0 ebfffffe BL init
;;;155 //init_display();
;;;156 init_TcpNet();
0001f4 ebfffffe BL init_TcpNet
;;;157
;;;158 /* Initialize UDP Socket and start listening */
;;;159 socket_udp = udp_get_socket (0, UDP_OPT_SEND_CS | UDP_OPT_CHK_CS, udp_callback);
0001f8 e24f20dc ADR r2,udp_callback
0001fc e3a01003 MOV r1,#3
000200 e3a00000 MOV r0,#0
000204 ebfffffe BL udp_get_socket
000208 e59f1080 LDR r1,|L1.656|
00020c e5c10000 STRB r0,[r1,#0] ; socket_udp
;;;160 if (socket_udp != 0) {
000210 e2810000 ADD r0,r1,#0
000214 e5d00000 LDRB r0,[r0,#0] ; socket_udp
000218 e3500000 CMP r0,#0
00021c 0a000003 BEQ |L1.560|
;;;161 udp_open (socket_udp, PORT_NUM);
000220 e59f1070 LDR r1,|L1.664|
000224 e59f0064 LDR r0,|L1.656|
000228 e5d00000 LDRB r0,[r0,#0] ; socket_udp
00022c ebfffffe BL udp_open
|L1.560|
;;;162 }
;;;163
;;;164 /* Initialize TCP Socket and start listening */
;;;165 socket_tcp = tcp_get_socket (TCP_TYPE_SERVER, 0, 10, tcp_callback);
000230 e24f30c8 ADR r3,tcp_callback
000234 e3a0200a MOV r2,#0xa
000238 e3a01000 MOV r1,#0
00023c e3a00001 MOV r0,#1
000240 ebfffffe BL tcp_get_socket
000244 e59f1048 LDR r1,|L1.660|
000248 e5c10000 STRB r0,[r1,#0] ; socket_tcp
;;;166 if (socket_tcp != 0) {
00024c e2810000 ADD r0,r1,#0
000250 e5d00000 LDRB r0,[r0,#0] ; socket_tcp
000254 e3500000 CMP r0,#0
000258 0a000003 BEQ |L1.620|
;;;167 tcp_listen (socket_tcp, PORT_NUM);
00025c e59f1034 LDR r1,|L1.664|
000260 e59f002c LDR r0,|L1.660|
000264 e5d00000 LDRB r0,[r0,#0] ; socket_tcp
000268 ebfffffe BL tcp_listen
|L1.620|
;;;168 }
;;;169
;;;170 while (1) {
00026c ea000001 B |L1.632|
|L1.624|
;;;171 timer_poll ();
000270 ebfffffe BL timer_poll
;;;172 main_TcpNet ();
000274 ebfffffe BL main_TcpNet
|L1.632|
000278 eafffffc B |L1.624|
;;;173 }
;;;174 }
;;;175
ENDP
|L1.636|
00027c 3fffc000 DCD 0x3fffc000
|L1.640|
000280 e002c000 DCD 0xe002c000
|L1.644|
000284 00124f7f DCD 0x00124f7f
|L1.648|
000288 e0008000 DCD 0xe0008000
|L1.652|
00028c e0010000 DCD 0xe0010000
|L1.656|
000290 00000000 DCD socket_udp
|L1.660|
000294 00000000 DCD socket_tcp
|L1.664|
000298 000003e9 DCD 0x000003e9
AREA ||.data||, DATA, ALIGN=0
socket_tcp
000000 00 DCB 0x00
socket_udp
000001 00 DCB 0x00
__ARM_use_no_argv EQU 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -