; generated by Component: ARM Compiler 5.06 update 4 (build 422) Tool: ArmCC [4d3604]
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o.\obj\lib_driver_uart_pan159.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\lib_driver_uart_pan159.d --cpu=Cortex-M0 --apcs=interwork -O3 --diag_suppress=9931 -I..\..\..\Library\CMSIS\Include -I..\..\..\Library\Device\Nuvoton\Mini58Series\Include -I..\..\..\Library\StdDriver\inc -I..\..\Template -I..\..\..\Library\StdDriver\driver -I.\RTE\_Template -ID:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.0.9\Device\Mini58\Include -ID:\Keil_v5\ARM\CMSIS\Include -D__MICROLIB -D__UVISION_VERSION=523 --omf_browse=.\obj\lib_driver_uart_pan159.crf ..\..\..\Library\StdDriver\driver\lib_driver_uart_pan159.c]
                          THUMB

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

                  UART0_IRQHandler PROC
;;;15     /*---------------------------------------------------------------------------------------------------------*/
;;;16     void UART0_IRQHandler(void)
000000  b530              PUSH     {r4,r5,lr}
;;;17     {
;;;18         uint32_t u32IntSts= UART0->INTSTS;
000002  480b              LDR      r0,|L1.48|
000004  69c1              LDR      r1,[r0,#0x1c]
;;;19         if(u32IntSts & UART_INTSTS_RDAINT_Msk) {
;;;20             /* Get all the input characters */
;;;21             while(UART_IS_RX_READY(UART0)) {
;;;22                 /* Get the character from UART Buffer */
;;;23                 if(wptr < RX_BUF_SIZE) {
000006  4a0b              LDR      r2,|L1.52|
000008  05c9              LSLS     r1,r1,#23             ;19
00000a  d510              BPL      |L1.46|
;;;24                     uartRcvBuffer[wptr++] = UART_READ(UART0);   
00000c  490a              LDR      r1,|L1.56|
;;;25                 }
;;;26                 else{
;;;27                     uartRcvBuffer[RX_BUF_SIZE-1] = UART_READ(UART0);
00000e  460c              MOV      r4,r1
000010  3420              ADDS     r4,r4,#0x20
                  |L1.18|
000012  69c3              LDR      r3,[r0,#0x1c]         ;21
000014  07db              LSLS     r3,r3,#31             ;21
000016  d00a              BEQ      |L1.46|
000018  7813              LDRB     r3,[r2,#0]            ;23  ; wptr
00001a  2b40              CMP      r3,#0x40              ;23
00001c  d204              BCS      |L1.40|
00001e  6805              LDR      r5,[r0,#0]            ;24
000020  54cd              STRB     r5,[r1,r3]            ;24
000022  1c5b              ADDS     r3,r3,#1              ;24
000024  7013              STRB     r3,[r2,#0]            ;24
000026  e7f4              B        |L1.18|
                  |L1.40|
000028  6803              LDR      r3,[r0,#0]
00002a  77e3              STRB     r3,[r4,#0x1f]
00002c  e7f1              B        |L1.18|
                  |L1.46|
;;;28                 }
;;;29             }
;;;30         }
;;;31     }
00002e  bd30              POP      {r4,r5,pc}
;;;32     
                          ENDP

                  |L1.48|
                          DCD      0x40050000
                  |L1.52|
                          DCD      ||.data||
                  |L1.56|
                          DCD      ||.bss||

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

                  uart_init_pan159 PROC
;;;33     
;;;34     void uart_init_pan159(void)
000000  b510              PUSH     {r4,lr}
;;;35     {
;;;36         CLK_EnableModuleClock(UART0_MODULE);
000002  480a              LDR      r0,|L2.44|
000004  f7fffffe          BL       CLK_EnableModuleClock
;;;37     //    SYS->P4_MFP = SYS_MFP_P46_UART1_RXD | SYS_MFP_P47_UART1_TXD;
;;;38         SYS->P5_MFP = SYS_MFP_P51_UART0_RXD | SYS_MFP_P50_UART0_TXD;
000008  490a              LDR      r1,|L2.52|
00000a  4809              LDR      r0,|L2.48|
00000c  6048              STR      r0,[r1,#4]
;;;39     //    UART_Open(UART1, 115200);
;;;40         UART_Open(UART0, 115200);
00000e  4c0a              LDR      r4,|L2.56|
000010  21e1              MOVS     r1,#0xe1
000012  0249              LSLS     r1,r1,#9
000014  4620              MOV      r0,r4
000016  f7fffffe          BL       UART_Open
;;;41         UART_ENABLE_INT(UART0, (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk));
00001a  6860              LDR      r0,[r4,#4]
00001c  2111              MOVS     r1,#0x11
00001e  4308              ORRS     r0,r0,r1
000020  6060              STR      r0,[r4,#4]
000022  2001              MOVS     r0,#1
000024  4905              LDR      r1,|L2.60|
000026  0300              LSLS     r0,r0,#12
000028  6008              STR      r0,[r1,#0]
;;;42         NVIC_EnableIRQ(UART0_IRQn);
;;;43     }
00002a  bd10              POP      {r4,pc}
;;;44     
                          ENDP

                  |L2.44|
                          DCD      0xa7803d10
                  |L2.48|
                          DCD      0x00000303
                  |L2.52|
                          DCD      0x50000040
                  |L2.56|
                          DCD      0x40050000
                  |L2.60|
                          DCD      0xe000e100

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

                  uart_send PROC
;;;44     
;;;45     void uart_send(uint8_t *buff,uint32_t len)
000000  b570              PUSH     {r4-r6,lr}
;;;46     {
;;;47         uint32_t  u32Count, u32delayno;
;;;48         for(u32Count=0; u32Count != len; u32Count++) {
;;;49             u32delayno = 0;
;;;50             while((UART0->FIFOSTS & UART_FIFOSTS_TXEMPTYF_Msk) == 0) { /* Wait Tx empty and Time-out manner */
000002  4b09              LDR      r3,|L3.40|
000004  2200              MOVS     r2,#0                 ;48
;;;51                 u32delayno++;
;;;52                 if( u32delayno >= 0x40000000 )
000006  039d              LSLS     r5,r3,#14
000008  e00a              B        |L3.32|
                  |L3.10|
00000a  2400              MOVS     r4,#0                 ;49
00000c  e002              B        |L3.20|
                  |L3.14|
00000e  1c64              ADDS     r4,r4,#1              ;50
000010  42ac              CMP      r4,r5
000012  d207              BCS      |L3.36|
                  |L3.20|
000014  699e              LDR      r6,[r3,#0x18]         ;50
000016  00f6              LSLS     r6,r6,#3              ;50
000018  d5f9              BPL      |L3.14|
;;;53                     return;
;;;54             }
;;;55             UART0->DAT = buff[u32Count];    /* Send UART Data from buffer */
00001a  5c84              LDRB     r4,[r0,r2]
00001c  601c              STR      r4,[r3,#0]
00001e  1c52              ADDS     r2,r2,#1
                  |L3.32|
000020  428a              CMP      r2,r1                 ;48
000022  d1f2              BNE      |L3.10|
                  |L3.36|
;;;56         }
;;;57         //return u32Count;
;;;58     }
000024  bd70              POP      {r4-r6,pc}
;;;59     
                          ENDP

000026  0000              DCW      0x0000
                  |L3.40|
                          DCD      0x40050000

                          AREA ||.bss||, DATA, NOINIT, ALIGN=0

                  uartRcvBuffer
                          %        64

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

                  wptr
000000  00                DCB      0x00

;*** Start embedded assembler ***

#line 1 "..\\..\\..\\Library\\StdDriver\\driver\\lib_driver_uart_pan159.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___24_lib_driver_uart_pan159_c_bb43f66e____REV16|
#line 388 "..\\..\\..\\Library\\CMSIS\\Include\\cmsis_armcc.h"
|__asm___24_lib_driver_uart_pan159_c_bb43f66e____REV16| PROC
#line 389

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___24_lib_driver_uart_pan159_c_bb43f66e____REVSH|
#line 402
|__asm___24_lib_driver_uart_pan159_c_bb43f66e____REVSH| PROC
#line 403

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
