📄 uart.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\uart.o --depend=.\rvmdk\uart.d --device=DARMP --apcs=interwork -O1 -I. -I..\BSP -I..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\uCOS-II\Source -I..\..\..\..\uC-CPU -I..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\uC-LIB -I..\..\..\..\uC-TCPIP\IF -I..\..\..\..\uC-TCPIP\IF\Ether -I..\..\..\..\uC-TCPIP\NIC\ETHER\LPC2378 -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY\DP83848 -I..\..\..\..\uC-TCPIP\OS\uCOS-II -I..\..\..\..\uC-TCPIP\Source -I..\..\..\..\uC-LCD\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\TCPIP\Source -I..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -Ie:\Keil_ARM\ARM\INC\Philips -D__IN_CHIP --omf_browse=.\rvmdk\uart.crf DRIVER\UART.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
Uart_SendByte PROC
;;;22 {
;;;23 switch(uartnum)
000000 e3500000 CMP r0,#0
000004 0a000004 BEQ |L1.28|
000008 e3500001 CMP r0,#1
00000c 1a000007 BNE |L1.48|
;;;24 {
;;;25 case 0:
;;;26 U0THR=c;
;;;27 while((U0LSR & 0x40) == 0); // 等待数据发送完毕
;;;28 break;
;;;29 case 1:
;;;30 U1THR=c;
000010 e59f0164 LDR r0,|L1.380|
000014 e5c01000 STRB r1,[r0,#0]
;;;31 while((U1LSR & 0x40) == 0); // 等待数据发送完毕
000018 ea000005 B |L1.52|
|L1.28|
00001c e59f015c LDR r0,|L1.384|
000020 e5c01000 STRB r1,[r0,#0] ;26
|L1.36|
000024 e5d01014 LDRB r1,[r0,#0x14] ;27
000028 e3110040 TST r1,#0x40 ;27
00002c 0afffffc BEQ |L1.36|
|L1.48|
;;;32 break;
;;;33 default:
;;;34 break;
;;;35 }
;;;36 }
000030 e12fff1e BX lr
|L1.52|
000034 e5d01014 LDRB r1,[r0,#0x14] ;31
000038 e3110040 TST r1,#0x40 ;31
00003c 0afffffc BEQ |L1.52|
000040 eafffffa B |L1.48|
;;;37 void Uart_SendString(int uartnum,char * s)
ENDP
Uart_SendString PROC
;;;38 {
000044 e52de004 PUSH {lr}
000048 e1a03000 MOV r3,r0
00004c e1a02001 MOV r2,r1
000050 ea000002 B |L1.96|
|L1.84|
;;;39 while(*s!=0)
;;;40 {
;;;41 Uart_SendByte(uartnum,*s);
000054 e1a00003 MOV r0,r3
000058 ebfffffe BL Uart_SendByte
;;;42 s++;
00005c e2822001 ADD r2,r2,#1
|L1.96|
000060 e5d21000 LDRB r1,[r2,#0] ;39
000064 e3510000 CMP r1,#0 ;39
000068 1afffff9 BNE |L1.84|
;;;43 }
;;;44
;;;45 }
00006c e49de004 POP {lr}
000070 e12fff1e BX lr
;;;46 #define SENDBUFLEN 20
ENDP
Uart0_Exception PROC
;;;68 void Uart0_Exception(void)
;;;69 {
000074 e92d4070 PUSH {r4-r6,lr}
;;;70 uint8 IIRValue, LSRValue;
;;;71 uint8 Dummy;
;;;72 OS_ENTER_CRITICAL(); /* */
000078 ef000002 SVC #0x2
;;;73 IIRValue = U0IIR;
00007c e59f00fc LDR r0,|L1.384|
000080 e5d05008 LDRB r5,[r0,#8]
;;;74 Dummy = U0RBR; /* 读RBR寄存器清楚中断 */
000084 e5d01000 LDRB r1,[r0,#0]
;;;75 LSRValue = U0LSR;
000088 e5d04014 LDRB r4,[r0,#0x14]
;;;76 VICVectAddr = 0;
00008c e3a00000 MOV r0,#0
000090 e5000fd0 STR r0,[r0,#-0xfd0]
;;;77 OS_EXIT_CRITICAL();
000094 ef000003 SVC #0x3
;;;78
;;;79 Dummy = Dummy; /* 防止编译器警告 */
;;;80 IIRValue >>= 1;
000098 e1a000a5 LSR r0,r5,#1
;;;81 IIRValue &= 0x07; /* 中断标识位1~3 */
00009c e2000007 AND r0,r0,#7
;;;82 if ( IIRValue == IIR_RLS ) /* 接收线状态*/
0000a0 e3500003 CMP r0,#3
0000a4 1a00000b BNE |L1.216|
;;;83 {
;;;84
;;;85 if ( LSRValue & (LSR_OE|LSR_PE|LSR_FE|LSR_RXFE|LSR_BI) )
0000a8 e314009e TST r4,#0x9e
0000ac 0a000003 BEQ |L1.192|
;;;86 {
;;;87 Uart_SendString(0,"Help~~~");
0000b0 e8bd4070 POP {r4-r6,lr}
0000b4 e28f10c8 ADR r1,|L1.388|
0000b8 e3a00000 MOV r0,#0
0000bc eafffffe B Uart_SendString
|L1.192|
;;;88 return;
;;;89 }
;;;90 if ( LSRValue & LSR_RDR ) /* 接收数据准备好 */
0000c0 e3140001 TST r4,#1
0000c4 0a00000c BEQ |L1.252|
;;;91 {
;;;92 /* 如果在接收线上没有错误, 正常准备好, 则保存数据.读RBR将清楚中断 */
;;;93 Uart_SendString(0,"Thankyou for ~~~"); /* write the code yourself*/
0000c8 e8bd4070 POP {r4-r6,lr}
0000cc e28f10b8 ADR r1,|L1.396|
0000d0 e3a00000 MOV r0,#0
0000d4 eafffffe B Uart_SendString
|L1.216|
;;;94 return ;
;;;95 }
;;;96 }
;;;97 else if ( IIRValue == IIR_RDA ) /* 接收数据可用 */
0000d8 e3500002 CMP r0,#2
0000dc 1a000003 BNE |L1.240|
;;;98 {
;;;99 Uart_SendString(0,"UART0中断--");
0000e0 e8bd4070 POP {r4-r6,lr}
0000e4 e28f10b4 ADR r1,|L1.416|
0000e8 e3a00000 MOV r0,#0
0000ec eafffffe B Uart_SendString
|L1.240|
;;;100 return ;
;;;101 }
;;;102 else if ( IIRValue == IIR_CTI ) /* 字符超时显示 */
0000f0 e3500006 CMP r0,#6
0000f4 0a000000 BEQ |L1.252|
;;;103 {
;;;104 /**/
;;;105 }
;;;106 else if ( IIRValue == IIR_THRE ) /* THRE, 传送寄存器空 */
0000f8 e3500001 CMP r0,#1
|L1.252|
;;;107 {
;;;108 if ( LSRValue & LSR_THRE )
;;;109 {
;;;110 /**/
;;;111 }
;;;112 else
;;;113 {
;;;114 /* */
;;;115 }
;;;116 }
;;;117 }
0000fc e8bd4070 POP {r4-r6,lr}
000100 e12fff1e BX lr
;;;118
ENDP
UartInit PROC
;;;2 void UartInit(int uartnum,int baud)
;;;3 {
000104 e92d4010 PUSH {r4,lr}
;;;4 uint16 Fdiv;
;;;5 if(uartnum==0)
000108 e3500000 CMP r0,#0
00010c 1a000015 BNE |L1.360|
;;;6 {
;;;7 PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05; /* 选择管脚为UART0 */
000110 e59f0098 LDR r0,|L1.432|
000114 e5902000 LDR r2,[r0,#0]
000118 e3c2200f BIC r2,r2,#0xf
00011c e3822005 ORR r2,r2,#5
000120 e5802000 STR r2,[r0,#0]
;;;8
;;;9 U0LCR = 0x80; /* 允许访问分频因子寄存器 */
000124 e59f4054 LDR r4,|L1.384|
000128 e3a00080 MOV r0,#0x80
00012c e5c4000c STRB r0,[r4,#0xc]
;;;10 Fdiv = (Fpclk / 16) / baud; /* 设置波特率 */
000130 e59f007c LDR r0,|L1.436|
000134 ebfffffe BL __aeabi_idivmod
;;;11 U0DLM = Fdiv / 256;
000138 e1a01420 LSR r1,r0,#8
00013c e5c41004 STRB r1,[r4,#4]
;;;12 U0DLL = Fdiv % 256;
000140 e5c40000 STRB r0,[r4,#0]
;;;13 U0LCR = 0x03; /* 禁止访问分频因子寄存器 */
000144 e3a00003 MOV r0,#3
000148 e5c4000c STRB r0,[r4,#0xc]
;;;14 /* 且设置为8,1,n */
;;;15 U0FCR = 0x07; /* 使能并重启Rx、Tx缓冲寄存器 */ /* 初始化FIFO */
00014c e3a00007 MOV r0,#7
000150 e5c40008 STRB r0,[r4,#8]
;;;16
;;;17 U0IER = IER_RBR | IER_THRE | IER_RLS;
000154 e5c40004 STRB r0,[r4,#4]
;;;18 install_irq(VIC_UART0,(void *)Uart0_Exception);
000158 e8bd4010 POP {r4,lr}
00015c e24f10f0 ADR r1,Uart0_Exception
000160 e3a00006 MOV r0,#6
000164 eafffffe B install_irq
|L1.360|
;;;19 }
;;;20 }
000168 e8bd4010 POP {r4,lr}
00016c e12fff1e BX lr
;;;21 void Uart_SendByte(int uartnum,INT8U c)
ENDP
Uart_Printf PROC
;;;57 #else
;;;58 Uart_SendString(0,fmt);
000170 e1a01000 MOV r1,r0
000174 e3a00000 MOV r0,#0
000178 eafffffe B Uart_SendString
;;;59 #endif
;;;60 }
;;;61
ENDP
|L1.380|
00017c e0010000 DCD 0xe0010000
|L1.384|
000180 e000c000 DCD 0xe000c000
|L1.388|
000184 48656c70 DCB "Help"
000188 7e7e7e00 DCB "~~~\0"
|L1.396|
00018c 5468616e DCB "Than"
000190 6b796f75 DCB "kyou"
000194 20666f72 DCB " for"
000198 207e7e7e DCB " ~~~"
00019c 00000000 DCB "\0\0\0\0"
|L1.416|
0001a0 55415254 DCB "UART"
0001a4 30d6d0b6 DCB "0\326\320\266"
0001a8 cfa3ada3 DCB "\317\243\255\243"
0001ac ad000000 DCB "\255\0\0\0"
|L1.432|
0001b0 e002c000 DCD 0xe002c000
|L1.436|
0001b4 000a8c00 DCD 0x000a8c00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -