; generated by ARM C/C++ Compiler, 4.1 [Build 894]
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o.\obj\drvuart.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\drvuart.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\drvuart.crf ..\bsp\Driver\DrvUART.c]
                          THUMB

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

                  DrvUART_ClearIntFlag PROC
;;;363    /*---------------------------------------------------------------------------------------------------------*/
;;;364    uint32_t DrvUART_ClearIntFlag(E_UART_PORT u32Port, uint32_t u32InterruptFlag)
000000  b5f0              PUSH     {r4-r7,lr}
;;;365    {
;;;366    	UART_TypeDef *tUART;
;;;367    
;;;368    	if (u32Port == UART_PORT0)
000002  2800              CMP      r0,#0
000004  d004              BEQ      |L1.16|
;;;369    		tUART = UART0;
;;;370    	else
;;;371    		tUART = UART1;
000006  4826              LDR      r0,|L1.160|
                  |L1.8|
;;;372    
;;;373    	if((u32InterruptFlag & DRVUART_RDAINT) ||
000008  2211              MOVS     r2,#0x11
00000a  4211              TST      r1,r2
00000c  d104              BNE      |L1.24|
00000e  e001              B        |L1.20|
                  |L1.16|
000010  4824              LDR      r0,|L1.164|
000012  e7f9              B        |L1.8|
                  |L1.20|
;;;374    	   (u32InterruptFlag & DRVUART_TOUTINT)||
;;;375    	   (u32InterruptFlag & DRVUART_THREINT))
000014  078a              LSLS     r2,r1,#30
000016  d501              BPL      |L1.28|
                  |L1.24|
;;;376    	{
;;;377    	   	return E_DRVUART_ARGUMENT;
000018  4823              LDR      r0,|L1.168|
;;;378    	}	   
;;;379    
;;;380    	if(u32InterruptFlag & DRVUART_RLSINT) /* clear Receive Line Status Interrupt */	   
;;;381    	{
;;;382    		tUART->FSR_BITS.BI_F = 1;
;;;383    		tUART->FSR_BITS.FE_F = 1;
;;;384    		tUART->FSR_BITS.PE_F = 1;
;;;385    		tUART->TRSR_BITS.RS485_ADDET_F = 1;
;;;386    	}
;;;387    
;;;388    	if(u32InterruptFlag & DRVUART_MOSINT)  /* clear Modem Interrupt */	   
;;;389    		tUART->MCSR_BITS.DCT_F = 1;
;;;390    
;;;391        	if(u32InterruptFlag & DRVUART_LININT)  /* clear LIN break Interrupt */	   
;;;392        	{
;;;393    		tUART->TRSR_BITS.LIN_RX_F = 1;
;;;394    		tUART->TRSR_BITS.LIN_TX_F = 1;
;;;395    		tUART->TRSR_BITS.BUF_ERR_F = 1;
;;;396        	}
;;;397    
;;;398    	if(u32InterruptFlag & DRVUART_WAKEUPINT)  /* clear wake up Interrupt */	   
;;;399    		tUART->ISR_BITS.WAKE_IS = 1;
;;;400    
;;;401    	if(u32InterruptFlag & DRVUART_ABAUDINT)  /* clear auto-baud rate Interrupt */
;;;402    	{
;;;403    		tUART->TRSR_BITS.ABAUD_TOUT_F = 1;
;;;404    		tUART->TRSR_BITS.ABAUD_F = 1;
;;;405    	}
;;;406    
;;;407    	if(u32InterruptFlag & DRVUART_BUFERRINT)  /* clear Buffer ErrorInterrupt */	   
;;;408    	{
;;;409    		tUART->FSR_BITS.TX_OVER_F = 1;
;;;410    		tUART->FSR_BITS.RX_OVER_F = 1;
;;;411    	}
;;;412    	return E_SUCCESS;
;;;413    }
00001a  bdf0              POP      {r4-r7,pc}
                  |L1.28|
00001c  074b              LSLS     r3,r1,#29             ;380
00001e  2240              MOVS     r2,#0x40              ;382
000020  2420              MOVS     r4,#0x20              ;383
000022  2510              MOVS     r5,#0x10              ;384
000024  2601              MOVS     r6,#1                 ;385
000026  2b00              CMP      r3,#0                 ;380
000028  da0b              BGE      |L1.66|
00002a  6983              LDR      r3,[r0,#0x18]         ;382
00002c  4313              ORRS     r3,r3,r2              ;382
00002e  6183              STR      r3,[r0,#0x18]         ;382
000030  6983              LDR      r3,[r0,#0x18]         ;383
000032  4323              ORRS     r3,r3,r4              ;383
000034  6183              STR      r3,[r0,#0x18]         ;383
000036  6983              LDR      r3,[r0,#0x18]         ;384
000038  432b              ORRS     r3,r3,r5              ;384
00003a  6183              STR      r3,[r0,#0x18]         ;384
00003c  6943              LDR      r3,[r0,#0x14]         ;385
00003e  4333              ORRS     r3,r3,r6              ;385
000040  6143              STR      r3,[r0,#0x14]         ;385
                  |L1.66|
000042  070b              LSLS     r3,r1,#28             ;388
000044  d504              BPL      |L1.80|
000046  69c3              LDR      r3,[r0,#0x1c]         ;389
000048  2701              MOVS     r7,#1                 ;389
00004a  04bf              LSLS     r7,r7,#18             ;389
00004c  433b              ORRS     r3,r3,r7              ;389
00004e  61c3              STR      r3,[r0,#0x1c]         ;389
                  |L1.80|
000050  05cb              LSLS     r3,r1,#23             ;391
000052  d509              BPL      |L1.104|
000054  6943              LDR      r3,[r0,#0x14]         ;393
000056  432b              ORRS     r3,r3,r5              ;393
000058  6143              STR      r3,[r0,#0x14]         ;393
00005a  6943              LDR      r3,[r0,#0x14]         ;394
00005c  2508              MOVS     r5,#8                 ;394
00005e  432b              ORRS     r3,r3,r5              ;394
000060  6143              STR      r3,[r0,#0x14]         ;394
000062  6943              LDR      r3,[r0,#0x14]         ;395
000064  4323              ORRS     r3,r3,r4              ;395
000066  6143              STR      r3,[r0,#0x14]         ;395
                  |L1.104|
000068  064b              LSLS     r3,r1,#25             ;398
00006a  d502              BPL      |L1.114|
00006c  6903              LDR      r3,[r0,#0x10]         ;399
00006e  4313              ORRS     r3,r3,r2              ;399
000070  6103              STR      r3,[r0,#0x10]         ;399
                  |L1.114|
000072  060a              LSLS     r2,r1,#24             ;401
000074  d507              BPL      |L1.134|
000076  6942              LDR      r2,[r0,#0x14]         ;403
000078  2304              MOVS     r3,#4                 ;403
00007a  431a              ORRS     r2,r2,r3              ;403
00007c  6142              STR      r2,[r0,#0x14]         ;403
00007e  6942              LDR      r2,[r0,#0x14]         ;404
000080  2302              MOVS     r3,#2                 ;404
000082  431a              ORRS     r2,r2,r3              ;404
000084  6142              STR      r2,[r0,#0x14]         ;404
                  |L1.134|
000086  0689              LSLS     r1,r1,#26             ;407
000088  d507              BPL      |L1.154|
00008a  6981              LDR      r1,[r0,#0x18]         ;409
00008c  22ff              MOVS     r2,#0xff              ;409
00008e  3201              ADDS     r2,#1                 ;409
000090  4311              ORRS     r1,r1,r2              ;409
000092  6181              STR      r1,[r0,#0x18]         ;409
000094  6981              LDR      r1,[r0,#0x18]         ;410
000096  4331              ORRS     r1,r1,r6              ;410
000098  6181              STR      r1,[r0,#0x18]         ;410
                  |L1.154|
00009a  2000              MOVS     r0,#0                 ;412
00009c  bdf0              POP      {r4-r7,pc}
;;;414    
                          ENDP

00009e  0000              DCW      0x0000
                  |L1.160|
                          DCD      0x40150000
                  |L1.164|
                          DCD      0x40050000
                  |L1.168|
                          DCD      0xffff9807

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

                  DrvUART_Close PROC
;;;272    
;;;273    void DrvUART_Close(E_UART_PORT u32Port)
000000  b510              PUSH     {r4,lr}
;;;274    {
;;;275    	if(u32Port == UART_PORT1)	
000002  2101              MOVS     r1,#1
000004  0509              LSLS     r1,r1,#20
;;;276    	{
;;;277    		while(!UART1->FSR_BITS.TE_F);
;;;278    	    	CLK->APBCLK_BITS.UART1_EN = 0;
000006  4a0f              LDR      r2,|L2.68|
;;;279    		g_pfnUART1callback = NULL;
000008  2300              MOVS     r3,#0
00000a  4c0f              LDR      r4,|L2.72|
00000c  4288              CMP      r0,r1                 ;275
00000e  d10b              BNE      |L2.40|
000010  480e              LDR      r0,|L2.76|
                  |L2.18|
000012  6981              LDR      r1,[r0,#0x18]         ;277
000014  0509              LSLS     r1,r1,#20             ;277
000016  d5fc              BPL      |L2.18|
000018  6890              LDR      r0,[r2,#8]            ;278
00001a  2101              MOVS     r1,#1                 ;278
00001c  0449              LSLS     r1,r1,#17             ;278
00001e  4388              BICS     r0,r0,r1              ;278
000020  6090              STR      r0,[r2,#8]            ;278
;;;280            	NVIC_DisableIRQ (UART1_IRQn); 
000022  200d              MOVS     r0,#0xd
000024  6063              STR      r3,[r4,#4]  ; g_pfnUART1callback
000026  e00a              B        |L2.62|
                  |L2.40|
;;;281    	}
;;;282    	else
;;;283    	{
;;;284    		while(!UART0->FSR_BITS.TE_F);
000028  4809              LDR      r0,|L2.80|
                  |L2.42|
00002a  6981              LDR      r1,[r0,#0x18]
00002c  0509              LSLS     r1,r1,#20
00002e  d5fc              BPL      |L2.42|
;;;285    	    	CLK->APBCLK_BITS.UART0_EN = 0;
000030  6890              LDR      r0,[r2,#8]
000032  2101              MOVS     r1,#1
000034  0409              LSLS     r1,r1,#16
000036  4388              BICS     r0,r0,r1
000038  6090              STR      r0,[r2,#8]
;;;286    		g_pfnUART0callback = NULL;
;;;287            	NVIC_DisableIRQ(UART0_IRQn);      
00003a  200c              MOVS     r0,#0xc
00003c  6023              STR      r3,[r4,#0]  ; g_pfnUART0callback
                  |L2.62|
00003e  f7fffffe          BL       NVIC_DisableIRQ
;;;288    	}
;;;289    }
000042  bd10              POP      {r4,pc}
;;;290    
                          ENDP

                  |L2.68|
                          DCD      0x50000200
                  |L2.72|
                          DCD      ||.data||
                  |L2.76|
                          DCD      0x40150000
                  |L2.80|
                          DCD      0x40050000

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

                  DrvUART_DisableInt PROC
;;;334    /*---------------------------------------------------------------------------------------------------------*/
;;;335    void DrvUART_DisableInt(E_UART_PORT u32Port, uint32_t u32InterruptFlag)
000000  b510              PUSH     {r4,lr}
;;;336    {
000002  2200              MOVS     r2,#0
;;;337    	if (u32Port == UART_PORT0)
;;;338    	{
;;;339    		UART0->IER &= ~u32InterruptFlag;
;;;340    		g_pfnUART0callback = NULL;
000004  4b09              LDR      r3,|L3.44|
000006  2800              CMP      r0,#0                 ;337
000008  d008              BEQ      |L3.28|
;;;341            	NVIC_DisableIRQ(UART0_IRQn);   
;;;342    	}
;;;343    	else
;;;344    	{
;;;345    		UART1->IER &= ~u32InterruptFlag;
00000a  4809              LDR      r0,|L3.48|
00000c  68c4              LDR      r4,[r0,#0xc]
00000e  438c              BICS     r4,r4,r1
000010  60c4              STR      r4,[r0,#0xc]
;;;346    		g_pfnUART1callback = NULL;
;;;347           	NVIC_DisableIRQ(UART1_IRQn);    
000012  200d              MOVS     r0,#0xd
000014  605a              STR      r2,[r3,#4]  ; g_pfnUART1callback
                  |L3.22|
000016  f7fffffe          BL       NVIC_DisableIRQ
;;;348    	}
;;;349    }
00001a  bd10              POP      {r4,pc}
                  |L3.28|
00001c  4805              LDR      r0,|L3.52|
00001e  68c4              LDR      r4,[r0,#0xc]          ;339
000020  438c              BICS     r4,r4,r1              ;339
000022  60c4              STR      r4,[r0,#0xc]          ;339
000024  200c              MOVS     r0,#0xc               ;341
000026  601a              STR      r2,[r3,#0]            ;341  ; g_pfnUART0callback
000028  e7f5              B        |L3.22|
;;;350    
                          ENDP

00002a  0000              DCW      0x0000
                  |L3.44|
                          DCD      ||.data||
                  |L3.48|
                          DCD      0x40150000
                  |L3.52|
                          DCD      0x40050000

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

                  DrvUART_DisablePDMA PROC
;;;625    /*---------------------------------------------------------------------------------------------------------*/
;;;626    void DrvUART_DisablePDMA(E_UART_PORT u32Port)
000000  2180              MOVS     r1,#0x80
;;;627    {
;;;628    	if(u32Port == UART_PORT0)
;;;629    	{
;;;630    		UART0->CTL_BITS.DMA_TX_EN 	= 0;
;;;631    		UART0->CTL_BITS.DMA_RX_EN	= 0;	
000002  2340              MOVS     r3,#0x40
000004  2800              CMP      r0,#0                 ;628
000006  d00a              BEQ      |L4.30|
;;;632    	}
;;;633    	else if(u32Port == UART_PORT1)
000008  034a              LSLS     r2,r1,#13
00000a  4290              CMP      r0,r2
00000c  d106              BNE      |L4.28|
;;;634    	{
;;;635    		UART1->CTL_BITS.DMA_TX_EN 	= 0;
00000e  4805              LDR      r0,|L4.36|
                  |L4.16|
000010  6842              LDR      r2,[r0,#4]            ;630
000012  438a              BICS     r2,r2,r1              ;630
000014  6042              STR      r2,[r0,#4]            ;630
000016  6841              LDR      r1,[r0,#4]            ;631
000018  4399              BICS     r1,r1,r3              ;631
00001a  6041              STR      r1,[r0,#4]            ;631
                  |L4.28|
;;;636    		UART1->CTL_BITS.DMA_RX_EN	= 0;
;;;637    	}
;;;638    }
00001c  4770              BX       lr
                  |L4.30|
00001e  4802              LDR      r0,|L4.40|
000020  e7f6              B        |L4.16|
;;;639    
                          ENDP

000022  0000              DCW      0x0000
                  |L4.36|
                          DCD      0x40150000
                  |L4.40|
                          DCD      0x40050000

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

                  DrvUART_EnableInt PROC
;;;306    /*---------------------------------------------------------------------------------------------------------*/
;;;307    void DrvUART_EnableInt(E_UART_PORT u32Port, uint32_t  u32InterruptFlag, PFN_DRVUART_CALLBACK pfncallback)
000000  b510              PUSH     {r4,lr}
;;;308    {
;;;309    	if (u32Port == UART_PORT0)  {
;;;310    		UART0->IER = u32InterruptFlag;
;;;311    		g_pfnUART0callback = pfncallback;        /* Install Callback function */
000002  4b08              LDR      r3,|L5.36|
000004  4c08              LDR      r4,|L5.40|
000006  2800              CMP      r0,#0                 ;309
000008  d006              BEQ      |L5.24|
;;;312    		NVIC_EnableIRQ(UART0_IRQn); 
;;;313    	}
;;;314    	else  {
;;;315    		UART1->IER = u32InterruptFlag;
00000a  4808              LDR      r0,|L5.44|
00000c  60c1              STR      r1,[r0,#0xc]
00000e  2001              MOVS     r0,#1
000010  0340              LSLS     r0,r0,#13
000012  605a              STR      r2,[r3,#4]  ; g_pfnUART1callback
                  |L5.20|
000014  6020              STR      r0,[r4,#0]
;;;316    		g_pfnUART1callback = pfncallback;        /* Install Callback function */
;;;317    		NVIC_EnableIRQ(UART1_IRQn); 
;;;318    	}
;;;319    }
000016  bd10              POP      {r4,pc}
                  |L5.24|
000018  4805              LDR      r0,|L5.48|
00001a  60c1              STR      r1,[r0,#0xc]          ;310
00001c  2001              MOVS     r0,#1                 ;310
00001e  0300              LSLS     r0,r0,#12             ;310
000020  601a              STR      r2,[r3,#0]            ;312  ; g_pfnUART0callback
000022  e7f7              B        |L5.20|
;;;320    
                          ENDP

                  |L5.36|
                          DCD      ||.data||
                  |L5.40|
                          DCD      0xe000e100
                  |L5.44|
                          DCD      0x40150000
                  |L5.48|
                          DCD      0x40050000

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

                  DrvUART_EnablePDMA PROC
;;;599    /*---------------------------------------------------------------------------------------------------------*/
;;;600    void DrvUART_EnablePDMA(E_UART_PORT u32Port)
000000  2180              MOVS     r1,#0x80
;;;601    {
;;;602    	if(u32Port == UART_PORT0)
;;;603    	{
;;;604    		UART0->CTL_BITS.DMA_TX_EN 	= 1;
;;;605    		UART0->CTL_BITS.DMA_RX_EN	= 1;	
000002  2340              MOVS     r3,#0x40
000004  2800              CMP      r0,#0                 ;602
000006  d00a              BEQ      |L6.30|
;;;606    	}
;;;607    	else if(u32Port == UART_PORT1)
000008  034a              LSLS     r2,r1,#13
00000a  4290              CMP      r0,r2
00000c  d106              BNE      |L6.28|
;;;608    	{
;;;609    		UART1->CTL_BITS.DMA_TX_EN 	= 1;
00000e  4805              LDR      r0,|L6.36|
                  |L6.16|
000010  6842              LDR      r2,[r0,#4]            ;604
000012  430a              ORRS     r2,r2,r1              ;604
000014  6042              STR      r2,[r0,#4]            ;604
000016  6841              LDR      r1,[r0,#4]            ;605
000018  4319              ORRS     r1,r1,r3              ;605
00001a  6041              STR      r1,[r0,#4]            ;605
                  |L6.28|
;;;610    		UART1->CTL_BITS.DMA_RX_EN	= 1;
;;;611    	}
;;;612    }
00001c  4770              BX       lr
                  |L6.30|
00001e  4802              LDR      r0,|L6.40|
000020  e7f6              B        |L6.16|
;;;613    
                          ENDP

000022  0000              DCW      0x0000
                  |L6.36|
                          DCD      0x40150000
                  |L6.40|
                          DCD      0x40050000

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

                  DrvUART_GetCTSInfo PROC
;;;489    /*---------------------------------------------------------------------------------------------------------*/
;;;490    void DrvUART_GetCTSInfo(E_UART_PORT u32Port, uint8_t *pu8CTSValue, uint8_t	*pu8CTSChangeState)
000000  2800              CMP      r0,#0
;;;491    {
;;;492    	UART_TypeDef *tUART;
;;;493    
;;;494    	if (u32Port == UART_PORT0)
000002  d009              BEQ      |L7.24|
;;;495    		tUART = UART0;
;;;496    	else
;;;497    		tUART = UART1;
000004  4805              LDR      r0,|L7.28|
                  |L7.6|
;;;498    
;;;499     	*pu8CTSValue 		= tUART->MCSR_BITS.CTS_ST;
000006  69c3              LDR      r3,[r0,#0x1c]
000008  039b              LSLS     r3,r3,#14
00000a  0fdb              LSRS     r3,r3,#31
00000c  700b              STRB     r3,[r1,#0]
;;;500    	*pu8CTSChangeState 	= tUART->MCSR_BITS.DCT_F;
00000e  69c0              LDR      r0,[r0,#0x1c]
000010  0340              LSLS     r0,r0,#13
000012  0fc0              LSRS     r0,r0,#31
000014  7010              STRB     r0,[r2,#0]
;;;501    }	
000016  4770              BX       lr
                  |L7.24|
000018  4801              LDR      r0,|L7.32|
00001a  e7f4              B        |L7.6|
;;;502    
                          ENDP

                  |L7.28|
                          DCD      0x40150000
                  |L7.32|
                          DCD      0x40050000

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

                  DrvUART_GetIntStatus PROC
;;;430    /*---------------------------------------------------------------------------------------------------------*/
;;;431    int32_t DrvUART_GetIntStatus(E_UART_PORT u32Port,uint32_t u32InterruptFlag)
000000  2800              CMP      r0,#0
;;;432    {
;;;433    	UART_TypeDef *tUART;
;;;434    
;;;435    	if (u32Port == UART_PORT0)
000002  d00c              BEQ      |L8.30|
;;;436    		tUART = UART0;
;;;437    	else
;;;438    		tUART = UART1;
000004  481b              LDR      r0,|L8.116|
                  |L8.6|
;;;439    
;;;440    	switch(u32InterruptFlag)
000006  2910              CMP      r1,#0x10
000008  d023              BEQ      |L8.82|
00000a  dc0a              BGT      |L8.34|
00000c  2901              CMP      r1,#1
00000e  d01c              BEQ      |L8.74|
000010  2902              CMP      r1,#2
000012  d017              BEQ      |L8.68|
000014  2904              CMP      r1,#4
000016  d012              BEQ      |L8.62|
000018  2908              CMP      r1,#8
00001a  d10b              BNE      |L8.52|
00001c  e00c              B        |L8.56|
                  |L8.30|
00001e  4816              LDR      r0,|L8.120|
000020  e7f1              B        |L8.6|
                  |L8.34|
000022  2920              CMP      r1,#0x20
000024  d01b              BEQ      |L8.94|
000026  2940              CMP      r1,#0x40
000028  d01f              BEQ      |L8.106|
00002a  2980              CMP      r1,#0x80
00002c  d01a              BEQ      |L8.100|
00002e  39ff              SUBS     r1,r1,#0xff
000030  3901              SUBS     r1,#1
000032  d011              BEQ      |L8.88|
                  |L8.52|
;;;441    	{
;;;442    		case DRVUART_MOSINT:				  		/* MODEM Status Interrupt */
;;;443    				return tUART->ISR_BITS.MODEM_IS;
;;;444    		
;;;445    		case DRVUART_RLSINT:						/* Receive Line Status Interrupt */
;;;446    				return tUART->ISR_BITS.RLS_IS;
;;;447    
;;;448    		case DRVUART_THREINT:						/* Transmit Holding Register Empty Interrupt */
;;;449    				return tUART->ISR_BITS.THRE_IS;
;;;450    
;;;451    		case DRVUART_RDAINT:						/* Receive Data Available Interrupt */
;;;452    				return tUART->ISR_BITS.RDA_IS;
;;;453    
;;;454    		case DRVUART_TOUTINT:						/* Time-out Interrupt */
;;;455    				return tUART->ISR_BITS.RTO_IS;
;;;456    
;;;457    		case DRVUART_LININT:						/* LIN Break Interrupt */
;;;458    				return tUART->ISR_BITS.LIN_IS;
;;;459    
;;;460    		case DRVUART_BUFERRINT:						/* Buffer Error Interrupt */
;;;461    				return tUART->ISR_BITS.BUF_ERR_IS;
;;;462    
;;;463    		case DRVUART_ABAUDINT:						/* Auto-baud rate Interrupt */
;;;464    				return tUART->ISR_BITS.ABAUD_IS;
;;;465    
;;;466    		case DRVUART_WAKEUPINT:					/* Wake upInterrupt */
;;;467    				return tUART->ISR_BITS.WAKE_IS;
;;;468    		
;;;469    		default:
;;;470    			return E_DRVUART_ARGUMENT;
000034  4811              LDR      r0,|L8.124|
;;;471    	}
;;;472    	
;;;473    }
000036  4770              BX       lr
                  |L8.56|
000038  6900              LDR      r0,[r0,#0x10]         ;443
00003a  0700              LSLS     r0,r0,#28             ;443
00003c  e017              B        |L8.110|
                  |L8.62|
00003e  6900              LDR      r0,[r0,#0x10]         ;446
000040  0740              LSLS     r0,r0,#29             ;446
000042  e014              B        |L8.110|
                  |L8.68|
000044  6900              LDR      r0,[r0,#0x10]         ;449
000046  0780              LSLS     r0,r0,#30             ;449
000048  e011              B        |L8.110|
                  |L8.74|
00004a  6900              LDR      r0,[r0,#0x10]         ;452
00004c  07c0              LSLS     r0,r0,#31             ;452
00004e  0fc0              LSRS     r0,r0,#31             ;452
000050  4770              BX       lr
                  |L8.82|
000052  6900              LDR      r0,[r0,#0x10]         ;455
000054  06c0              LSLS     r0,r0,#27             ;455
000056  e00a              B        |L8.110|
                  |L8.88|
000058  6900              LDR      r0,[r0,#0x10]         ;458
00005a  05c0              LSLS     r0,r0,#23             ;458
00005c  e007              B        |L8.110|
                  |L8.94|
00005e  6900              LDR      r0,[r0,#0x10]         ;461
000060  0680              LSLS     r0,r0,#26             ;461
000062  e004              B        |L8.110|
                  |L8.100|
000064  6900              LDR      r0,[r0,#0x10]         ;464
000066  0600              LSLS     r0,r0,#24             ;464
000068  e001              B        |L8.110|
                  |L8.106|
00006a  6900              LDR      r0,[r0,#0x10]         ;467
00006c  0640              LSLS     r0,r0,#25             ;467
                  |L8.110|
00006e  0fc0              LSRS     r0,r0,#31             ;467
000070  4770              BX       lr
;;;474    
                          ENDP

000072  0000              DCW      0x0000
                  |L8.116|
                          DCD      0x40150000
                  |L8.120|
                          DCD      0x40050000
                  |L8.124|
                          DCD      0xffff9807

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

                  DrvUART_GetVersion PROC
;;;756    /*---------------------------------------------------------------------------------------------------------*/
;;;757    int32_t	DrvUART_GetVersion(void)
000000  4800              LDR      r0,|L9.4|
;;;758    {
;;;759    	return DRVUART_VERSION_NUM;
;;;760    	
;;;761    }
000002  4770              BX       lr
;;;762    
                          ENDP

                  |L9.4|
                          DCD      0x00010001

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

                  DrvUART_Open PROC
;;;161    /*---------------------------------------------------------------------------------------------------------*/
;;;162    int32_t DrvUART_Open(E_UART_PORT u32Port, STR_UART_T *sParam)
000000  b570              PUSH     {r4-r6,lr}
;;;163    {
000002  460d              MOV      r5,r1
;;;164    	uint32_t clk, factor, divider;
;;;165    	UART_TypeDef *tUART;
;;;166    
;;;167        /*-----------------------------------------------------------------------------------------------------*/
;;;168        /* Check UART port                                                                                     */
;;;169        /*-----------------------------------------------------------------------------------------------------*/
;;;170        assert_param(CHECK_UART_PORT(u32Port));
;;;171    
;;;172    
;;;173        /*-----------------------------------------------------------------------------------------------------*/
;;;174        /* Check the supplied parity                                                                           */
;;;175        /*-----------------------------------------------------------------------------------------------------*/
;;;176        assert_param(CHECK_UART_PARITY(sParam->u8cParity));
;;;177    
;;;178    	
;;;179        /*-----------------------------------------------------------------------------------------------------*/
;;;180        /* Check the supplied number of data bits                                                              */
;;;181        /*-----------------------------------------------------------------------------------------------------*/
;;;182        assert_param(CHECK_UART_DATABIT(sParam->u8cDataBits));
;;;183    
;;;184    	
;;;185        /*-----------------------------------------------------------------------------------------------------*/
;;;186        /* Check the supplied number of stop bits                                                              */
;;;187        /*-----------------------------------------------------------------------------------------------------*/
;;;188        assert_param(CHECK_UART_STOPBIT(sParam->u8cStopBits));
;;;189    
;;;190    
;;;191        /*-----------------------------------------------------------------------------------------------------*/
;;;192        /* Check the supplied nember of trigger level bytes                                                    */
;;;193        /*-----------------------------------------------------------------------------------------------------*/
;;;194        assert_param(CHECK_UART_RXTRIGGERLEVEL(sParam->u8cRxTriggerLevel));				
;;;195    	
;;;196    
;;;197    	if(u32Port == UART_PORT0)
;;;198    	{
;;;199    		/* Reset IP */
;;;200    		GCR->IPRST_CTL2_BITS.UART0_RST = 1;
000004  2105              MOVS     r1,#5
000006  0709              LSLS     r1,r1,#28
;;;201    		GCR->IPRST_CTL2_BITS.UART0_RST = 0;
;;;202    		
;;;203    		/* Enable UART clock */
;;;204    	      CLK->APBCLK_BITS.UART0_EN = 1;
000008  4a2c              LDR      r2,|L10.188|
;;;205    	     tUART = UART0;
;;;206    	}
;;;207    	else
;;;208    	{
;;;209    		/* Reset IP */
;;;210    		GCR->IPRST_CTL2_BITS.UART1_RST = 1;
00000a  68cb              LDR      r3,[r1,#0xc]
00000c  2800              CMP      r0,#0                 ;197
00000e  d044              BEQ      |L10.154|
000010  0210              LSLS     r0,r2,#8
000012  4303              ORRS     r3,r3,r0
000014  60cb              STR      r3,[r1,#0xc]
;;;211    		GCR->IPRST_CTL2_BITS.UART1_RST = 0;
000016  68cb              LDR      r3,[r1,#0xc]
000018  4383              BICS     r3,r3,r0
00001a  60cb              STR      r3,[r1,#0xc]
;;;212    		
;;;213    		/* Enable UART clock */
;;;214    	      CLK->APBCLK_BITS.UART1_EN = 1;
00001c  6891              LDR      r1,[r2,#8]
00001e  4301              ORRS     r1,r1,r0
000020  6091              STR      r1,[r2,#8]
;;;215    	      tUART = UART1;
000022  4c27              LDR      r4,|L10.192|
                  |L10.36|
;;;216    	}
;;;217    	
;;;218    	/* Tx FIFO Reset & Rx FIFO Reset & FIFO Mode Enable */
;;;219      	tUART->CTL_BITS.RX_RST = 1;
000024  6860              LDR      r0,[r4,#4]
000026  2101              MOVS     r1,#1
000028  4308              ORRS     r0,r0,r1
00002a  6060              STR      r0,[r4,#4]
;;;220      	tUART->CTL_BITS.TX_RST = 1;
00002c  6860              LDR      r0,[r4,#4]
00002e  2102              MOVS     r1,#2
000030  4308              ORRS     r0,r0,r1
000032  6060              STR      r0,[r4,#4]
;;;221    
;;;222    	/* Set Rx Trigger Level, Parity & Data bits & Stop bits */
;;;223    	tUART->TLCTL = ((sParam->u8cRxTriggerLevel << 8) |
000034  79e9              LDRB     r1,[r5,#7]
000036  7928              LDRB     r0,[r5,#4]
000038  0209              LSLS     r1,r1,#8
00003a  4308              ORRS     r0,r0,r1
00003c  79a9              LDRB     r1,[r5,#6]
00003e  796a              LDRB     r2,[r5,#5]
000040  00c9              LSLS     r1,r1,#3
000042  0092              LSLS     r2,r2,#2
000044  4311              ORRS     r1,r1,r2
000046  4308              ORRS     r0,r0,r1
000048  60a0              STR      r0,[r4,#8]
;;;224    					(sParam->u8cParity << 3) |
;;;225    					(sParam->u8cStopBits << 2) |
;;;226    					(sParam->u8cDataBits) );
;;;227    	
;;;228    	/* Set Time-Out */
;;;229    	tUART->TMCTL_BITS.TOIC	=sParam->u8TimeOut;
00004a  6a20              LDR      r0,[r4,#0x20]
00004c  7a29              LDRB     r1,[r5,#8]
00004e  0a40              LSRS     r0,r0,#9
000050  0240              LSLS     r0,r0,#9
000052  4308              ORRS     r0,r0,r1
000054  6220              STR      r0,[r4,#0x20]
;;;230    
;;;231    	/* Set BaudRate */
;;;232    	clk = _DrvUART_GetUartClk();
000056  f7fffffe          BL       _DrvUART_GetUartClk
;;;233    
;;;234    	if (sParam->u8EnableDiv16 == 1)
00005a  7a69              LDRB     r1,[r5,#9]
;;;235    	{
;;;236    		factor = 16 * sParam->u32BaudRate;
;;;237    		tUART->BAUD_BITS.DIV_16_EN = 1;   
00005c  2601              MOVS     r6,#1
00005e  07f6              LSLS     r6,r6,#31
000060  2901              CMP      r1,#1                 ;234
000062  d026              BEQ      |L10.178|
;;;238    	}
;;;239    	else
;;;240    	{
;;;241    	factor = sParam->u32BaudRate;
000064  682d              LDR      r5,[r5,#0]
;;;242    		tUART->BAUD_BITS.DIV_16_EN = 0; 
000066  6a61              LDR      r1,[r4,#0x24]
000068  43b1              BICS     r1,r1,r6
                  |L10.106|
00006a  6261              STR      r1,[r4,#0x24]
;;;243    	}
;;;244    	
;;;245    	divider = (clk / factor) - 1;
00006c  4629              MOV      r1,r5
00006e  f7fffffe          BL       __aeabi_uidivmod
000072  1e40              SUBS     r0,r0,#1
;;;246    	if ((clk % factor) >= (factor / 2))
000074  086a              LSRS     r2,r5,#1
000076  4291              CMP      r1,r2
000078  d300              BCC      |L10.124|
;;;247    		divider++;
00007a  1c40              ADDS     r0,r0,#1
                  |L10.124|
;;;248    
;;;249    	if (divider > 0xFFF)
00007c  4911              LDR      r1,|L10.196|
00007e  4288              CMP      r0,r1
000080  d903              BLS      |L10.138|
;;;250    	{
;;;251    		tUART->BAUD_BITS.DIV_16_EN = 1;
000082  6a61              LDR      r1,[r4,#0x24]
000084  4331              ORRS     r1,r1,r6
000086  6261              STR      r1,[r4,#0x24]
;;;252    		divider = divider / 16;
000088  0900              LSRS     r0,r0,#4
                  |L10.138|
;;;253    	}
;;;254    	tUART->BAUD_BITS.BRD = divider;
00008a  6a61              LDR      r1,[r4,#0x24]
00008c  b280              UXTH     r0,r0
00008e  0c09              LSRS     r1,r1,#16
000090  0409              LSLS     r1,r1,#16
000092  4301              ORRS     r1,r1,r0
000094  6261              STR      r1,[r4,#0x24]
;;;255    
;;;256    	return E_SUCCESS;
000096  2000              MOVS     r0,#0
;;;257    }
000098  bd70              POP      {r4-r6,pc}
                  |L10.154|
00009a  2001              MOVS     r0,#1                 ;200
00009c  0400              LSLS     r0,r0,#16             ;200
00009e  4303              ORRS     r3,r3,r0              ;200
0000a0  60cb              STR      r3,[r1,#0xc]          ;200
0000a2  68cb              LDR      r3,[r1,#0xc]          ;201
0000a4  4383              BICS     r3,r3,r0              ;201
0000a6  60cb              STR      r3,[r1,#0xc]          ;201
0000a8  6891              LDR      r1,[r2,#8]            ;204
0000aa  4301              ORRS     r1,r1,r0              ;204
0000ac  6091              STR      r1,[r2,#8]            ;204
0000ae  4c06              LDR      r4,|L10.200|
0000b0  e7b8              B        |L10.36|
                  |L10.178|
0000b2  6829              LDR      r1,[r5,#0]            ;236
0000b4  010d              LSLS     r5,r1,#4              ;236
0000b6  6a61              LDR      r1,[r4,#0x24]         ;237
0000b8  4331              ORRS     r1,r1,r6              ;237
0000ba  e7d6              B        |L10.106|
;;;258    
                          ENDP

                  |L10.188|
                          DCD      0x50000200
                  |L10.192|
                          DCD      0x40150000
                  |L10.196|
                          DCD      0x00000fff
                  |L10.200|
                          DCD      0x40050000

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

                  DrvUART_Read PROC
;;;515    /*---------------------------------------------------------------------------------------------------------*/
;;;516    int32_t DrvUART_Read(E_UART_PORT u32Port, uint8_t *pu8RxBuf, uint32_t u32ReadBytes)
000000  b570              PUSH     {r4-r6,lr}
;;;517    {
;;;518        uint32_t  u32Count, u32delayno;
;;;519        UART_TypeDef *tUART;
;;;520    
;;;521        if (u32Port == UART_PORT0)
000002  2800              CMP      r0,#0
000004  d004              BEQ      |L11.16|
;;;522    		tUART = UART0;
;;;523        else
;;;524    		tUART = UART1;
000006  4c0c              LDR      r4,|L11.56|
                  |L11.8|
;;;525    
;;;526        for (u32Count=0; u32Count < u32ReadBytes; u32Count++)
000008  2300              MOVS     r3,#0
;;;527        {
;;;528    	     u32delayno = 0;
;;;529    	     while (tUART->FSR_BITS.RX_EMPTY_F == 1) /* Check RX empty => failed */	   
;;;530    	     {
;;;531    	     	 u32delayno++;        
;;;532    	        if ( u32delayno >= 0x40000000 )        
00000a  2501              MOVS     r5,#1
00000c  07ad              LSLS     r5,r5,#30
00000e  e00e              B        |L11.46|
                  |L11.16|
000010  4c0a              LDR      r4,|L11.60|
000012  e7f9              B        |L11.8|
                  |L11.20|
000014  2000              MOVS     r0,#0                 ;528
000016  e004              B        |L11.34|
                  |L11.24|
000018  1c40              ADDS     r0,r0,#1              ;531
00001a  42a8              CMP      r0,r5
00001c  d301              BCC      |L11.34|
;;;533    	        	return E_DRVUART_ERR_TIMEOUT;               
00001e  4808              LDR      r0,|L11.64|
;;;534                }
;;;535                pu8RxBuf[u32Count] = tUART->RBR;					    /* Get Data from UART RX  */
;;;536        }
;;;537    
;;;538        return E_SUCCESS;
;;;539    	
;;;540    }
000020  bd70              POP      {r4-r6,pc}
                  |L11.34|
000022  69a6              LDR      r6,[r4,#0x18]         ;529
000024  07b6              LSLS     r6,r6,#30             ;529
000026  d4f7              BMI      |L11.24|
000028  6820              LDR      r0,[r4,#0]            ;535
00002a  54c8              STRB     r0,[r1,r3]            ;535
00002c  1c5b              ADDS     r3,r3,#1              ;526
                  |L11.46|
00002e  4293              CMP      r3,r2                 ;526
000030  d3f0              BCC      |L11.20|
000032  2000              MOVS     r0,#0                 ;538
000034  bd70              POP      {r4-r6,pc}
;;;541    
                          ENDP

000036  0000              DCW      0x0000
                  |L11.56|
                          DCD      0x40150000
                  |L11.60|
                          DCD      0x40050000
                  |L11.64|
                          DCD      0xffff9801

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

                  DrvUART_SetFnIRDA PROC
;;;659    /*---------------------------------------------------------------------------------------------------------*/
;;;660    void DrvUART_SetFnIRDA(E_UART_PORT u32Port, STR_IRCR_T *str_IRCR )
000000  2800              CMP      r0,#0
;;;661    {
;;;662    	UART_TypeDef *tUART;
;;;663    
;;;664    	if (u32Port == UART_PORT0)
000002  d00c              BEQ      |L12.30|
;;;665    		tUART = UART0;
;;;666    	else
;;;667    		tUART = UART1;
000004  4810              LDR      r0,|L12.72|
                  |L12.6|
;;;668    
;;;669    	tUART->FUN_SEL_BITS.FUN_SEL = FUN_IRCR;	/* Enable IrDA function and configure */
000006  6b82              LDR      r2,[r0,#0x38]
000008  0892              LSRS     r2,r2,#2
00000a  0092              LSLS     r2,r2,#2
00000c  1c92              ADDS     r2,r2,#2
00000e  6382              STR      r2,[r0,#0x38]
;;;670    	tUART->IRCR_BITS.TX_SELECT	= (str_IRCR->u8cTXSelect) ?1:0;
000010  780a              LDRB     r2,[r1,#0]
000012  2302              MOVS     r3,#2
000014  2a00              CMP      r2,#0
000016  6b02              LDR      r2,[r0,#0x30]
000018  d003              BEQ      |L12.34|
00001a  431a              ORRS     r2,r2,r3
00001c  e002              B        |L12.36|
                  |L12.30|
00001e  480b              LDR      r0,|L12.76|
000020  e7f1              B        |L12.6|
                  |L12.34|
000022  439a              BICS     r2,r2,r3
                  |L12.36|
000024  6302              STR      r2,[r0,#0x30]
;;;671    	tUART->IRCR_BITS.INV_TX		= str_IRCR->u8cInvTX ;
000026  6b02              LDR      r2,[r0,#0x30]
000028  2320              MOVS     r3,#0x20
00002a  439a              BICS     r2,r2,r3
00002c  784b              LDRB     r3,[r1,#1]
00002e  07db              LSLS     r3,r3,#31
000030  0e9b              LSRS     r3,r3,#26
000032  431a              ORRS     r2,r2,r3
000034  6302              STR      r2,[r0,#0x30]
;;;672    	tUART->IRCR_BITS.INV_RX		= str_IRCR->u8cInvRX ;
000036  6b02              LDR      r2,[r0,#0x30]
000038  7889              LDRB     r1,[r1,#2]
00003a  2340              MOVS     r3,#0x40
00003c  07c9              LSLS     r1,r1,#31
00003e  439a              BICS     r2,r2,r3
000040  0e49              LSRS     r1,r1,#25
000042  430a              ORRS     r2,r2,r1
000044  6302              STR      r2,[r0,#0x30]
;;;673    }
000046  4770              BX       lr
;;;674    
                          ENDP

                  |L12.72|
                          DCD      0x40150000
                  |L12.76|
                          DCD      0x40050000

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

                  DrvUART_SetFnLIN PROC
;;;688    /*---------------------------------------------------------------------------------------------------------*/
;;;689    void DrvUART_SetFnLIN(E_UART_PORT u32Port, uint16_t u16Mode, uint16_t u16BreakLength)
000000  2800              CMP      r0,#0
;;;690    {
;;;691    	UART_TypeDef *tUART;
;;;692    
;;;693    	if (u32Port == UART_PORT0)
000002  d01a              BEQ      |L13.58|
;;;694    		tUART = UART0;
;;;695    	else
;;;696    		tUART = UART1;
000004  480f              LDR      r0,|L13.68|
                  |L13.6|
;;;697    
;;;698    	tUART->FUN_SEL_BITS.FUN_SEL 	= FUN_LIN;
000006  6b83              LDR      r3,[r0,#0x38]
000008  089b              LSRS     r3,r3,#2
00000a  009b              LSLS     r3,r3,#2
00000c  1c5b              ADDS     r3,r3,#1
00000e  6383              STR      r3,[r0,#0x38]
;;;699    	tUART->ALT_CTL_BITS.LIN_TX_BCNT = u16BreakLength;
000010  6b43              LDR      r3,[r0,#0x34]
000012  0752              LSLS     r2,r2,#29
000014  08db              LSRS     r3,r3,#3
000016  00db              LSLS     r3,r3,#3
000018  0f52              LSRS     r2,r2,#29
00001a  4313              ORRS     r3,r3,r2
00001c  6343              STR      r3,[r0,#0x34]
;;;700    	tUART->ALT_CTL_BITS.LIN_TX_EN	= (u16Mode & MODE_TX) ?1:0;
00001e  6b42              LDR      r2,[r0,#0x34]
000020  2380              MOVS     r3,#0x80
000022  439a              BICS     r2,r2,r3
000024  07cb              LSLS     r3,r1,#31
000026  0e1b              LSRS     r3,r3,#24
000028  431a              ORRS     r2,r2,r3
00002a  6342              STR      r2,[r0,#0x34]
;;;701    	tUART->ALT_CTL_BITS.LIN_RX_EN	= (u16Mode & MODE_RX) ?1:0;
00002c  0789              LSLS     r1,r1,#30
00002e  2240              MOVS     r2,#0x40
000030  2900              CMP      r1,#0
000032  6b41              LDR      r1,[r0,#0x34]
000034  da03              BGE      |L13.62|
000036  4311              ORRS     r1,r1,r2
000038  e002              B        |L13.64|
                  |L13.58|
00003a  4803              LDR      r0,|L13.72|
00003c  e7e3              B        |L13.6|
                  |L13.62|
00003e  4391              BICS     r1,r1,r2
                  |L13.64|
000040  6341              STR      r1,[r0,#0x34]
;;;702    
;;;703    }
000042  4770              BX       lr
;;;704    
                          ENDP

                  |L13.68|
                          DCD      0x40150000
                  |L13.72|
                          DCD      0x40050000

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

                  DrvUART_SetFnRS485 PROC
;;;724    /*---------------------------------------------------------------------------------------------------------*/
;;;725    void DrvUART_SetFnRS485(E_UART_PORT u32Port, STR_RS485_T *str_RS485)
000000  b510              PUSH     {r4,lr}
;;;726    {
;;;727    	UART_TypeDef *tUART;
;;;728    
;;;729    	if (u32Port == UART_PORT0)
000002  2800              CMP      r0,#0
000004  d01e              BEQ      |L14.68|
;;;730    		tUART = UART0;
;;;731    	else
;;;732    		tUART = UART1;
000006  4812              LDR      r0,|L14.80|
                  |L14.8|
;;;733    
;;;734    	tUART->FUN_SEL_BITS.FUN_SEL 	= FUN_RS485;
000008  6b82              LDR      r2,[r0,#0x38]
00000a  2303              MOVS     r3,#3
00000c  431a              ORRS     r2,r2,r3
00000e  6382              STR      r2,[r0,#0x38]
;;;735    
;;;736    	tUART->ALT_CTL |= ((str_RS485-> u8cAddrValue << 24) |
000010  6b42              LDR      r2,[r0,#0x34]
000012  788b              LDRB     r3,[r1,#2]
000014  780c              LDRB     r4,[r1,#0]
000016  061b              LSLS     r3,r3,#24
000018  431a              ORRS     r2,r2,r3
00001a  784b              LDRB     r3,[r1,#1]
00001c  04db              LSLS     r3,r3,#19
00001e  0424              LSLS     r4,r4,#16
000020  4323              ORRS     r3,r3,r4
000022  431a              ORRS     r2,r2,r3
000024  6342              STR      r2,[r0,#0x34]
;;;737    					     (str_RS485-> u8cAddrEnable << 19) |
;;;738    					     (str_RS485-> u8cModeSelect  << 16));
;;;739    					     
;;;740    	tUART->TMCTL_BITS.DLY               = str_RS485-> u8cDelayTime;
000026  6a02              LDR      r2,[r0,#0x20]
000028  23ff              MOVS     r3,#0xff
00002a  041b              LSLS     r3,r3,#16
00002c  439a              BICS     r2,r2,r3
00002e  78cb              LDRB     r3,[r1,#3]
000030  041b              LSLS     r3,r3,#16
000032  431a              ORRS     r2,r2,r3
000034  6202              STR      r2,[r0,#0x20]
;;;741    	tUART->CTL_BITS.RX_DIS              = (str_RS485-> u8cRxDisable) ?1:0;
000036  7909              LDRB     r1,[r1,#4]
000038  2204              MOVS     r2,#4
00003a  2900              CMP      r1,#0
00003c  6841              LDR      r1,[r0,#4]
00003e  d003              BEQ      |L14.72|
000040  4311              ORRS     r1,r1,r2
000042  e002              B        |L14.74|
                  |L14.68|
000044  4803              LDR      r0,|L14.84|
000046  e7df              B        |L14.8|
                  |L14.72|
000048  4391              BICS     r1,r1,r2
                  |L14.74|
00004a  6041              STR      r1,[r0,#4]
;;;742    	
;;;743    
;;;744    } 
00004c  bd10              POP      {r4,pc}
;;;745    /*---------------------------------------------------------------------------------------------------------*/
                          ENDP

00004e  0000              DCW      0x0000
                  |L14.80|
                          DCD      0x40150000
                  |L14.84|
                          DCD      0x40050000

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

                  DrvUART_SetRTS PROC
;;;114    /*---------------------------------------------------------------------------------------------------------*/
;;;115    void DrvUART_SetRTS(E_UART_PORT u32Port,uint8_t u8Value,uint16_t u16TriggerLevel)
000000  07c9              LSLS     r1,r1,#31
;;;116    {
;;;117    	assert_param(CHECK_UART_RXTRIGGERLEVEL(u16TriggerLevel));
;;;118    	
;;;119    	if (u32Port == UART_PORT0)
;;;120    	{
;;;121    		UART0->MCSR_BITS.LEV_RTS = u8Value;
;;;122    		UART0->TLCTL_BITS.RTS_TRI_LEV = u16TriggerLevel;
000002  2303              MOVS     r3,#3
000004  0792              LSLS     r2,r2,#30
000006  b510              PUSH     {r4,lr}               ;116
000008  0fc9              LSRS     r1,r1,#31             ;121
00000a  031b              LSLS     r3,r3,#12
00000c  0c92              LSRS     r2,r2,#18
00000e  2800              CMP      r0,#0                 ;119
000010  d00a              BEQ      |L15.40|
;;;123    	}
;;;124    	else /* UART1 */
;;;125    	{
;;;126    		UART1->MCSR_BITS.LEV_RTS = u8Value;
000012  4806              LDR      r0,|L15.44|
                  |L15.20|
000014  69c4              LDR      r4,[r0,#0x1c]         ;121
000016  0864              LSRS     r4,r4,#1              ;121
000018  0064              LSLS     r4,r4,#1              ;121
00001a  430c              ORRS     r4,r4,r1              ;121
00001c  61c4              STR      r4,[r0,#0x1c]         ;121
00001e  6881              LDR      r1,[r0,#8]            ;122
000020  4399              BICS     r1,r1,r3              ;122
000022  4311              ORRS     r1,r1,r2              ;122
000024  6081              STR      r1,[r0,#8]            ;122
;;;127    		UART1->TLCTL_BITS.RTS_TRI_LEV = u16TriggerLevel;
;;;128    	}
;;;129    }	
000026  bd10              POP      {r4,pc}
                  |L15.40|
000028  4801              LDR      r0,|L15.48|
00002a  e7f3              B        |L15.20|
;;;130    
                          ENDP

                  |L15.44|
                          DCD      0x40150000
                  |L15.48|
                          DCD      0x40050000

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

                  DrvUART_Write PROC
;;;558    /*---------------------------------------------------------------------------------------------------------*/
;;;559    int32_t DrvUART_Write(E_UART_PORT	u32Port, uint8_t *pu8TxBuf, uint32_t u32WriteBytes)
000000  b570              PUSH     {r4-r6,lr}
;;;560    {
;;;561        uint32_t  u32Count, u32delayno;
;;;562        UART_TypeDef *tUART;
;;;563    
;;;564        if (u32Port == UART_PORT0)
000002  2800              CMP      r0,#0
000004  d004              BEQ      |L16.16|
;;;565    		tUART = UART0;
;;;566        else
;;;567    		tUART = UART1;
000006  4c0c              LDR      r4,|L16.56|
                  |L16.8|
;;;568    
;;;569        for (u32Count=0; u32Count<u32WriteBytes; u32Count++)
000008  2300              MOVS     r3,#0
;;;570        {
;;;571              u32delayno = 0;
;;;572    	   while (tUART->FSR_BITS.TX_EMPTY_F !=1)  /* Wait Tx empty and Time-out manner */
;;;573              {
;;;574           	    u32delayno++;
;;;575           	    if ( u32delayno >= 0x40000000 )     	    
00000a  2501              MOVS     r5,#1
00000c  07ad              LSLS     r5,r5,#30
00000e  e00e              B        |L16.46|
                  |L16.16|
000010  4c0a              LDR      r4,|L16.60|
000012  e7f9              B        |L16.8|
                  |L16.20|
000014  2000              MOVS     r0,#0                 ;571
000016  e004              B        |L16.34|
                  |L16.24|
000018  1c40              ADDS     r0,r0,#1              ;574
00001a  42a8              CMP      r0,r5
00001c  d301              BCC      |L16.34|
;;;576           	       return E_DRVUART_ERR_TIMEOUT;     	       
00001e  4808              LDR      r0,|L16.64|
;;;577    				   
;;;578              }
;;;579    	   tUART->THR = pu8TxBuf[u32Count]; /* Send UART Data from buffer */
;;;580        }
;;;581    
;;;582        return E_SUCCESS;
;;;583    	
;;;584      
;;;585    }
000020  bd70              POP      {r4-r6,pc}
                  |L16.34|
000022  69a6              LDR      r6,[r4,#0x18]         ;572
000024  05b6              LSLS     r6,r6,#22             ;572
000026  d5f7              BPL      |L16.24|
000028  5cc8              LDRB     r0,[r1,r3]            ;579
00002a  6020              STR      r0,[r4,#0]            ;579
00002c  1c5b              ADDS     r3,r3,#1              ;569
                  |L16.46|
00002e  4293              CMP      r3,r2                 ;569
000030  d3f0              BCC      |L16.20|
000032  2000              MOVS     r0,#0                 ;582
000034  bd70              POP      {r4-r6,pc}
;;;586    
                          ENDP

000036  0000              DCW      0x0000
                  |L16.56|
                          DCD      0x40150000
                  |L16.60|
                          DCD      0x40050000
                  |L16.64|
                          DCD      0xffff9801

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

                  NVIC_DisableIRQ PROC
;;;809     */
;;;810    static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
000000  06c1              LSLS     r1,r0,#27
;;;811    {
;;;812      NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */
000002  0ec9              LSRS     r1,r1,#27
000004  2001              MOVS     r0,#1
000006  4088              LSLS     r0,r0,r1
000008  4901              LDR      r1,|L17.16|
00000a  6008              STR      r0,[r1,#0]
;;;813    }
00000c  4770              BX       lr
;;;814    
                          ENDP

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

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

                  UART0_IRQHandler PROC
;;;32     /*---------------------------------------------------------------------------------------------------------*/
;;;33     void UART0_IRQHandler(void)
000000  4803              LDR      r0,|L18.16|
;;;34     {
;;;35         uint32_t u32uart0IntStatus;
;;;36     
;;;37         u32uart0IntStatus = UART0->ISR;
000002  6900              LDR      r0,[r0,#0x10]
;;;38     
;;;39         if(g_pfnUART0callback != NULL)
000004  4903              LDR      r1,|L18.20|
000006  6809              LDR      r1,[r1,#0]  ; g_pfnUART0callback
000008  2900              CMP      r1,#0
00000a  d000              BEQ      |L18.14|
;;;40     	{
;;;41             g_pfnUART0callback(u32uart0IntStatus);
00000c  4708              BX       r1
                  |L18.14|
;;;42         }
;;;43     }
00000e  4770              BX       lr
;;;44     
                          ENDP

                  |L18.16|
                          DCD      0x40050000
                  |L18.20|
                          DCD      ||.data||

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

                  UART1_IRQHandler PROC
;;;45     
;;;46     void UART1_IRQHandler(void)
000000  4803              LDR      r0,|L19.16|
;;;47     {
;;;48         uint32_t u32uart1IntStatus;
;;;49     
;;;50     	u32uart1IntStatus = UART1->ISR;
000002  6900              LDR      r0,[r0,#0x10]
;;;51     
;;;52         if(g_pfnUART1callback != NULL)
000004  4903              LDR      r1,|L19.20|
000006  6849              LDR      r1,[r1,#4]  ; g_pfnUART1callback
000008  2900              CMP      r1,#0
00000a  d000              BEQ      |L19.14|
;;;53         {
;;;54            g_pfnUART1callback(u32uart1IntStatus);
00000c  4708              BX       r1
                  |L19.14|
;;;55         }
;;;56     }
00000e  4770              BX       lr
;;;57     
                          ENDP

                  |L19.16|
                          DCD      0x40150000
                  |L19.20|
                          DCD      ||.data||

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

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

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

                          AREA ||.data||, DATA, ALIGN=2

                  g_pfnUART0callback
                          DCD      0x00000000
                  g_pfnUART1callback
                          DCD      0x00000000
