📄 rs485.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -ors485.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips RS485\RS485.c]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
UART0_GetByte PROC
;;;13 uint8 rcv_dat;
;;;14 IO0CLR |=1<<31;
000000 e59f1188 LDR r1,|L1.400|
000004 e591100c LDR r1,[r1,#0xc]
000008 e3811102 ORR r1,r1,#0x80000000
00000c e59f217c LDR r2,|L1.400|
000010 e582100c STR r1,[r2,#0xc]
;;;15 while ((U0LSR & 0x01) == 0);
000014 e1a00000 MOV r0,r0
|L1.24|
000018 e59f1174 LDR r1,|L1.404|
00001c e5d11014 LDRB r1,[r1,#0x14]
000020 e3110001 TST r1,#1
000024 0afffffb BEQ |L1.24|
;;;16 rcv_dat = U0RBR;
000028 e59f1164 LDR r1,|L1.404|
00002c e5d10000 LDRB r0,[r1,#0]
;;;17
;;;18 return (rcv_dat);
;;;19 }
000030 e12fff1e BX lr
ENDP
UART0_GetStr PROC
;;;29 void UART0_GetStr (uint8 *s, uint32 n)
;;;30 {
000034 e92d4010 PUSH {r4,lr}
000038 e1a03000 MOV r3,r0
00003c e1a04001 MOV r4,r1
;;;31 for ( ; n>0; n--)
000040 ea000002 B |L1.80|
;;;32 {
;;;33 *s++ = UART0_GetByte();
|L1.68|
000044 ebfffffe BL UART0_GetByte
000048 e4c30001 STRB r0,[r3],#1
00004c e2444001 SUB r4,r4,#1 ;31
|L1.80|
000050 e3540000 CMP r4,#0 ;31
000054 1afffffa BNE |L1.68| ;31
;;;34 }
;;;35 }
000058 e8bd4010 POP {r4,lr}
00005c e12fff1e BX lr
ENDP
UART0_SendByte PROC
;;;45 {
;;;46 IO0SET |=1<<31;
000060 e59f1128 LDR r1,|L1.400|
000064 e5911004 LDR r1,[r1,#4]
000068 e3811102 ORR r1,r1,#0x80000000
00006c e59f211c LDR r2,|L1.400|
000070 e5821004 STR r1,[r2,#4]
;;;47 U0THR = dat;
000074 e2421907 SUB r1,r2,#0x1c000
000078 e5c10000 STRB r0,[r1,#0]
;;;48 while ((U0LSR & 0x40) == 0); // 等待数据发送完毕
00007c e1a00000 MOV r0,r0
|L1.128|
000080 e59f110c LDR r1,|L1.404|
000084 e5d11014 LDRB r1,[r1,#0x14]
000088 e3110040 TST r1,#0x40
00008c 0afffffb BEQ |L1.128|
;;;49 }
000090 e12fff1e BX lr
ENDP
UART0_SendStr PROC
;;;58 void UART0_SendStr (uint8 const *str)
;;;59 {
000094 e52de004 PUSH {lr}
000098 e1a03000 MOV r3,r0
;;;60 while (1)
00009c ea000005 B |L1.184|
;;;61 {
;;;62 if (*str == '\0') break; // 遇到结束符,退出
|L1.160|
0000a0 e5d30000 LDRB r0,[r3,#0]
0000a4 e3500000 CMP r0,#0
0000a8 1a000000 BNE |L1.176|
0000ac ea000002 B |L1.188|
;;;63 UART0_SendByte(*str++); // 发送数据
|L1.176|
0000b0 e4d30001 LDRB r0,[r3],#1
0000b4 ebfffffe BL UART0_SendByte
|L1.184|
0000b8 eafffff8 B |L1.160| ;60
|L1.188|
0000bc e1a00000 MOV r0,r0 ;62
;;;64 }
;;;65 }
0000c0 e49de004 POP {lr}
0000c4 e12fff1e BX lr
ENDP
UART1_GetByte PROC
;;;76 uint8 rcv_dat;
;;;77 IO0CLR |=1<<10;
0000c8 e59f10c0 LDR r1,|L1.400|
0000cc e591100c LDR r1,[r1,#0xc]
0000d0 e3811b01 ORR r1,r1,#0x400
0000d4 e59f20b4 LDR r2,|L1.400|
0000d8 e582100c STR r1,[r2,#0xc]
;;;78 while ((U1LSR & 0x01) == 0);
0000dc e1a00000 MOV r0,r0
|L1.224|
0000e0 e59f10b0 LDR r1,|L1.408|
0000e4 e5d11014 LDRB r1,[r1,#0x14]
0000e8 e3110001 TST r1,#1
0000ec 0afffffb BEQ |L1.224|
;;;79 rcv_dat = U1RBR;
0000f0 e59f10a0 LDR r1,|L1.408|
0000f4 e5d10000 LDRB r0,[r1,#0]
;;;80
;;;81 return (rcv_dat);
;;;82 }
0000f8 e12fff1e BX lr
ENDP
UART1_GetStr PROC
;;;92 void UART1_GetStr (uint8 *s, uint32 n)
;;;93 {
0000fc e92d4010 PUSH {r4,lr}
000100 e1a03000 MOV r3,r0
000104 e1a04001 MOV r4,r1
;;;94 for ( ; n>0; n--)
000108 ea000002 B |L1.280|
;;;95 {
;;;96 *s++ = UART1_GetByte();
|L1.268|
00010c ebfffffe BL UART1_GetByte
000110 e4c30001 STRB r0,[r3],#1
000114 e2444001 SUB r4,r4,#1 ;94
|L1.280|
000118 e3540000 CMP r4,#0 ;94
00011c 1afffffa BNE |L1.268| ;94
;;;97 }
;;;98 }
000120 e8bd4010 POP {r4,lr}
000124 e12fff1e BX lr
ENDP
UART1_SendByte PROC
;;;108 {
;;;109 IO0SET |=1<<10;
000128 e59f1060 LDR r1,|L1.400|
00012c e5911004 LDR r1,[r1,#4]
000130 e3811b01 ORR r1,r1,#0x400
000134 e59f2054 LDR r2,|L1.400|
000138 e5821004 STR r1,[r2,#4]
;;;110 U1THR = dat;
00013c e2421906 SUB r1,r2,#0x18000
000140 e5c10000 STRB r0,[r1,#0]
;;;111 while ((U1LSR & 0x40) == 0); // 等待数据发送完毕
000144 e1a00000 MOV r0,r0
|L1.328|
000148 e59f1048 LDR r1,|L1.408|
00014c e5d11014 LDRB r1,[r1,#0x14]
000150 e3110040 TST r1,#0x40
000154 0afffffb BEQ |L1.328|
;;;112 }
000158 e12fff1e BX lr
ENDP
UART1_SendStr PROC
;;;121 void UART1_SendStr (uint8 const *str)
;;;122 {
00015c e52de004 PUSH {lr}
000160 e1a03000 MOV r3,r0
;;;123 while (1)
000164 ea000005 B |L1.384|
;;;124 {
;;;125 if (*str == '\0') break; // 遇到结束符,退出
|L1.360|
000168 e5d30000 LDRB r0,[r3,#0]
00016c e3500000 CMP r0,#0
000170 1a000000 BNE |L1.376|
000174 ea000002 B |L1.388|
;;;126 UART1_SendByte(*str++); // 发送数据
|L1.376|
000178 e4d30001 LDRB r0,[r3],#1
00017c ebfffffe BL UART1_SendByte
|L1.384|
000180 eafffff8 B |L1.360| ;123
|L1.388|
000184 e1a00000 MOV r0,r0 ;125
;;;127 }
;;;128 }
000188 e49de004 POP {lr}
00018c e12fff1e BX lr
|L1.400|
000190 e0028000 DCD 0xe0028000
|L1.404|
000194 e000c000 DCD 0xe000c000
|L1.408|
000198 e0010000 DCD 0xe0010000
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -