; generated by ARM C/C++ Compiler, 4.1 [Build 894]
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o.\obj\nano1xx_uart.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\nano1xx_uart.d --cpu=Cortex-M0 --apcs=interwork -I..\inc -I..\drv -I..\bsp -I..\bsp\Cmsis -I..\bsp\Driver -I..\bsp\system -I..\lib -I..\lib\libtk -IC:\Keil\ARM\RV31\Inc -IC:\Keil\ARM\CMSIS\Include -D__MICROLIB -D__LCDDISPLAY_BTL001_H --omf_browse=.\obj\nano1xx_uart.crf ..\bsp\Driver\nano1xx_uart.c]
                          THUMB

                          AREA ||i.DrvUART_GetCTSInfo||, CODE, READONLY, ALIGN=1

                  DrvUART_GetCTSInfo PROC
;;;557     */
;;;558    void DrvUART_GetCTSInfo(UART_TypeDef  *tUART, uint8_t *pu8CTSValue, uint8_t	*pu8CTSChangeState)
000000  69c3              LDR      r3,[r0,#0x1c]
;;;559    {
;;;560    	*pu8CTSValue 		= (tUART->MCSR & UART_MCSR_CTS_ST)?1:0 ;
000002  039b              LSLS     r3,r3,#14
000004  0fdb              LSRS     r3,r3,#31
000006  700b              STRB     r3,[r1,#0]
;;;561    	*pu8CTSChangeState 	= (tUART->MCSR & UART_MCSR_DCT_F)?1:0;
000008  69c0              LDR      r0,[r0,#0x1c]
00000a  0340              LSLS     r0,r0,#13
00000c  0fc0              LSRS     r0,r0,#31
00000e  7010              STRB     r0,[r2,#0]
;;;562    }	
000010  4770              BX       lr
;;;563    
                          ENDP


                          AREA ||i.NVIC_DisableIRQ||, CODE, READONLY, ALIGN=2

                  NVIC_DisableIRQ PROC
;;;511     */
;;;512    __STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
000000  06c1              LSLS     r1,r0,#27
;;;513    {
;;;514      NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
000002  0ec9              LSRS     r1,r1,#27
000004  2001              MOVS     r0,#1
000006  4088              LSLS     r0,r0,r1
000008  4901              LDR      r1,|L2.16|
00000a  6008              STR      r0,[r1,#0]
;;;515    }
00000c  4770              BX       lr
;;;516    
                          ENDP

00000e  0000              DCW      0x0000
                  |L2.16|
                          DCD      0xe000e180

                          AREA ||i.UART_ClearIntFlag||, CODE, READONLY, ALIGN=1

                  UART_ClearIntFlag PROC
;;;422     */
;;;423    uint32_t UART_ClearIntFlag(UART_TypeDef  *tUART, uint32_t u32InterruptFlag)
000000  2211              MOVS     r2,#0x11
;;;424    {
;;;425    
;;;426    	if((u32InterruptFlag & DRVUART_RDAINT) ||
000002  4211              TST      r1,r2
000004  d101              BNE      |L3.10|
;;;427    	   (u32InterruptFlag & DRVUART_TOUTINT)||
;;;428    	   (u32InterruptFlag & DRVUART_THREINT))
000006  078a              LSLS     r2,r1,#30
000008  d501              BPL      |L3.14|
                  |L3.10|
;;;429    	{
;;;430    	   	return E_DRVUART_ARGUMENT;
00000a  2007              MOVS     r0,#7
;;;431    	}	   
;;;432    
;;;433    	if(u32InterruptFlag & DRVUART_RLSINT) /* clear Receive Line Status Interrupt */	   
;;;434    	{
;;;435    		tUART->FSR |= UART_FSR_BI_F | UART_FSR_FE_F | UART_FSR_PE_F;
;;;436    		tUART->TRSR |= UART_TRSR_RS485_ADDET_F;
;;;437    	}
;;;438    
;;;439    	if(u32InterruptFlag & DRVUART_MOSINT)  /* clear Modem Interrupt */	   
;;;440    		tUART->MCSR |= UART_MCSR_DCT_F;
;;;441    
;;;442        if(u32InterruptFlag & DRVUART_LININT)  /* clear LIN break Interrupt */	   
;;;443        {
;;;444    		tUART->TRSR |= UART_TRSR_LIN_TX_F | UART_TRSR_LIN_RX_F | UART_TRSR_BIT_ERR_F;
;;;445        }
;;;446    
;;;447    	if(u32InterruptFlag & DRVUART_WAKEUPINT)  /* clear wake up Interrupt */	   
;;;448    		tUART->ISR |= UART_ISR_WAKE_IS;
;;;449    
;;;450    	if(u32InterruptFlag & DRVUART_ABAUDINT)  /* clear auto-baud rate Interrupt */
;;;451    	{
;;;452    		tUART->TRSR |= UART_TRSR_ABAUD_TOUT_F | UART_TRSR_ABAUD_F;
;;;453    	}
;;;454    
;;;455    	if(u32InterruptFlag & DRVUART_BUFERRINT)  /* clear Buffer ErrorInterrupt */	   
;;;456    	{
;;;457    		tUART->FSR |= UART_FSR_RX_OVER_F | UART_FSR_TX_OVER_F;
;;;458    	}
;;;459    	return E_SUCCESS;
;;;460    }
00000c  4770              BX       lr
                  |L3.14|
00000e  074a              LSLS     r2,r1,#29             ;433
000010  d507              BPL      |L3.34|
000012  6982              LDR      r2,[r0,#0x18]         ;435
000014  2370              MOVS     r3,#0x70              ;435
000016  431a              ORRS     r2,r2,r3              ;435
000018  6182              STR      r2,[r0,#0x18]         ;435
00001a  6942              LDR      r2,[r0,#0x14]         ;436
00001c  2301              MOVS     r3,#1                 ;436
00001e  431a              ORRS     r2,r2,r3              ;436
000020  6142              STR      r2,[r0,#0x14]         ;436
                  |L3.34|
000022  070a              LSLS     r2,r1,#28             ;439
000024  d504              BPL      |L3.48|
000026  69c2              LDR      r2,[r0,#0x1c]         ;440
000028  2301              MOVS     r3,#1                 ;440
00002a  049b              LSLS     r3,r3,#18             ;440
00002c  431a              ORRS     r2,r2,r3              ;440
00002e  61c2              STR      r2,[r0,#0x1c]         ;440
                  |L3.48|
000030  05ca              LSLS     r2,r1,#23             ;442
000032  d503              BPL      |L3.60|
000034  6942              LDR      r2,[r0,#0x14]         ;444
000036  2338              MOVS     r3,#0x38              ;444
000038  431a              ORRS     r2,r2,r3              ;444
00003a  6142              STR      r2,[r0,#0x14]         ;444
                  |L3.60|
00003c  064a              LSLS     r2,r1,#25             ;447
00003e  d503              BPL      |L3.72|
000040  6902              LDR      r2,[r0,#0x10]         ;448
000042  2340              MOVS     r3,#0x40              ;448
000044  431a              ORRS     r2,r2,r3              ;448
000046  6102              STR      r2,[r0,#0x10]         ;448
                  |L3.72|
000048  060a              LSLS     r2,r1,#24             ;450
00004a  d503              BPL      |L3.84|
00004c  6942              LDR      r2,[r0,#0x14]         ;452
00004e  2306              MOVS     r3,#6                 ;452
000050  431a              ORRS     r2,r2,r3              ;452
000052  6142              STR      r2,[r0,#0x14]         ;452
                  |L3.84|
000054  0689              LSLS     r1,r1,#26             ;455
000056  d504              BPL      |L3.98|
000058  6981              LDR      r1,[r0,#0x18]         ;457
00005a  22ff              MOVS     r2,#0xff              ;457
00005c  3202              ADDS     r2,#2                 ;457
00005e  4311              ORRS     r1,r1,r2              ;457
000060  6181              STR      r1,[r0,#0x18]         ;457
                  |L3.98|
000062  2000              MOVS     r0,#0                 ;459
000064  4770              BX       lr
;;;461    
                          ENDP


                          AREA ||i.UART_DeInit||, CODE, READONLY, ALIGN=2

                  UART_DeInit PROC
;;;289     */
;;;290    void UART_DeInit(UART_TypeDef  *tUART)
000000  b510              PUSH     {r4,lr}
                  |L4.2|
;;;291    {
;;;292    	while(!(tUART->FSR & UART_FSR_TE_F));
000002  6981              LDR      r1,[r0,#0x18]
000004  0509              LSLS     r1,r1,#20
000006  d5fc              BPL      |L4.2|
;;;293    
;;;294    	if(tUART == UART1)
000008  4a08              LDR      r2,|L4.44|
;;;295    	{
;;;296    		CLK->APBCLK &= ~CLK_APBCLK_UART1_EN;
00000a  4909              LDR      r1,|L4.48|
00000c  4290              CMP      r0,r2                 ;294
;;;297            NVIC_DisableIRQ (UART1_IRQn); 
;;;298    	}
;;;299    	else
;;;300    	{
;;;301    		CLK->APBCLK &= ~CLK_APBCLK_UART0_EN;
00000e  6888              LDR      r0,[r1,#8]
000010  d104              BNE      |L4.28|
000012  020a              LSLS     r2,r1,#8              ;296
000014  4390              BICS     r0,r0,r2              ;296
000016  6088              STR      r0,[r1,#8]            ;296
000018  200d              MOVS     r0,#0xd               ;297
00001a  e004              B        |L4.38|
                  |L4.28|
00001c  2201              MOVS     r2,#1
00001e  0412              LSLS     r2,r2,#16
000020  4390              BICS     r0,r0,r2
000022  6088              STR      r0,[r1,#8]
;;;302            NVIC_DisableIRQ(UART0_IRQn); 
000024  200c              MOVS     r0,#0xc
                  |L4.38|
000026  f7fffffe          BL       NVIC_DisableIRQ
;;;303    	}
;;;304    
;;;305    }
00002a  bd10              POP      {r4,pc}
;;;306    
                          ENDP

                  |L4.44|
                          DCD      0x40150000
                  |L4.48|
                          DCD      0x50000200

                          AREA ||i.UART_DisableInt||, CODE, READONLY, ALIGN=2

                  UART_DisableInt PROC
;;;383     */
;;;384    void UART_DisableInt(UART_TypeDef  *tUART, uint32_t u32InterruptFlag)
000000  b510              PUSH     {r4,lr}
;;;385    {
;;;386    	tUART->IER &= ~u32InterruptFlag;
000002  68c2              LDR      r2,[r0,#0xc]
000004  438a              BICS     r2,r2,r1
000006  60c2              STR      r2,[r0,#0xc]
;;;387    
;;;388    	if (tUART == UART0)
000008  4904              LDR      r1,|L5.28|
00000a  4288              CMP      r0,r1
00000c  d101              BNE      |L5.18|
;;;389    	{
;;;390            NVIC_DisableIRQ(UART0_IRQn);   
00000e  200c              MOVS     r0,#0xc
000010  e000              B        |L5.20|
                  |L5.18|
;;;391    	}
;;;392    	else
;;;393    	{
;;;394           	NVIC_DisableIRQ(UART1_IRQn);    
000012  200d              MOVS     r0,#0xd
                  |L5.20|
000014  f7fffffe          BL       NVIC_DisableIRQ
;;;395    	}
;;;396    }
000018  bd10              POP      {r4,pc}
;;;397    
                          ENDP

00001a  0000              DCW      0x0000
                  |L5.28|
                          DCD      0x40050000

                          AREA ||i.UART_EnableInt||, CODE, READONLY, ALIGN=2

                  UART_EnableInt PROC
;;;339     */
;;;340    void UART_EnableInt(UART_TypeDef  *tUART, uint32_t  u32InterruptFlag)
000000  60c1              STR      r1,[r0,#0xc]
;;;341    {
;;;342    	tUART->IER = u32InterruptFlag;
;;;343    
;;;344    	if (tUART == UART0) 
000002  4a05              LDR      r2,|L6.24|
000004  4905              LDR      r1,|L6.28|
000006  4290              CMP      r0,r2
000008  d102              BNE      |L6.16|
00000a  2001              MOVS     r0,#1
00000c  0300              LSLS     r0,r0,#12
;;;345    	{
;;;346    		NVIC_EnableIRQ(UART0_IRQn); 
00000e  e001              B        |L6.20|
                  |L6.16|
000010  2001              MOVS     r0,#1
000012  0340              LSLS     r0,r0,#13
                  |L6.20|
000014  6008              STR      r0,[r1,#0]
;;;347    	}
;;;348    	else
;;;349    	{
;;;350    		NVIC_EnableIRQ(UART1_IRQn); 
;;;351    	}
;;;352    }
000016  4770              BX       lr
;;;353    
                          ENDP

                  |L6.24|
                          DCD      0x40050000
                  |L6.28|
                          DCD      0xe000e100

                          AREA ||i.UART_GetIntStatus||, CODE, READONLY, ALIGN=1

                  UART_GetIntStatus PROC
;;;498     */
;;;499    int32_t UART_GetIntStatus(UART_TypeDef  *tUART,uint32_t u32InterruptFlag)
000000  2910              CMP      r1,#0x10
;;;500    {
;;;501    	switch(u32InterruptFlag)
000002  d020              BEQ      |L7.70|
000004  dc08              BGT      |L7.24|
000006  2901              CMP      r1,#1
000008  d01a              BEQ      |L7.64|
00000a  2902              CMP      r1,#2
00000c  d015              BEQ      |L7.58|
00000e  2904              CMP      r1,#4
000010  d010              BEQ      |L7.52|
000012  2908              CMP      r1,#8
000014  d109              BNE      |L7.42|
000016  e00a              B        |L7.46|
                  |L7.24|
000018  2920              CMP      r1,#0x20
00001a  d01a              BEQ      |L7.82|
00001c  2940              CMP      r1,#0x40
00001e  d01e              BEQ      |L7.94|
000020  2980              CMP      r1,#0x80
000022  d019              BEQ      |L7.88|
000024  39ff              SUBS     r1,r1,#0xff
000026  3901              SUBS     r1,#1
000028  d010              BEQ      |L7.76|
                  |L7.42|
;;;502    	{
;;;503    		case DRVUART_MOSINT:				  		/* MODEM Status Interrupt */
;;;504    				return ((tUART->ISR & DRVUART_MOSINT)?1:0) ;
;;;505    		
;;;506    		case DRVUART_RLSINT:						/* Receive Line Status Interrupt */
;;;507    				return ((tUART->ISR & DRVUART_RLSINT)?1:0);
;;;508    
;;;509    		case DRVUART_THREINT:						/* Transmit Holding Register Empty Interrupt */
;;;510    				return ((tUART->ISR & DRVUART_THREINT)?1:0);
;;;511    
;;;512    		case DRVUART_RDAINT:						/* Receive Data Available Interrupt */
;;;513    				return ((tUART->ISR & DRVUART_RDAINT)?1:0);
;;;514    
;;;515    		case DRVUART_TOUTINT:						/* Time-out Interrupt */
;;;516    				return ((tUART->ISR & DRVUART_TOUTINT)?1:0);
;;;517    
;;;518    		case DRVUART_LININT:						/* LIN Break Interrupt */
;;;519    				return ((tUART->ISR & DRVUART_LININT)?1:0);
;;;520    
;;;521    		case DRVUART_BUFERRINT:						/* Buffer Error Interrupt */
;;;522    				return ((tUART->ISR & DRVUART_BUFERRINT)?1:0);
;;;523    
;;;524    		case DRVUART_ABAUDINT:						/* Auto-baud rate Interrupt */
;;;525    				return ((tUART->ISR & DRVUART_ABAUDINT)?1:0);
;;;526    
;;;527    		case DRVUART_WAKEUPINT:					/* Wake upInterrupt */
;;;528    				return ((tUART->ISR & DRVUART_WAKEUPINT)?1:0);
;;;529    		
;;;530    		default:
;;;531    			return E_DRVUART_ARGUMENT;
00002a  2007              MOVS     r0,#7
;;;532    	}
;;;533    	
;;;534    }
00002c  4770              BX       lr
                  |L7.46|
00002e  6900              LDR      r0,[r0,#0x10]         ;504
000030  0700              LSLS     r0,r0,#28             ;504
000032  e016              B        |L7.98|
                  |L7.52|
000034  6900              LDR      r0,[r0,#0x10]         ;507
000036  0740              LSLS     r0,r0,#29             ;507
000038  e013              B        |L7.98|
                  |L7.58|
00003a  6900              LDR      r0,[r0,#0x10]         ;510
00003c  0780              LSLS     r0,r0,#30             ;510
00003e  e010              B        |L7.98|
                  |L7.64|
000040  6900              LDR      r0,[r0,#0x10]         ;513
000042  07c0              LSLS     r0,r0,#31             ;513
000044  e00d              B        |L7.98|
                  |L7.70|
000046  6900              LDR      r0,[r0,#0x10]         ;516
000048  06c0              LSLS     r0,r0,#27             ;516
00004a  e00a              B        |L7.98|
                  |L7.76|
00004c  6900              LDR      r0,[r0,#0x10]         ;519
00004e  05c0              LSLS     r0,r0,#23             ;519
000050  e007              B        |L7.98|
                  |L7.82|
000052  6900              LDR      r0,[r0,#0x10]         ;522
000054  0680              LSLS     r0,r0,#26             ;522
000056  e004              B        |L7.98|
                  |L7.88|
000058  6900              LDR      r0,[r0,#0x10]         ;525
00005a  0600              LSLS     r0,r0,#24             ;525
00005c  e001              B        |L7.98|
                  |L7.94|
00005e  6900              LDR      r0,[r0,#0x10]         ;528
000060  0640              LSLS     r0,r0,#25             ;528
                  |L7.98|
000062  0fc0              LSRS     r0,r0,#31             ;528
000064  4770              BX       lr
;;;535    
                          ENDP


                          AREA ||i.UART_GetUartClk||, CODE, READONLY, ALIGN=2

                  UART_GetUartClk PROC
;;;58      */
;;;59     uint32_t UART_GetUartClk(void)
000000  b510              PUSH     {r4,lr}
;;;60     {
;;;61     	uint32_t clk =0 , div;
;;;62     
;;;63     	div = ( (CLK->CLKDIV0 & CLK_CLKDIV0_UART_MASK) >> 8) + 1;
000002  490e              LDR      r1,|L8.60|
000004  2000              MOVS     r0,#0                 ;61
000006  69ca              LDR      r2,[r1,#0x1c]
;;;64     
;;;65     	switch (CLK->CLKSEL1 & CLK_CLKSEL1_UART_MASK)
000008  6949              LDR      r1,[r1,#0x14]
00000a  0512              LSLS     r2,r2,#20             ;63
00000c  0f14              LSRS     r4,r2,#28             ;63
00000e  1c64              ADDS     r4,r4,#1              ;63
000010  078a              LSLS     r2,r1,#30
;;;66     	{
;;;67     		case 0:  
;;;68     			clk = __XTAL; /* HXT */
000012  490b              LDR      r1,|L8.64|
000014  0f92              LSRS     r2,r2,#30             ;65
000016  d005              BEQ      |L8.36|
000018  2a01              CMP      r2,#1                 ;65
00001a  d005              BEQ      |L8.40|
00001c  2a02              CMP      r2,#2                 ;65
00001e  d006              BEQ      |L8.46|
000020  2a03              CMP      r2,#3                 ;65
000022  d106              BNE      |L8.50|
                  |L8.36|
000024  4608              MOV      r0,r1
;;;69     			break;
000026  e004              B        |L8.50|
                  |L8.40|
;;;70     		case 1: 
;;;71     			clk = __RTC_XTAL;  /* LXT */
000028  2001              MOVS     r0,#1
00002a  03c0              LSLS     r0,r0,#15
;;;72     			break;
00002c  e001              B        |L8.50|
                  |L8.46|
;;;73     		case 2:  
;;;74     			clk = SYS_GetPLLClockFreq(); /* PLL */
00002e  f7fffffe          BL       SYS_GetPLLClockFreq
                  |L8.50|
;;;75     			break;
;;;76     		case 3: 
;;;77     			clk = __IRC12M; /* HIRC */
;;;78     			break;								
;;;79     	}
;;;80     
;;;81     	clk /= div;
000032  4621              MOV      r1,r4
000034  f7fffffe          BL       __aeabi_uidivmod
;;;82     	
;;;83     	return clk;
;;;84     }
000038  bd10              POP      {r4,pc}
;;;85     
                          ENDP

00003a  0000              DCW      0x0000
                  |L8.60|
                          DCD      0x50000200
                  |L8.64|
                          DCD      0x00b71b00

                          AREA ||i.UART_Init||, CODE, READONLY, ALIGN=2

                  UART_Init PROC
;;;174    */
;;;175    int32_t UART_Init(UART_TypeDef  *tUART, STR_UART_T *sParam)
000000  b570              PUSH     {r4-r6,lr}
;;;176    {
000002  460d              MOV      r5,r1
;;;177    	uint32_t clk, factor, divider;
;;;178    
;;;179        /*-----------------------------------------------------------------------------------------------------*/
;;;180        /* Check UART port                                                                                     */
;;;181        /*-----------------------------------------------------------------------------------------------------*/
;;;182        assert_param(CHECK_UART_PORT(tUART));
;;;183    
;;;184    
;;;185        /*-----------------------------------------------------------------------------------------------------*/
;;;186        /* Check the supplied parity                                                                           */
;;;187        /*-----------------------------------------------------------------------------------------------------*/
;;;188        assert_param(CHECK_UART_PARITY(sParam->u32cParity));
;;;189    
;;;190    	
;;;191        /*-----------------------------------------------------------------------------------------------------*/
;;;192        /* Check the supplied number of data bits                                                              */
;;;193        /*-----------------------------------------------------------------------------------------------------*/
;;;194        assert_param(CHECK_UART_DATABIT(sParam->u32cDataBits));
;;;195    
;;;196    	
;;;197        /*-----------------------------------------------------------------------------------------------------*/
;;;198        /* Check the supplied number of stop bits                                                              */
;;;199        /*-----------------------------------------------------------------------------------------------------*/
;;;200        assert_param(CHECK_UART_STOPBIT(sParam->u32cStopBits));
;;;201    
;;;202    
;;;203        /*-----------------------------------------------------------------------------------------------------*/
;;;204        /* Check the supplied nember of trigger level bytes                                                    */
;;;205        /*-----------------------------------------------------------------------------------------------------*/
;;;206        assert_param(CHECK_UART_RXTRIGGERLEVEL(sParam->u32cRxTriggerLevel));				
;;;207    	
;;;208    	if(tUART == UART0)
000004  492b              LDR      r1,|L9.180|
000006  4604              MOV      r4,r0                 ;176
;;;209    	{
;;;210    		/* Reset IP */
;;;211    		GCR->IPRST_CTL2 |= GCR_IPRSTCTL2_UART0;
000008  0308              LSLS     r0,r1,#12
;;;212    		GCR->IPRST_CTL2 &= ~GCR_IPRSTCTL2_UART0;
;;;213    		
;;;214    		/* Enable UART clock */
;;;215    		CLK->APBCLK |= CLK_APBCLK_UART0_EN;
00000a  4a2b              LDR      r2,|L9.184|
;;;216    	}
;;;217    	else
;;;218    	{
;;;219    		/* Reset IP */
;;;220    		GCR->IPRST_CTL2 |= GCR_IPRSTCTL2_UART1;
00000c  68c3              LDR      r3,[r0,#0xc]
00000e  428c              CMP      r4,r1                 ;208
000010  d101              BNE      |L9.22|
000012  01d1              LSLS     r1,r2,#7              ;211
000014  e001              B        |L9.26|
                  |L9.22|
000016  2101              MOVS     r1,#1
000018  0449              LSLS     r1,r1,#17
                  |L9.26|
00001a  430b              ORRS     r3,r3,r1
00001c  60c3              STR      r3,[r0,#0xc]
;;;221    		GCR->IPRST_CTL2 &= ~GCR_IPRSTCTL2_UART1;
00001e  68c3              LDR      r3,[r0,#0xc]
000020  438b              BICS     r3,r3,r1
000022  60c3              STR      r3,[r0,#0xc]
;;;222    		
;;;223    		/* Enable UART clock */
;;;224    		CLK->APBCLK |= CLK_APBCLK_UART1_EN;
000024  6890              LDR      r0,[r2,#8]
000026  4308              ORRS     r0,r0,r1
000028  6090              STR      r0,[r2,#8]
;;;225    	}
;;;226    	
;;;227    	/* Tx FIFO Reset & Rx FIFO Reset & FIFO Mode Enable */
;;;228    	tUART->CTL |= UART_CTL_RX_RST;
00002a  6860              LDR      r0,[r4,#4]
00002c  2101              MOVS     r1,#1
00002e  4308              ORRS     r0,r0,r1
000030  6060              STR      r0,[r4,#4]
;;;229      	tUART->CTL |= UART_CTL_TX_RST;
000032  6860              LDR      r0,[r4,#4]
000034  2102              MOVS     r1,#2
000036  4308              ORRS     r0,r0,r1
000038  6060              STR      r0,[r4,#4]
;;;230    
;;;231    	/* Set Rx Trigger Level, Parity & Data bits & Stop bits */
;;;232    	tUART->TLCTL = ((sParam->u32cRxTriggerLevel << 8) |
00003a  6929              LDR      r1,[r5,#0x10]
00003c  6868              LDR      r0,[r5,#4]
00003e  0209              LSLS     r1,r1,#8
000040  4308              ORRS     r0,r0,r1
000042  68e9              LDR      r1,[r5,#0xc]
000044  68aa              LDR      r2,[r5,#8]
000046  00c9              LSLS     r1,r1,#3
000048  0092              LSLS     r2,r2,#2
00004a  4311              ORRS     r1,r1,r2
00004c  4308              ORRS     r0,r0,r1
00004e  60a0              STR      r0,[r4,#8]
;;;233    					(sParam->u32cParity << 3) |
;;;234    					(sParam->u32cStopBits << 2) |
;;;235    					(sParam->u32cDataBits) );
;;;236    	
;;;237    	/* Set Time-Out */
;;;238    	tUART->TMCTL &= ~UART_TMCTL_TOIC;
000050  6a20              LDR      r0,[r4,#0x20]
000052  0a40              LSRS     r0,r0,#9
000054  0240              LSLS     r0,r0,#9
000056  6220              STR      r0,[r4,#0x20]
;;;239    	tUART->TMCTL |= sParam->u8TimeOut & UART_TMCTL_TOIC;
000058  6a20              LDR      r0,[r4,#0x20]
00005a  7d29              LDRB     r1,[r5,#0x14]
00005c  4308              ORRS     r0,r0,r1
00005e  6220              STR      r0,[r4,#0x20]
;;;240    
;;;241    	/* Set BaudRate */
;;;242    	clk = UART_GetUartClk();
000060  f7fffffe          BL       UART_GetUartClk
;;;243    
;;;244    	if (sParam->u8EnableDiv16 == 1)
000064  7d69              LDRB     r1,[r5,#0x15]
;;;245    	{
;;;246    		factor = 16 * sParam->u32BaudRate;
;;;247    		tUART->BAUD |= UART_BAUD_DIV_16_EN; 
000066  2601              MOVS     r6,#1
000068  07f6              LSLS     r6,r6,#31
00006a  2901              CMP      r1,#1                 ;244
00006c  d01c              BEQ      |L9.168|
;;;248    	}
;;;249    	else
;;;250    	{
;;;251    		factor = sParam->u32BaudRate;
00006e  682d              LDR      r5,[r5,#0]
;;;252    		tUART->BAUD &= ~UART_BAUD_DIV_16_EN;
000070  6a61              LDR      r1,[r4,#0x24]
000072  43b1              BICS     r1,r1,r6
                  |L9.116|
000074  6261              STR      r1,[r4,#0x24]
;;;253    	}
;;;254    	
;;;255    	divider = (clk / factor) - 1;
000076  4629              MOV      r1,r5
000078  f7fffffe          BL       __aeabi_uidivmod
00007c  1e40              SUBS     r0,r0,#1
;;;256    	if ((clk % factor) >= (factor / 2))
00007e  086a              LSRS     r2,r5,#1
000080  4291              CMP      r1,r2
000082  d300              BCC      |L9.134|
;;;257    		divider++;
000084  1c40              ADDS     r0,r0,#1
                  |L9.134|
;;;258    
;;;259    	if (divider > 0xFFF)
000086  490d              LDR      r1,|L9.188|
000088  4288              CMP      r0,r1
00008a  d903              BLS      |L9.148|
;;;260    	{
;;;261    		tUART->BAUD |= UART_BAUD_DIV_16_EN;
00008c  6a61              LDR      r1,[r4,#0x24]
00008e  4331              ORRS     r1,r1,r6
000090  6261              STR      r1,[r4,#0x24]
;;;262    		divider = divider / 16;
000092  0900              LSRS     r0,r0,#4
                  |L9.148|
;;;263    	}
;;;264    
;;;265    	tUART->BAUD &= ~(UART_BAUD_BRD);
000094  6a61              LDR      r1,[r4,#0x24]
000096  0c09              LSRS     r1,r1,#16
000098  0409              LSLS     r1,r1,#16
00009a  6261              STR      r1,[r4,#0x24]
;;;266    	tUART->BAUD |= divider & UART_BAUD_BRD;
00009c  6a61              LDR      r1,[r4,#0x24]
00009e  b280              UXTH     r0,r0
0000a0  4301              ORRS     r1,r1,r0
0000a2  6261              STR      r1,[r4,#0x24]
;;;267    
;;;268    	return E_SUCCESS;
0000a4  2000              MOVS     r0,#0
;;;269    }
0000a6  bd70              POP      {r4-r6,pc}
                  |L9.168|
0000a8  6829              LDR      r1,[r5,#0]            ;246
0000aa  010d              LSLS     r5,r1,#4              ;246
0000ac  6a61              LDR      r1,[r4,#0x24]         ;247
0000ae  4331              ORRS     r1,r1,r6              ;247
0000b0  e7e0              B        |L9.116|
;;;270    
                          ENDP

0000b2  0000              DCW      0x0000
                  |L9.180|
                          DCD      0x40050000
                  |L9.184|
                          DCD      0x50000200
                  |L9.188|
                          DCD      0x00000fff

                          AREA ||i.UART_Read||, CODE, READONLY, ALIGN=1

                  UART_Read PROC
;;;588      */
;;;589    int32_t UART_Read(UART_TypeDef  *tUART, uint8_t *pu8RxBuf, uint32_t u32ReadBytes)
000000  b570              PUSH     {r4-r6,lr}
;;;590    {
;;;591        uint32_t  u32Count, u32delayno;
;;;592    
;;;593        for (u32Count=0; u32Count < u32ReadBytes; u32Count++)
000002  2400              MOVS     r4,#0
;;;594        {
;;;595    	     u32delayno = 0;
;;;596    
;;;597    		 while (tUART->FSR & UART_FSR_RX_EMPTY_F) /* Check RX empty => failed */	
;;;598    	     {
;;;599    	     	 u32delayno++;        
;;;600    	        if ( u32delayno >= 0x40000000 )        
000004  2501              MOVS     r5,#1
000006  07ad              LSLS     r5,r5,#30
000008  e00c              B        |L10.36|
                  |L10.10|
00000a  2300              MOVS     r3,#0                 ;595
00000c  e004              B        |L10.24|
                  |L10.14|
00000e  1c5b              ADDS     r3,r3,#1              ;599
000010  42ab              CMP      r3,r5
000012  d301              BCC      |L10.24|
;;;601    	        	return E_DRVUART_ERR_TIMEOUT;               
000014  2001              MOVS     r0,#1
;;;602                }
;;;603                pu8RxBuf[u32Count] = tUART->RBR;					    /* Get Data from UART RX  */
;;;604        }
;;;605    
;;;606        return E_SUCCESS;
;;;607    	
;;;608    }
000016  bd70              POP      {r4-r6,pc}
                  |L10.24|
000018  6986              LDR      r6,[r0,#0x18]         ;597
00001a  07b6              LSLS     r6,r6,#30             ;597
00001c  d4f7              BMI      |L10.14|
00001e  6803              LDR      r3,[r0,#0]            ;603
000020  550b              STRB     r3,[r1,r4]            ;603
000022  1c64              ADDS     r4,r4,#1              ;593
                  |L10.36|
000024  4294              CMP      r4,r2                 ;593
000026  d3f0              BCC      |L10.10|
000028  2000              MOVS     r0,#0                 ;606
00002a  bd70              POP      {r4-r6,pc}
;;;609    
                          ENDP


                          AREA ||i.UART_SetFnIRDA||, CODE, READONLY, ALIGN=1

                  UART_SetFnIRDA PROC
;;;689     */
;;;690    void UART_SetFnIRDA(UART_TypeDef  *tUART, STR_IRCR_T *str_IRCR )
000000  2202              MOVS     r2,#2
;;;691    {
;;;692    	tUART->FUN_SEL = FUN_IRDA;	/* Enable IrDA function and configure */
000002  6382              STR      r2,[r0,#0x38]
;;;693    	tUART->IRCR	&= ~(UART_IRCR_TX_SELECT | UART_IRCR_INV_TX | UART_IRCR_INV_RX);
000004  6b02              LDR      r2,[r0,#0x30]
000006  2362              MOVS     r3,#0x62
000008  439a              BICS     r2,r2,r3
00000a  6302              STR      r2,[r0,#0x30]
;;;694    	tUART->IRCR	|= (str_IRCR->u8cTXSelect) ? UART_IRCR_TX_SELECT:0;
00000c  6b03              LDR      r3,[r0,#0x30]
00000e  780a              LDRB     r2,[r1,#0]
000010  2a00              CMP      r2,#0
000012  d000              BEQ      |L11.22|
000014  2202              MOVS     r2,#2
                  |L11.22|
000016  4313              ORRS     r3,r3,r2
000018  6303              STR      r3,[r0,#0x30]
;;;695    	tUART->IRCR	|= (str_IRCR->u8cInvTX) ? UART_IRCR_INV_TX:0;
00001a  6b03              LDR      r3,[r0,#0x30]
00001c  784a              LDRB     r2,[r1,#1]
00001e  2a00              CMP      r2,#0
000020  d000              BEQ      |L11.36|
000022  2220              MOVS     r2,#0x20
                  |L11.36|
000024  4313              ORRS     r3,r3,r2
000026  6303              STR      r3,[r0,#0x30]
;;;696    	tUART->IRCR	|= (str_IRCR->u8cInvRX) ? UART_IRCR_INV_RX:0 ;
000028  6b02              LDR      r2,[r0,#0x30]
00002a  7889              LDRB     r1,[r1,#2]
00002c  2900              CMP      r1,#0
00002e  d000              BEQ      |L11.50|
000030  2140              MOVS     r1,#0x40
                  |L11.50|
000032  430a              ORRS     r2,r2,r1
000034  6302              STR      r2,[r0,#0x30]
;;;697    }
000036  4770              BX       lr
;;;698    
                          ENDP


                          AREA ||i.UART_SetFnLIN||, CODE, READONLY, ALIGN=1

                  UART_SetFnLIN PROC
;;;718     */
;;;719    void UART_SetFnLIN(UART_TypeDef  *tUART, uint16_t u16Mode, uint16_t u16BreakLength)
000000  b510              PUSH     {r4,lr}
;;;720    {
;;;721    	tUART->FUN_SEL = FUN_LIN;
000002  2301              MOVS     r3,#1
000004  6383              STR      r3,[r0,#0x38]
;;;722    	tUART->ALT_CTL &= ~(UART_ALT_CTL_LIN_TX_BCNT | UART_ALT_CTL_LIN_RX_EN | UART_ALT_CTL_LIN_TX_EN);
000006  6b43              LDR      r3,[r0,#0x34]
000008  24c7              MOVS     r4,#0xc7
00000a  43a3              BICS     r3,r3,r4
00000c  6343              STR      r3,[r0,#0x34]
;;;723    	tUART->ALT_CTL |= u16BreakLength & UART_ALT_CTL_LIN_TX_BCNT;
00000e  6b43              LDR      r3,[r0,#0x34]
000010  0752              LSLS     r2,r2,#29
000012  0f52              LSRS     r2,r2,#29
000014  4313              ORRS     r3,r3,r2
000016  6343              STR      r3,[r0,#0x34]
;;;724    	tUART->ALT_CTL |= (u16Mode & MODE_TX) ? UART_ALT_CTL_LIN_TX_EN:0;
000018  6b43              LDR      r3,[r0,#0x34]
00001a  07ca              LSLS     r2,r1,#31
00001c  d000              BEQ      |L12.32|
00001e  2280              MOVS     r2,#0x80
                  |L12.32|
000020  4313              ORRS     r3,r3,r2
000022  6343              STR      r3,[r0,#0x34]
;;;725    	tUART->ALT_CTL |= (u16Mode & MODE_RX) ? UART_ALT_CTL_LIN_RX_EN:0;
000024  6b42              LDR      r2,[r0,#0x34]
000026  0789              LSLS     r1,r1,#30
000028  0fc9              LSRS     r1,r1,#31
00002a  0189              LSLS     r1,r1,#6
00002c  430a              ORRS     r2,r2,r1
00002e  6342              STR      r2,[r0,#0x34]
;;;726    
;;;727    }
000030  bd10              POP      {r4,pc}
;;;728    
                          ENDP


                          AREA ||i.UART_SetFnRS485||, CODE, READONLY, ALIGN=1

                  UART_SetFnRS485 PROC
;;;763     */
;;;764    void UART_SetFnRS485(UART_TypeDef  *tUART, STR_RS485_T *str_RS485)
000000  b510              PUSH     {r4,lr}
;;;765    {
;;;766    	tUART->FUN_SEL = FUN_RS485;
000002  2203              MOVS     r2,#3
000004  6382              STR      r2,[r0,#0x38]
;;;767    
;;;768    	tUART->ALT_CTL |= ((str_RS485->u8cAddrValue << 24) |
000006  6b42              LDR      r2,[r0,#0x34]
000008  788b              LDRB     r3,[r1,#2]
00000a  780c              LDRB     r4,[r1,#0]
00000c  061b              LSLS     r3,r3,#24
00000e  431a              ORRS     r2,r2,r3
000010  784b              LDRB     r3,[r1,#1]
000012  04db              LSLS     r3,r3,#19
000014  0424              LSLS     r4,r4,#16
000016  4323              ORRS     r3,r3,r4
000018  431a              ORRS     r2,r2,r3
00001a  6342              STR      r2,[r0,#0x34]
;;;769    					   (str_RS485->u8cAddrEnable << 19) |
;;;770    					   (str_RS485->u8cModeSelect  << 16));
;;;771    					     
;;;772    	tUART->TMCTL &= ~UART_TMCTL_DLY;
00001c  6a02              LDR      r2,[r0,#0x20]
00001e  23ff              MOVS     r3,#0xff
000020  041b              LSLS     r3,r3,#16
000022  439a              BICS     r2,r2,r3
000024  6202              STR      r2,[r0,#0x20]
;;;773    	tUART->TMCTL |= (str_RS485->u8cDelayTime << 16) & UART_TMCTL_DLY;
000026  6a02              LDR      r2,[r0,#0x20]
000028  78cb              LDRB     r3,[r1,#3]
00002a  041b              LSLS     r3,r3,#16
00002c  431a              ORRS     r2,r2,r3
00002e  6202              STR      r2,[r0,#0x20]
;;;774    	tUART->CTL &= ~UART_CTL_RX_DIS;
000030  6842              LDR      r2,[r0,#4]
000032  2304              MOVS     r3,#4
000034  439a              BICS     r2,r2,r3
000036  6042              STR      r2,[r0,#4]
;;;775    	tUART->CTL |= (str_RS485->u8cRxDisable) ? UART_CTL_RX_DIS:0;
000038  6842              LDR      r2,[r0,#4]
00003a  7909              LDRB     r1,[r1,#4]
00003c  2900              CMP      r1,#0
00003e  d000              BEQ      |L13.66|
000040  2104              MOVS     r1,#4
                  |L13.66|
000042  430a              ORRS     r2,r2,r1
000044  6042              STR      r2,[r0,#4]
;;;776    } 
000046  bd10              POP      {r4,pc}
;;;777    
                          ENDP


                          AREA ||i.UART_SetRTS||, CODE, READONLY, ALIGN=1

                  UART_SetRTS PROC
;;;111     */
;;;112    void UART_SetRTS(UART_TypeDef  *tUART, uint8_t u8Value, uint16_t u16TriggerLevel)
000000  69c3              LDR      r3,[r0,#0x1c]
;;;113    {
;;;114    	assert_param(CHECK_UART_RXTRIGGERLEVEL(u16TriggerLevel));
;;;115    
;;;116    	tUART->MCSR &= ~UART_MCSR_LEV_RTS;
000002  085b              LSRS     r3,r3,#1
000004  005b              LSLS     r3,r3,#1
000006  61c3              STR      r3,[r0,#0x1c]
;;;117    	tUART->MCSR |= u8Value & UART_MCSR_LEV_RTS;
000008  69c3              LDR      r3,[r0,#0x1c]
00000a  07c9              LSLS     r1,r1,#31
00000c  0fc9              LSRS     r1,r1,#31
00000e  430b              ORRS     r3,r3,r1
000010  61c3              STR      r3,[r0,#0x1c]
;;;118    	tUART->TLCTL &= ~UART_TLCTL_RTS_TRI_LEV;
000012  6881              LDR      r1,[r0,#8]
000014  2303              MOVS     r3,#3
000016  031b              LSLS     r3,r3,#12
000018  4399              BICS     r1,r1,r3
00001a  6081              STR      r1,[r0,#8]
;;;119    	tUART->TLCTL |= (u16TriggerLevel << 12) & UART_TLCTL_RTS_TRI_LEV;
00001c  6881              LDR      r1,[r0,#8]
00001e  0792              LSLS     r2,r2,#30
000020  0c92              LSRS     r2,r2,#18
000022  4311              ORRS     r1,r1,r2
000024  6081              STR      r1,[r0,#8]
;;;120    }	
000026  4770              BX       lr
;;;121    
                          ENDP


                          AREA ||i.UART_Write||, CODE, READONLY, ALIGN=1

                  UART_Write PROC
;;;633     */
;;;634    int32_t UART_Write(UART_TypeDef  *tUART, uint8_t *pu8TxBuf, uint32_t u32WriteBytes)
000000  b570              PUSH     {r4-r6,lr}
;;;635    {
;;;636        uint32_t  u32Count, u32delayno;
;;;637    
;;;638        for (u32Count=0; u32Count<u32WriteBytes; u32Count++)
000002  2400              MOVS     r4,#0
;;;639        {
;;;640            u32delayno = 0;
;;;641    
;;;642    		while (!(tUART->FSR & UART_FSR_TX_EMPTY_F))  /* Wait Tx empty and Time-out manner */
;;;643            {
;;;644           	    u32delayno++;
;;;645           	    if ( u32delayno >= 0x40000000 )     	    
000004  2501              MOVS     r5,#1
000006  07ad              LSLS     r5,r5,#30
000008  e00c              B        |L15.36|
                  |L15.10|
00000a  2300              MOVS     r3,#0                 ;640
00000c  e004              B        |L15.24|
                  |L15.14|
00000e  1c5b              ADDS     r3,r3,#1              ;644
000010  42ab              CMP      r3,r5
000012  d301              BCC      |L15.24|
;;;646           	       return E_DRVUART_ERR_TIMEOUT;     	       
000014  2001              MOVS     r0,#1
;;;647    				   
;;;648            }
;;;649    	   	tUART->THR = pu8TxBuf[u32Count]; /* Send UART Data from buffer */
;;;650        }
;;;651    
;;;652        return E_SUCCESS;
;;;653    	
;;;654      
;;;655    }
000016  bd70              POP      {r4-r6,pc}
                  |L15.24|
000018  6986              LDR      r6,[r0,#0x18]         ;642
00001a  05b6              LSLS     r6,r6,#22             ;642
00001c  d5f7              BPL      |L15.14|
00001e  5d0b              LDRB     r3,[r1,r4]            ;649
000020  6003              STR      r3,[r0,#0]            ;649
000022  1c64              ADDS     r4,r4,#1              ;638
                  |L15.36|
000024  4294              CMP      r4,r2                 ;638
000026  d3f0              BCC      |L15.10|
000028  2000              MOVS     r0,#0                 ;652
00002a  bd70              POP      {r4-r6,pc}
;;;656    
                          ENDP


;*** Start embedded assembler ***

#line 1 "..\\bsp\\Driver\\nano1xx_uart.c"
	AREA ||.rev16_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___14_nano1xx_uart_c_fde0f343____REV16|
#line 115 "C:\\Keil\\ARM\\CMSIS\\Include\\core_cmInstr.h"
|__asm___14_nano1xx_uart_c_fde0f343____REV16| PROC
#line 116

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___14_nano1xx_uart_c_fde0f343____REVSH|
#line 130
|__asm___14_nano1xx_uart_c_fde0f343____REVSH| PROC
#line 131

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
