📄 bsp_uart.txt
字号:
00021a 5d40 LDRB r0,[r0,r5]
;;;167 }
00021c bc30 POP {r4,r5}
00021e 4770 BX lr
ENDP
UART_send_mbytes PROC
;;;196 u16 UART_send_mbytes( u8 UARTn, u8 *send_msg, u16 len )
;;;197 {
000220 b5fe PUSH {r1-r7,lr}
000222 0006 MOVS r6,r0
000224 000f MOVS r7,r1
000226 0014 MOVS r4,r2
;;;198 UART_TypeDef *UART_x[3] =
000228 4953 LDR r1,|L1.888|
00022a 4668 MOV r0,sp
00022c c92c LDM r1!,{r2,r3,r5}
00022e c02c STM r0!,{r2,r3,r5}
;;;199 {
;;;200 UART0, UART1, UART2
;;;201 };
;;;202 /*
;;;203 u8 sc752_channel[2] =
;;;204 {
;;;205 SC752_UARTA, SC752_UARTB
;;;206 };
;;;207 */
;;;208 u16 msg_len;
;;;209 /*
;;;210 // ========================= <<<<<<<< For TCP Protocl Stack >>>>>>> ========================= //
;;;211 if ((UARTn == UART_GPRS) && tcpPS_IsTcpConnect()) {
;;;212 LED_COM_ON();
;;;213 tcpPS_Send_Data (send_msg, len);
;;;214 LED_COM_OFF();
;;;215 return 1;
;;;216 }
;;;217 */
;;;218 // ============================================ <<<<<<< Modified by likazhou on 07-04-24>>>>>>> //
;;;219
;;;220 // LED_COM_ON();
;;;221 if ( len == 0 )
000230 2c00 CMP r4,#0
000232 d105 BNE |L1.576|
;;;222 {
;;;223 msg_len = strlen( ( char* )send_msg );
000234 0038 MOVS r0,r7
000236 f7ff fffe BL strlen
00023a 0405 LSLS r5,r0,#16
00023c 0c2d LSRS r5,r5,#16
00023e e000 B |L1.578|
;;;224 }
;;;225 else
;;;226 {
;;;227 msg_len = len;
|L1.576|
000240 0025 MOVS r5,r4
;;;228 }
;;;229 msg_len %= MAX_UART_RXDBUF_SIZE;
|L1.578|
000242 0028 MOVS r0,r5
000244 17e9 ASRS r1,r5,#31
000246 0d09 LSRS r1,r1,#20
000248 1949 ADDS r1,r1,r5
00024a 1309 ASRS r1,r1,#12
00024c 0309 LSLS r1,r1,#12
00024e 1a69 SUBS r1,r5,r1
000250 040d LSLS r5,r1,#16
000252 0c2d LSRS r5,r5,#16
;;;230 if ( UARTn < 3 )
000254 2e03 CMP r6,#3
000256 da14 BGE |L1.642|
;;;231 {
;;;232 while ( msg_len )
000258 e009 B |L1.622|
;;;233 {
;;;234 UART_ByteSend( UART_x[UARTn], send_msg );
|L1.602|
00025a 00b1 LSLS r1,r6,#2
00025c 466a MOV r2,sp
00025e 5850 LDR r0,[r2,r1]
000260 0039 MOVS r1,r7
000262 f7ff fffe BL UART_ByteSend
;;;235 send_msg += 1;
000266 1c7f ADDS r7,r7,#1
;;;236 msg_len -= 1;
000268 1e68 SUBS r0,r5,#1
00026a 0405 LSLS r5,r0,#16
00026c 0c2d LSRS r5,r5,#16
|L1.622|
00026e 2d00 CMP r5,#0
000270 d1f3 BNE |L1.602|
;;;237 }
;;;238 while(!(UART_x[UARTn]->SR & UART_TxEmpty)); // 等待发送完成
000272 46c0 MOV r8,r8
|L1.628|
000274 00b0 LSLS r0,r6,#2
000276 4669 MOV r1,sp
000278 5808 LDR r0,[r1,r0]
00027a 8a80 LDRH r0,[r0,#0x14]
00027c 2102 MOVS r1,#2
00027e 4208 TST r0,r1
000280 d0f8 BEQ |L1.628|
;;;239 }
;;;240 /*
;;;241 else
;;;242 {
;;;243 WriteSC752Str( sc752_channel[UARTn - 3], send_msg, msg_len );
;;;244 }
;;;245 */
;;;246 // LED_COM_OFF();
;;;247 return 1;
|L1.642|
000282 2001 MOVS r0,#1
;;;248 }
000284 bcfe POP {r1-r7}
000286 bc08 POP {r3}
000288 4718 BX r3
ENDP
ISR_RXD_read PROC
;;;299 void ISR_RXD_read(u8 channel)
;;;300 {
00028a b41e PUSH {r1-r4}
;;;301 UART_TypeDef *UART_x[3] =
00028c 493a LDR r1,|L1.888|
00028e 310c ADDS r1,r1,#0xc
000290 466c MOV r4,sp
000292 c90e LDM r1,{r1-r3}
000294 c40e STM r4!,{r1-r3}
;;;302 {
;;;303 UART0, UART1, UART2
;;;304 };
;;;305 while ( ( UART_x[channel]->SR & ( UART_RxHalfFull | UART_RxBufFull | UART_TimeOutNotEmpty) ) )//UART_TimeOutIdle
000296 e053 B |L1.832|
;;;306 {
;;;307 UART_RXD_buf[channel].msg[UART_RXD_buf[channel].in] = ( u8 )UART_x[channel]->RxBUFR;
|L1.664|
000298 0081 LSLS r1,r0,#2
00029a 466a MOV r2,sp
00029c 5851 LDR r1,[r2,r1]
00029e 8909 LDRH r1,[r1,#8]
0002a0 060a LSLS r2,r1,#24
0002a2 0e12 LSRS r2,r2,#24
0002a4 0281 LSLS r1,r0,#10
0002a6 1809 ADDS r1,r1,r0
0002a8 0089 LSLS r1,r1,#2
0002aa 4b32 LDR r3,|L1.884|
0002ac 18c9 ADDS r1,r1,r3
0002ae 1d09 ADDS r1,r1,#4
0002b0 0283 LSLS r3,r0,#10
0002b2 181b ADDS r3,r3,r0
0002b4 009b LSLS r3,r3,#2
0002b6 4c2f LDR r4,|L1.884|
0002b8 5ae3 LDRH r3,[r4,r3]
0002ba 54ca STRB r2,[r1,r3]
;;;308 UART_RXD_buf[channel].in += 1;
0002bc 0281 LSLS r1,r0,#10
0002be 1809 ADDS r1,r1,r0
0002c0 0089 LSLS r1,r1,#2
0002c2 0022 MOVS r2,r4
0002c4 5a51 LDRH r1,[r2,r1]
0002c6 1c49 ADDS r1,r1,#1
0002c8 0282 LSLS r2,r0,#10
0002ca 1812 ADDS r2,r2,r0
0002cc 0092 LSLS r2,r2,#2
0002ce 0023 MOVS r3,r4
0002d0 5299 STRH r1,[r3,r2]
;;;309 UART_RXD_buf[channel].in %= MAX_UART_RXDBUF_SIZE;
0002d2 0282 LSLS r2,r0,#10
0002d4 1812 ADDS r2,r2,r0
0002d6 0092 LSLS r2,r2,#2
0002d8 5a99 LDRH r1,[r3,r2]
0002da 17ca ASRS r2,r1,#31
0002dc 0d12 LSRS r2,r2,#20
0002de 1852 ADDS r2,r2,r1
0002e0 1312 ASRS r2,r2,#12
0002e2 0312 LSLS r2,r2,#12
0002e4 1a8a SUBS r2,r1,r2
0002e6 0283 LSLS r3,r0,#10
0002e8 181b ADDS r3,r3,r0
0002ea 009b LSLS r3,r3,#2
0002ec 52e2 STRH r2,[r4,r3]
;;;310 if ( UART_RXD_buf[channel].in == UART_RXD_buf[channel].out )
0002ee 0281 LSLS r1,r0,#10
0002f0 1809 ADDS r1,r1,r0
0002f2 0089 LSLS r1,r1,#2
0002f4 0022 MOVS r2,r4
0002f6 5a51 LDRH r1,[r2,r1]
0002f8 0282 LSLS r2,r0,#10
0002fa 1812 ADDS r2,r2,r0
0002fc 0092 LSLS r2,r2,#2
0002fe 0023 MOVS r3,r4
000300 18d2 ADDS r2,r2,r3
000302 8852 LDRH r2,[r2,#2]
000304 4291 CMP r1,r2
000306 d11b BNE |L1.832|
;;;311 {
;;;312 UART_RXD_buf[channel].out += 1;
000308 0281 LSLS r1,r0,#10
00030a 1809 ADDS r1,r1,r0
00030c 0089 LSLS r1,r1,#2
00030e 001a MOVS r2,r3
000310 1889 ADDS r1,r1,r2
000312 8849 LDRH r1,[r1,#2]
000314 1c49 ADDS r1,r1,#1
000316 0282 LSLS r2,r0,#10
000318 1812 ADDS r2,r2,r0
00031a 0092 LSLS r2,r2,#2
00031c 18d2 ADDS r2,r2,r3
00031e 8051 STRH r1,[r2,#2]
;;;313 UART_RXD_buf[channel].out %= MAX_UART_RXDBUF_SIZE;
000320 0282 LSLS r2,r0,#10
000322 1812 ADDS r2,r2,r0
000324 0092 LSLS r2,r2,#2
000326 18d2 ADDS r2,r2,r3
000328 8851 LDRH r1,[r2,#2]
00032a 17ca ASRS r2,r1,#31
00032c 0d12 LSRS r2,r2,#20
00032e 1852 ADDS r2,r2,r1
000330 1312 ASRS r2,r2,#12
000332 0312 LSLS r2,r2,#12
000334 1a8a SUBS r2,r1,r2
000336 0283 LSLS r3,r0,#10
000338 181b ADDS r3,r3,r0
00033a 009b LSLS r3,r3,#2
00033c 191b ADDS r3,r3,r4
00033e 805a STRH r2,[r3,#2]
|L1.832|
000340 0081 LSLS r1,r0,#2 ;305
000342 466a MOV r2,sp ;305
000344 5851 LDR r1,[r2,r1] ;305
000346 8a89 LDRH r1,[r1,#0x14] ;305
000348 22ff MOVS r2,#0xff ;305
00034a 3242 ADDS r2,r2,#0x42 ;305
00034c 4211 TST r1,r2 ;305
00034e d1a3 BNE |L1.664| ;305
;;;314 }
;;;315 }
;;;316
;;;317 }
000350 bc1e POP {r1-r4}
000352 4770 BX lr
|L1.852|
000354 00002000 DCB "\0\40\0\0"
|L1.856|
000358 18100800 DCB "\0\b\20\30"
|L1.860|
00035c 05040301 DCB "\1\3\4\5"
000360 00000007 DCB "\a\0\0\0"
|L1.868|
000364 e0003000 DCD 0xe0003000
|L1.872|
000368 c0004000 DCD 0xc0004000
|L1.876|
00036c c0005000 DCD 0xc0005000
|L1.880|
000370 c0006000 DCD 0xc0006000
|L1.884|
000374 00000000 DCD UART_RXD_buf
|L1.888|
000378 00000000 DCD ||.constdata.1||
ENDP
AREA ||.text.242||, CODE, READONLY, ALIGN=2
clear_rxdbuf PROC
;;;132 {
;;;133 UART_RXD_buf[UARTn].in = 0;
000000 2100 MOVS r1,#0
000002 0282 LSLS r2,r0,#10
000004 1812 ADDS r2,r2,r0
000006 0092 LSLS r2,r2,#2
000008 4b03 LDR r3,|L2.24|
00000a 5299 STRH r1,[r3,r2]
;;;134 UART_RXD_buf[UARTn].out = 0;
00000c 0282 LSLS r2,r0,#10
00000e 1812 ADDS r2,r2,r0
000010 0092 LSLS r2,r2,#2
000012 18d2 ADDS r2,r2,r3
000014 8051 STRH r1,[r2,#2]
;;;135 }
000016 4770 BX lr
|L2.24|
000018 00000000 DCD UART_RXD_buf
ENDP
AREA ||.text.251||, CODE, READONLY, ALIGN=1
UART_get_line PROC
;;;261 u16 UART_get_line( u8 UARTn, u8 *msg, u16 max_len, u16 timeout )
;;;262 {
000000 b5ff PUSH {r0-r7,lr}
000002 b083 SUB sp,sp,#0xc
000004 000c MOVS r4,r1
000006 0015 MOVS r5,r2
000008 001e MOVS r6,r3
;;;263 u16 i, tmo, len = 0;
00000a 2000 MOVS r0,#0
00000c 9001 STR r0,[sp,#4]
;;;264
;;;265 tmo = timeout * 1000 / 110;
00000e 207d MOVS r0,#0x7d
000010 00c0 LSLS r0,r0,#3
000012 4370 MULS r0,r6,r0
000014 216e MOVS r1,#0x6e
000016 f7ff fffe BL __aeabi_idivmod
00001a 0400 LSLS r0,r0,#16
00001c 0c00 LSRS r0,r0,#16
00001e 9002 STR r0,[sp,#8]
;;;266 *msg = 0x00;
000020 2000 MOVS r0,#0
000022 7020 STRB r0,[r4,#0]
;;;267 for ( i = 0; i < tmo; i += 1 )
000024 2700 MOVS r7,#0
000026 e037 B |L3.152|
;;;268 {
;;;269 while ( query_rxdbuf_received_byte( UARTn ) )
|L3.40|
000028 e025 B |L3.118|
;;;270 {
;;;271 *msg = read_byte_from_UARTbuf( UARTn, 0 );
|L3.42|
00002a 2100 MOVS r1,#0
00002c 9803 LDR r0,[sp,#0xc]
00002e f7ff fffe BL read_byte_from_UARTbuf
000032 7020 STRB r0,[r4,#0]
;;;272 Discard_nbyte_rxdbuf( UARTn, 1 );
000034 2101 MOVS r1,#1
000036 9803 LDR r0,[sp,#0xc]
000038 f7ff fffe BL Discard_nbyte_rxdbuf
;;;273 if ( *msg == 0x0d )
00003c 7820 LDRB r0,[r4,#0]
00003e 280d CMP r0,#0xd
000040 d106 BNE |L3.80|
;;;274 {
;;;275 *msg = 0x00;
000042 2000 MOVS r0,#0
000044 7020 STRB r0,[r4,#0]
;;;276 return ( len );
000046 9801 LDR r0,[sp,#4]
;;;277 }
;;;278 if ( isprint( *msg ) )
;;;279 {
;;;280 msg += 1;
;;;281 len += 1;
;;;282 }
;;;283 if(len >= max_len)
;;;284 return (len);
;;;285 }
;;;286 if ( len < max_len )
;;;287 {
;;;288 os_dly_wait( 10 );
;;;289 }
;;;290 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -