📄 uart.txt
字号:
;;;329 {
;;;330 /* Character Time-out indicator */
;;;331 UART3Status |= 0x100; /* Bit 9 as the CTI error */
;;;332 }
;;;333 else if ( IIRValue == IIR_THRE ) /* THRE, transmit holding register empty */
;;;334 {
;;;335 /* THRE interrupt */
;;;336 LSRValue = U3LSR; /* Check status in the LSR to see if
;;;337 valid data in U0THR or not */
;;;338 if ( LSRValue & LSR_THRE )
;;;339 {
;;;340 UART3TxEmpty = 1;
;;;341 }
;;;342 else
;;;343 {
;;;344 UART3TxEmpty = 0;
;;;345 }
;;;346 }
;;;347
;;;348 // IDISABLE;
;;;349 VICVectAddr = 0; /* Acknowledge Interrupt */
;;;350
;;;351
;;;352 }
0004bc e8bd500f POP {r0-r3,r12,lr}
0004c0 e25ef004 SUBS pc,lr,#4
|L1.1220|
0004c4 e3110001 TST r1,#1 ;306
0004c8 0a00003d BEQ |L1.1476|
0004cc e59f3488 LDR r3,|L1.2396|
0004d0 e5933000 LDR r3,[r3,#0] ;310
0004d4 e59fc4c8 LDR r12,|L1.2468|
0004d8 e59fe4c8 LDR lr,|L1.2472|
0004dc e59ee000 LDR lr,[lr,#0] ;310 ; UART3Count
0004e0 e7cc300e STRB r3,[r12,lr] ;310
0004e4 e59f34bc LDR r3,|L1.2472|
0004e8 e5933000 LDR r3,[r3,#0] ;311 ; UART3Count
0004ec e2833001 ADD r3,r3,#1 ;311
0004f0 e59fc4b0 LDR r12,|L1.2472|
0004f4 e58c3000 STR r3,[r12,#0] ;311 ; UART3Count
0004f8 e28c3000 ADD r3,r12,#0 ;312
0004fc e5933000 LDR r3,[r3,#0] ;312 ; UART3Count
000500 e3530040 CMP r3,#0x40 ;312
000504 1a00002e BNE |L1.1476|
000508 e3a03000 MOV r3,#0 ;314
00050c e59fc494 LDR r12,|L1.2472|
000510 e58c3000 STR r3,[r12,#0] ;314 ; UART3Count
000514 ea00002a B |L1.1476|
|L1.1304|
000518 e3500002 CMP r0,#2 ;318
00051c 1a000012 BNE |L1.1388|
000520 e59f3474 LDR r3,|L1.2460|
000524 e5933000 LDR r3,[r3,#0] ;321
000528 e59fc474 LDR r12,|L1.2468|
00052c e59fe474 LDR lr,|L1.2472|
000530 e59ee000 LDR lr,[lr,#0] ;321 ; UART3Count
000534 e7cc300e STRB r3,[r12,lr] ;321
000538 e59f3468 LDR r3,|L1.2472|
00053c e5933000 LDR r3,[r3,#0] ;322 ; UART3Count
000540 e2833001 ADD r3,r3,#1 ;322
000544 e59fc45c LDR r12,|L1.2472|
000548 e58c3000 STR r3,[r12,#0] ;322 ; UART3Count
00054c e28c3000 ADD r3,r12,#0 ;323
000550 e5933000 LDR r3,[r3,#0] ;323 ; UART3Count
000554 e3530040 CMP r3,#0x40 ;323
000558 1a000019 BNE |L1.1476|
00055c e3a03000 MOV r3,#0 ;325
000560 e59fc440 LDR r12,|L1.2472|
000564 e58c3000 STR r3,[r12,#0] ;325 ; UART3Count
000568 ea000015 B |L1.1476|
|L1.1388|
00056c e3500006 CMP r0,#6 ;328
000570 1a000005 BNE |L1.1420|
000574 e59f3424 LDR r3,|L1.2464|
000578 e5933000 LDR r3,[r3,#0] ;331 ; UART3Status
00057c e3833c01 ORR r3,r3,#0x100 ;331
000580 e59fc418 LDR r12,|L1.2464|
000584 e58c3000 STR r3,[r12,#0] ;331 ; UART3Status
000588 ea00000d B |L1.1476|
|L1.1420|
00058c e3500001 CMP r0,#1 ;333
000590 1a00000b BNE |L1.1476|
000594 e59f3400 LDR r3,|L1.2460|
000598 e5933014 LDR r3,[r3,#0x14] ;336
00059c e20310ff AND r1,r3,#0xff ;336
0005a0 e3110020 TST r1,#0x20 ;338
0005a4 0a000003 BEQ |L1.1464|
0005a8 e3a03001 MOV r3,#1 ;340
0005ac e59fc3f8 LDR r12,|L1.2476|
0005b0 e5cc3000 STRB r3,[r12,#0] ;340 ; UART3TxEmpty
0005b4 ea000002 B |L1.1476|
|L1.1464|
0005b8 e3a03000 MOV r3,#0 ;344
0005bc e59fc3e8 LDR r12,|L1.2476|
0005c0 e5cc3000 STRB r3,[r12,#0] ;344 ; UART3TxEmpty
|L1.1476|
0005c4 e3a03000 MOV r3,#0 ;349
0005c8 e5033100 STR r3,[r3,#-0x100] ;349
0005cc eaffffba B |L1.1212|
;;;353
ENDP
UARTInit PROC
;;;371 DWORD UARTInit( DWORD PortNum, DWORD baudrate )
;;;372 {
0005d0 e92d4070 PUSH {r4-r6,lr}
0005d4 e1a04000 MOV r4,r0
0005d8 e1a06001 MOV r6,r1
;;;373 DWORD Fdiv;
;;;374
;;;375 if ( PortNum == 0 )
0005dc e3540000 CMP r4,#0
0005e0 1a000020 BNE |L1.1640|
;;;376 {
;;;377 PINSEL0 = 0x00000050; /* RxD0 and TxD0 */
0005e4 e3a00050 MOV r0,#0x50
0005e8 e59f13c0 LDR r1,|L1.2480|
0005ec e5810000 STR r0,[r1,#0]
;;;378
;;;379 U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
0005f0 e3a00083 MOV r0,#0x83
0005f4 e1c11500 BIC r1,r1,r0,LSL #10
0005f8 e581000c STR r0,[r1,#0xc]
;;;380 Fdiv = ( Fpclk / 16 ) / baudrate ; /*baud rate */
0005fc e1a01006 MOV r1,r6
000600 e59f03ac LDR r0,|L1.2484|
000604 ebfffffe BL __aeabi_uidivmod
000608 e1a05000 MOV r5,r0
;;;381 U0DLM = Fdiv / 256;
00060c e1a00425 LSR r0,r5,#8
000610 e59f1344 LDR r1,|L1.2396|
000614 e5810004 STR r0,[r1,#4]
;;;382 U0DLL = Fdiv % 256;
000618 e20500ff AND r0,r5,#0xff
00061c e5810000 STR r0,[r1,#0]
;;;383 U0LCR = 0x03; /* DLAB = 0 */
000620 e3a00003 MOV r0,#3
000624 e581000c STR r0,[r1,#0xc]
;;;384 U0FCR = 0x07; /* Enable and reset TX and RX FIFO. */
000628 e3a00007 MOV r0,#7
00062c e5810008 STR r0,[r1,#8]
;;;385
;;;386 if ( install_irq( UART0_INT, (void *)UART0Handler, HIGHEST_PRIORITY ) == FALSE )
000630 e3a02001 MOV r2,#1
000634 e59f137c LDR r1,|L1.2488|
000638 e3a00006 MOV r0,#6
00063c ebfffffe BL install_irq
000640 e3500000 CMP r0,#0
000644 1a000002 BNE |L1.1620|
;;;387 {
;;;388 return (FALSE);
000648 e3a00000 MOV r0,#0
|L1.1612|
00064c e8bd4070 POP {r4-r6,lr}
;;;389 }
;;;390
;;;391 U0IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART0 interrupt */
;;;392 return (TRUE);
;;;393 }
;;;394 else if ( PortNum == 1 )
;;;395 {
;;;396 #if EA_BOARD_LPC24XX
;;;397 PINSEL7 |= 0x0000000F; /* P3.16 TXD1, P3.17 RXD1 */
;;;398 #else /* Default is Keil MCB2300 board */
;;;399 PINSEL0 |= 0x40000000; /* Enable TxD1 P0.15 */
;;;400 PINSEL1 |= 0x00000001; /* Enable RxD1 P0.16 */
;;;401 #endif
;;;402 U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
;;;403 Fdiv = ( Fpclk / 16 ) / baudrate ; /*baud rate */
;;;404 U1DLM = Fdiv / 256;
;;;405 U1DLL = Fdiv % 256;
;;;406 U1LCR = 0x03; /* DLAB = 0 */
;;;407 U1FCR = 0x07; /* Enable and reset TX and RX FIFO. */
;;;408
;;;409 if ( install_irq( UART1_INT, (void *)UART1Handler, HIGHEST_PRIORITY ) == FALSE )
;;;410 {
;;;411 return (FALSE);
;;;412 }
;;;413
;;;414 U1IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART0 interrupt */
;;;415 return (TRUE);
;;;416 }
;;;417 else if(PortNum == 2)
;;;418 {
;;;419
;;;420
;;;421 PINSEL0 |= 0X00500000;
;;;422
;;;423
;;;424
;;;425 U2LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
;;;426 Fdiv = ( Fpclk / 16 ) / baudrate ; /*baud rate */
;;;427 U2DLM = Fdiv / 256;
;;;428 U2DLL = Fdiv % 256;
;;;429 U2LCR = 0x03; /* DLAB = 0 */
;;;430 U2FCR = 0x07; /* Enable and reset TX and RX FIFO. */
;;;431
;;;432 if ( install_irq( UART2_INT, (void *)UART2Handler, HIGHEST_PRIORITY ) == FALSE )
;;;433 {
;;;434 return (FALSE);
;;;435 }
;;;436
;;;437 U2IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART0 interrupt */
;;;438 return (TRUE);
;;;439
;;;440 }
;;;441 else if(PortNum==3)
;;;442 {
;;;443
;;;444 PINSEL0 |= 0X0000000A;
;;;445
;;;446
;;;447
;;;448 U3LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
;;;449 Fdiv = ( Fpclk / 16 ) / baudrate ; /*baud rate */
;;;450 U3DLM = Fdiv / 256;
;;;451 U3DLL = Fdiv % 256;
;;;452 U3LCR = 0x03; /* DLAB = 0 */
;;;453 U3FCR = 0x07; /* Enable and reset TX and RX FIFO. */
;;;454
;;;455 if ( install_irq( UART3_INT, (void *)UART3Handler, HIGHEST_PRIORITY ) == FALSE )
;;;456 {
;;;457 return (FALSE);
;;;458 }
;;;459
;;;460 U3IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART0 interrupt */
;;;461 return (TRUE);
;;;462
;;;463
;;;464 }
;;;465
;;;466
;;;467 return( FALSE );
;;;468 }
000650 e12fff1e BX lr
|L1.1620|
000654 e3a00007 MOV r0,#7 ;391
000658 e59f12fc LDR r1,|L1.2396|
00065c e5810004 STR r0,[r1,#4] ;391
000660 e3a00001 MOV r0,#1 ;392
000664 eafffff8 B |L1.1612|
|L1.1640|
000668 e3540001 CMP r4,#1 ;394
00066c 1a000024 BNE |L1.1796|
000670 e59f0338 LDR r0,|L1.2480|
000674 e5900000 LDR r0,[r0,#0] ;399
000678 e3800101 ORR r0,r0,#0x40000000 ;399
00067c e59f132c LDR r1,|L1.2480|
000680 e5810000 STR r0,[r1,#0] ;399
000684 e1a00001 MOV r0,r1 ;400
000688 e5900004 LDR r0,[r0,#4] ;400
00068c e3800001 ORR r0,r0,#1 ;400
000690 e5810004 STR r0,[r1,#4] ;400
000694 e3a00083 MOV r0,#0x83 ;402
000698 e2411907 SUB r1,r1,#0x1c000 ;402
00069c e581000c STR r0,[r1,#0xc] ;402
0006a0 e1a01006 MOV r1,r6 ;403
0006a4 e59f0308 LDR r0,|L1.2484|
0006a8 ebfffffe BL __aeabi_uidivmod
0006ac e1a05000 MOV r5,r0 ;403
0006b0 e1a00425 LSR r0,r5,#8 ;404
0006b4 e59f12b8 LDR r1,|L1.2420|
0006b8 e5810004 STR r0,[r1,#4] ;404
0006bc e20500ff AND r0,r5,#0xff ;405
0006c0 e5810000 STR r0,[r1,#0] ;405
0006c4 e3a00003 MOV r0,#3 ;406
0006c8 e581000c STR r0,[r1,#0xc] ;406
0006cc e3a00007 MOV r0,#7 ;407
0006d0 e5810008 STR r0,[r1,#8] ;407
0006d4 e3a02001 MOV r2,#1 ;409
0006d8 e59f12dc LDR r1,|L1.2492|
0006dc ebfffffe BL install_irq
0006e0 e3500000 CMP r0,#0 ;409
0006e4 1a000001 BNE |L1.1776|
0006e8 e3a00000 MOV r0,#0 ;411
0006ec eaffffd6 B |L1.1612|
|L1.1776|
0006f0 e3a00007 MOV r0,#7 ;414
0006f4 e59f1278 LDR r1,|L1.2420|
0006f8 e5810004 STR r0,[r1,#4] ;414
0006fc e3a00001 MOV r0,#1 ;415
000700 eaffffd1 B |L1.1612|
|L1.1796|
000704 e3540002 CMP r4,#2 ;417
000708 1a000021 BNE |L1.1940|
00070c e59f029c LDR r0,|L1.2480|
000710 e5900000 LDR r0,[r0,#0] ;421
000714 e3800605 ORR r0,r0,#0x500000 ;421
000718 e59f1290 LDR r1,|L1.2480|
00071c e5810000 STR r0,[r1,#0] ;421
000720 e3a00083 MOV r0,#0x83 ;425
000724 e2811913 ADD r1,r1,#0x4c000 ;425
000728 e581000c STR r0,[r1,#0xc] ;425
00072c e1a01006 MOV r1,r6 ;426
000730 e59f027c LDR r0,|L1.2484|
000734 ebfffffe BL __aeabi_uidivmod
000738 e1a05000 MOV r5,r0 ;426
00073c e1a00425 LSR r0,r5,#8 ;427
000740 e59f1240 LDR r1,|L1.2440|
000744 e5810004 STR r0,[r1,#4] ;427
000748 e20500ff AND r0,r5,#0xff ;428
00074c e5810000 STR r0,[r1,#0] ;428
000750 e3a00003 MOV r0,#3 ;429
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -