⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.txt

📁 uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的real view模板 uc/os在lpc210X系列的real view模板
💻 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 + -