; generated by Component: ARM Compiler 5.06 update 6 (build 750) Tool: ArmCC [4d3637]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\obj\main.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\main.d --cpu=Cortex-M0 --apcs=interwork -Otime --diag_suppress=9931 -I..\..\..\..\Library\CMSIS\Include -I..\..\..\..\Library\Device\Nuvoton\M0A21\Include -I..\..\..\..\Library\StdDriver\inc -I..\ -IC:\Keil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -D__MICROLIB -D__UVISION_VERSION=538 --omf_browse=.\obj\main.crf ..\main.c]
                          THUMB

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

                  Convert_FlashData PROC
;;;298      */
;;;299    void Convert_FlashData(void)
000000  4b0f              LDR      r3,|L1.64|
;;;300    {
;;;301        uint8_t i = 0;
000002  2000              MOVS     r0,#0
;;;302    
;;;303        if((uint8_t)flashData[0] != 0xFF)
000004  7819              LDRB     r1,[r3,#0]  ; flashData
000006  29ff              CMP      r1,#0xff
000008  d018              BEQ      |L1.60|
00000a  b410              PUSH     {r4}                  ;300
;;;304        {
;;;305            for(i = 0; i < RX_BUFFER_SIZE; i++)
;;;306            {
;;;307                String[i] = 0;
00000c  4c0d              LDR      r4,|L1.68|
00000e  2200              MOVS     r2,#0
                  |L1.16|
000010  5422              STRB     r2,[r4,r0]
000012  1c40              ADDS     r0,r0,#1
000014  b2c0              UXTB     r0,r0                 ;305
000016  2832              CMP      r0,#0x32              ;305
000018  d3fa              BCC      |L1.16|
;;;308            }
;;;309    
;;;310            for(i = 0; i < RX_BUFFER_SIZE; i++)
00001a  2000              MOVS     r0,#0
                  |L1.28|
;;;311            {
;;;312                if((uint8_t)flashData[i] != 0xFF)
00001c  5c19              LDRB     r1,[r3,r0]
00001e  29ff              CMP      r1,#0xff
000020  d004              BEQ      |L1.44|
;;;313                    String[i] = flashData[i];
000022  5421              STRB     r1,[r4,r0]
000024  1c40              ADDS     r0,r0,#1
000026  b2c0              UXTB     r0,r0                 ;310
000028  2832              CMP      r0,#0x32              ;310
00002a  d3f7              BCC      |L1.28|
                  |L1.44|
;;;314                else
;;;315                    break;
;;;316            }
;;;317    
;;;318            for(i = 0; i < RX_BUFFER_SIZE; i++)
00002c  2000              MOVS     r0,#0
                  |L1.46|
;;;319            {
;;;320                flashData[i] = 0;
00002e  541a              STRB     r2,[r3,r0]
000030  1c40              ADDS     r0,r0,#1
000032  b2c0              UXTB     r0,r0                 ;318
000034  2832              CMP      r0,#0x32              ;318
000036  d3fa              BCC      |L1.46|
;;;321            }
;;;322        }
;;;323    }
000038  bc10              POP      {r4}
00003a  4770              BX       lr
                  |L1.60|
00003c  4770              BX       lr
;;;324    
                          ENDP

00003e  0000              DCW      0x0000
                  |L1.64|
                          DCD      ||.bss||+0x32
                  |L1.68|
                          DCD      ||.data||+0x8

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

                  Read_DataFlash PROC
;;;274      */
;;;275    void Read_DataFlash(void)
000000  b5f0              PUSH     {r4-r7,lr}
000002  2359              MOVS     r3,#0x59
000004  482a              LDR      r0,|L2.176|
000006  2116              MOVS     r1,#0x16
;;;276    {
000008  b083              SUB      sp,sp,#0xc
00000a  2288              MOVS     r2,#0x88
                  |L2.12|
00000c  6003              STR      r3,[r0,#0]
00000e  6001              STR      r1,[r0,#0]
000010  6002              STR      r2,[r0,#0]
000012  6804              LDR      r4,[r0,#0]
000014  2c00              CMP      r4,#0
000016  d0f9              BEQ      |L2.12|
;;;277        SYS_UnlockReg();
;;;278    
;;;279        /* Enable FMC ISP function */
;;;280        FMC_Open();
000018  f7fffffe          BL       FMC_Open
;;;281    
;;;282        /* Enable Data Flash and set base address. */
;;;283        set_data_flash_base(DATA_FLASH_BASE);
00001c  2503              MOVS     r5,#3
00001e  032d              LSLS     r5,r5,#12
000020  2102              MOVS     r1,#2
000022  4668              MOV      r0,sp
000024  f7fffffe          BL       FMC_ReadConfig
000028  4c22              LDR      r4,|L2.180|
00002a  2800              CMP      r0,#0
00002c  db1f              BLT      |L2.110|
00002e  9800              LDR      r0,[sp,#0]
000030  07c0              LSLS     r0,r0,#31
000032  d102              BNE      |L2.58|
000034  9901              LDR      r1,[sp,#4]
000036  42a9              CMP      r1,r5
000038  d019              BEQ      |L2.110|
                  |L2.58|
00003a  6820              LDR      r0,[r4,#0]
00003c  2110              MOVS     r1,#0x10
00003e  4308              ORRS     r0,r0,r1
000040  6020              STR      r0,[r4,#0]
000042  2003              MOVS     r0,#3
000044  0500              LSLS     r0,r0,#20
000046  f7fffffe          BL       FMC_Erase
00004a  9800              LDR      r0,[sp,#0]
00004c  2102              MOVS     r1,#2
00004e  0840              LSRS     r0,r0,#1
000050  0040              LSLS     r0,r0,#1
000052  9000              STR      r0,[sp,#0]
000054  9501              STR      r5,[sp,#4]
000056  4668              MOV      r0,sp
000058  f7fffffe          BL       FMC_WriteConfig
00005c  2800              CMP      r0,#0
00005e  db06              BLT      |L2.110|
                  |L2.96|
000060  f7fffffe          BL       IsDebugFifoEmpty
000064  2800              CMP      r0,#0
000066  d0fb              BEQ      |L2.96|
000068  2001              MOVS     r0,#1
00006a  0781              LSLS     r1,r0,#30
00006c  6088              STR      r0,[r1,#8]
                  |L2.110|
;;;284    
;;;285        FMC_ENABLE_AP_UPDATE();
00006e  4911              LDR      r1,|L2.180|
000070  6808              LDR      r0,[r1,#0]
000072  2208              MOVS     r2,#8
000074  4310              ORRS     r0,r0,r2
000076  6008              STR      r0,[r1,#0]
;;;286    
;;;287        flash_read(DATA_FLASH_BASE, DATA_FLASH_BASE + RX_BUFFER_SIZE);
000078  4e0f              LDR      r6,|L2.184|
00007a  4f10              LDR      r7,|L2.188|
00007c  2400              MOVS     r4,#0
                  |L2.126|
00007e  4628              MOV      r0,r5
000080  f7fffffe          BL       FMC_Read
000084  4603              MOV      r3,r0
000086  2000              MOVS     r0,#0
                  |L2.136|
000088  00c2              LSLS     r2,r0,#3
00008a  4619              MOV      r1,r3
00008c  40d1              LSRS     r1,r1,r2
00008e  5539              STRB     r1,[r7,r4]
000090  1c40              ADDS     r0,r0,#1
000092  1c64              ADDS     r4,r4,#1
000094  2804              CMP      r0,#4
000096  d3f7              BCC      |L2.136|
000098  1d2d              ADDS     r5,r5,#4
00009a  42b5              CMP      r5,r6
00009c  d3ef              BCC      |L2.126|
;;;288    
;;;289        FMC_DISABLE_AP_UPDATE();
00009e  4805              LDR      r0,|L2.180|
0000a0  6801              LDR      r1,[r0,#0]
0000a2  2208              MOVS     r2,#8
0000a4  4391              BICS     r1,r1,r2
0000a6  6001              STR      r1,[r0,#0]
;;;290    
;;;291        FMC_Close();
0000a8  f7fffffe          BL       FMC_Close
;;;292    }
0000ac  b003              ADD      sp,sp,#0xc
0000ae  bdf0              POP      {r4-r7,pc}
;;;293    
                          ENDP

                  |L2.176|
                          DCD      0x40000100
                  |L2.180|
                          DCD      0x4000c000
                  |L2.184|
                          DCD      0x00003032
                  |L2.188|
                          DCD      ||.bss||+0x32

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

                  SYS_Init PROC
;;;122    
;;;123    void SYS_Init(void)
000000  b570              PUSH     {r4-r6,lr}
000002  2059              MOVS     r0,#0x59
000004  4c16              LDR      r4,|L3.96|
000006  2116              MOVS     r1,#0x16
000008  2288              MOVS     r2,#0x88
                  |L3.10|
00000a  6020              STR      r0,[r4,#0]
00000c  6021              STR      r1,[r4,#0]
00000e  6022              STR      r2,[r4,#0]
000010  6823              LDR      r3,[r4,#0]
000012  2b00              CMP      r3,#0
000014  d0f9              BEQ      |L3.10|
;;;124    {
;;;125        /* Unlock protected registers */
;;;126        SYS_UnlockReg();
;;;127    	
;;;128        /* Enable HIRC */
;;;129        CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);
000016  2004              MOVS     r0,#4
000018  f7fffffe          BL       CLK_EnableXtalRC
;;;130    
;;;131        /* Waiting for HIRC clock ready */
;;;132        CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);
00001c  2010              MOVS     r0,#0x10
00001e  f7fffffe          BL       CLK_WaitClockReady
;;;133    
;;;134        /* Switch HCLK clock source to HIRC */
;;;135        CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));
000022  2100              MOVS     r1,#0
000024  2007              MOVS     r0,#7
000026  f7fffffe          BL       CLK_SetHCLK
;;;136    
;;;137        /* Set both PCLK0 and PCLK1 as HCLK/2 */
;;;138        CLK->PCLKDIV = (CLK_PCLKDIV_APB0DIV_DIV1 | CLK_PCLKDIV_APB1DIV_DIV1);
00002a  480e              LDR      r0,|L3.100|
00002c  2500              MOVS     r5,#0
00002e  6345              STR      r5,[r0,#0x34]
;;;139    
;;;140        /* Switch UART0 clock source to HIRC */
;;;141        CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));
000030  4e0d              LDR      r6,|L3.104|
000032  2103              MOVS     r1,#3
000034  462a              MOV      r2,r5
000036  0609              LSLS     r1,r1,#24
000038  4630              MOV      r0,r6
00003a  f7fffffe          BL       CLK_SetModuleClock
;;;142    
;;;143        /* Enable UART peripheral clock */
;;;144        CLK_EnableModuleClock(UART0_MODULE);
00003e  4630              MOV      r0,r6
000040  f7fffffe          BL       CLK_EnableModuleClock
;;;145        CLK_EnableModuleClock(TMR0_MODULE);
000044  4809              LDR      r0,|L3.108|
000046  f7fffffe          BL       CLK_EnableModuleClock
;;;146    
;;;147        /* Update System Core Clock */
;;;148        /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
;;;149        SystemCoreClockUpdate();
00004a  f7fffffe          BL       SystemCoreClockUpdate
;;;150    
;;;151        /*----------------------------------------------------------------------*/
;;;152        /* Init I/O Multi-function                                              */
;;;153        /*----------------------------------------------------------------------*/
;;;154        /* Set PB multi-function pins for UART0 RXD=PB.6 and TXD=PB.4 */
;;;155        SYS->GPB_MFP1 = (SYS->GPB_MFP1 & ~(SYS_GPB_MFP1_PB4MFP_Msk | SYS_GPB_MFP1_PB6MFP_Msk)) |
00004e  4808              LDR      r0,|L3.112|
000050  6841              LDR      r1,[r0,#4]
000052  4a08              LDR      r2,|L3.116|
000054  4011              ANDS     r1,r1,r2
000056  4a08              LDR      r2,|L3.120|
000058  1889              ADDS     r1,r1,r2
00005a  6041              STR      r1,[r0,#4]
00005c  6025              STR      r5,[r4,#0]
;;;156                        (SYS_GPB_MFP1_PB4MFP_UART0_TXD | SYS_GPB_MFP1_PB6MFP_UART0_RXD);
;;;157    
;;;158        /* Lock protected registers */
;;;159        SYS_LockReg();
;;;160    }
00005e  bd70              POP      {r4-r6,pc}
;;;161    
                          ENDP

                  |L3.96|
                          DCD      0x40000100
                  |L3.100|
                          DCD      0x40000200
                  |L3.104|
                          DCD      0x5f803d10
                  |L3.108|
                          DCD      0x5e800002
                  |L3.112|
                          DCD      0x40000040
                  |L3.116|
                          DCD      0xff00ff00
                  |L3.120|
                          DCD      0x00090008

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

                  TIMER0_Init PROC
;;;219    /*---------------------------------------------------------------------------------------------------------*/
;;;220    void TIMER0_Init(void)
000000  b510              PUSH     {r4,lr}
;;;221    {
;;;222        /* Configure and set TIMER0 */
;;;223        // Give a dummy target frequency here. Will over write prescale and compare value with macro
;;;224        TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 48000000);
000002  4c0a              LDR      r4,|L4.44|
000004  2101              MOVS     r1,#1
000006  4a08              LDR      r2,|L4.40|
000008  06c9              LSLS     r1,r1,#27
00000a  4620              MOV      r0,r4
00000c  f7fffffe          BL       TIMER_Open
;;;225    
;;;226        // Update prescale and compare value to what we need in event counter mode.
;;;227        TIMER_SET_PRESCALE_VALUE(TIMER0, 0);
000010  6821              LDR      r1,[r4,#0]
000012  0a09              LSRS     r1,r1,#8
000014  0209              LSLS     r1,r1,#8
000016  6021              STR      r1,[r4,#0]
;;;228        TIMER_SET_CMP_VALUE(TIMER0, 160);
000018  21a0              MOVS     r1,#0xa0
00001a  6061              STR      r1,[r4,#4]
;;;229    
;;;230        // Counter increase on rising edge
;;;231        TIMER_EnableEventCounter(TIMER0, TIMER_COUNTER_EVENT_RISING);
00001c  2101              MOVS     r1,#1
00001e  4620              MOV      r0,r4
000020  f7fffffe          BL       TIMER_EnableEventCounter
;;;232    }
000024  bd10              POP      {r4,pc}
;;;233    
                          ENDP

000026  0000              DCW      0x0000
                  |L4.40|
                          DCD      0x02dc6c00
                  |L4.44|
                          DCD      0x40050000

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

                  UART0_IRQHandler PROC
;;;186    /*---------------------------------------------------------------------------------------------------------*/
;;;187    void UART0_IRQHandler(void)
000000  490f              LDR      r1,|L5.64|
;;;188    {
;;;189        uint8_t tmpChar;
;;;190        static uint16_t u16UART_RX_Buffer_Index = 0;
;;;191    
;;;192        if(UART_GET_INT_FLAG(UART0, UART_INTSTS_RDAINT_Msk))
000002  69c8              LDR      r0,[r1,#0x1c]
000004  05c0              LSLS     r0,r0,#23
000006  d50c              BPL      |L5.34|
;;;193        {
;;;194            /* Record RDA interrupt trigger times */
;;;195            g_u8UART_RDA_Trigger_Cnt++;
000008  4a0e              LDR      r2,|L5.68|
00000a  7890              LDRB     r0,[r2,#2]  ; g_u8UART_RDA_Trigger_Cnt
00000c  1c40              ADDS     r0,r0,#1
00000e  7090              STRB     r0,[r2,#2]
;;;196    
;;;197            tmpChar = UART_READ(UART0);
000010  6808              LDR      r0,[r1,#0]
000012  2300              MOVS     r3,#0
000014  b2c0              UXTB     r0,r0
;;;198            if(tmpChar == 0x0D)
000016  280d              CMP      r0,#0xd
000018  d104              BNE      |L5.36|
;;;199            {
;;;200                u16UART_RX_Buffer_Index = 0;
00001a  80d3              STRH     r3,[r2,#6]
;;;201                g_bUART_RX_Received_Data_State = eUART_RX_Received_Data_Finish;
00001c  7053              STRB     r3,[r2,#1]
;;;202                receiveData = TRUE;
00001e  2001              MOVS     r0,#1
000020  7010              STRB     r0,[r2,#0]
                  |L5.34|
;;;203            }
;;;204            else
;;;205            {
;;;206                UART_WRITE(UART0, tmpChar);
;;;207    
;;;208                g_au8UART_RX_Buffer[u16UART_RX_Buffer_Index] = tmpChar;
;;;209                u16UART_RX_Buffer_Index ++;
;;;210    
;;;211                if (u16UART_RX_Buffer_Index >= RX_BUFFER_SIZE)
;;;212                    u16UART_RX_Buffer_Index = 0;
;;;213            }
;;;214        }
;;;215    }
000022  4770              BX       lr
                  |L5.36|
000024  b410              PUSH     {r4}                  ;188
000026  6008              STR      r0,[r1,#0]            ;206
000028  4c07              LDR      r4,|L5.72|
00002a  88d1              LDRH     r1,[r2,#6]            ;208  ; u16UART_RX_Buffer_Index
00002c  5460              STRB     r0,[r4,r1]            ;208
00002e  1c49              ADDS     r1,r1,#1              ;208
000030  b288              UXTH     r0,r1                 ;209
000032  80d0              STRH     r0,[r2,#6]            ;209
000034  2832              CMP      r0,#0x32              ;211
000036  d300              BCC      |L5.58|
000038  80d3              STRH     r3,[r2,#6]            ;212
                  |L5.58|
00003a  bc10              POP      {r4}
00003c  4770              BX       lr
;;;216    
                          ENDP

00003e  0000              DCW      0x0000
                  |L5.64|
                          DCD      0x40070000
                  |L5.68|
                          DCD      ||.data||
                  |L5.72|
                          DCD      ||.bss||

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

                  UART0_Init PROC
;;;164    /*----------------------------------------------------------------------*/
;;;165    void UART0_Init(void)
000000  b510              PUSH     {r4,lr}
;;;166    {
;;;167        /* Reset UART0 */
;;;168        SYS_ResetModule(UART0_RST);
000002  480d              LDR      r0,|L6.56|
000004  f7fffffe          BL       SYS_ResetModule
;;;169    
;;;170        /* Configure UART0 and set UART0 baud rate */
;;;171        UART_Open(UART0, 115200);
000008  4c0c              LDR      r4,|L6.60|
00000a  21e1              MOVS     r1,#0xe1
00000c  0249              LSLS     r1,r1,#9
00000e  4620              MOV      r0,r4
000010  f7fffffe          BL       UART_Open
;;;172    
;;;173        /* Enable UART RDA/THRE/Time-out interrupt */
;;;174        UART_EnableInt(UART0, UART_INTEN_RDAIEN_Msk);
000014  2101              MOVS     r1,#1
000016  4620              MOV      r0,r4
000018  f7fffffe          BL       UART_EnableInt
00001c  2101              MOVS     r1,#1
00001e  4a08              LDR      r2,|L6.64|
000020  0309              LSLS     r1,r1,#12
000022  6011              STR      r1,[r2,#0]
;;;175        NVIC_EnableIRQ(UART0_IRQn);
;;;176    
;;;177        /* Set RX Trigger Level as 4 bytes */
;;;178        UART0->FIFO = ((UART0->FIFO & (~UART_FIFO_RFITL_Msk)) | UART_FIFO_RFITL_1BYTE);
000024  68a1              LDR      r1,[r4,#8]
000026  4620              MOV      r0,r4
000028  22f0              MOVS     r2,#0xf0
00002a  4391              BICS     r1,r1,r2
00002c  60a1              STR      r1,[r4,#8]
;;;179    
;;;180        /* Set Timeout time counter in 60 bit-time and enable time-out counter */
;;;181        UART_SetTimeoutCnt(UART0, RX_TIMEOUT_CNT);
00002e  2132              MOVS     r1,#0x32
000030  f7fffffe          BL       UART_SetTimeoutCnt
;;;182    }
000034  bd10              POP      {r4,pc}
;;;183    
                          ENDP

000036  0000              DCW      0x0000
                  |L6.56|
                          DCD      0x04000010
                  |L6.60|
                          DCD      0x40070000
                  |L6.64|
                          DCD      0xe000e100

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

                          REQUIRE _printf_percent
                          REQUIRE _printf_s
                          REQUIRE _printf_str
                  Write_DataFlash PROC
;;;329      */
;;;330    void Write_DataFlash(void)
000000  2000              MOVS     r0,#0
;;;331    {
;;;332        uint8_t i = 0;
;;;333    
;;;334        for(i = 0; i < RX_BUFFER_SIZE; i++)
;;;335        {
;;;336            if((g_au8UART_RX_Buffer[i] < 0x20) || (g_au8UART_RX_Buffer[i] > 0x7E))
000002  4931              LDR      r1,|L7.200|
                  |L7.4|
000004  5c0a              LDRB     r2,[r1,r0]
000006  2a20              CMP      r2,#0x20
000008  d302              BCC      |L7.16|
00000a  5c0a              LDRB     r2,[r1,r0]
00000c  2a7e              CMP      r2,#0x7e
00000e  d905              BLS      |L7.28|
                  |L7.16|
;;;337            {
;;;338                if(g_au8UART_RX_Buffer[i] == 0x0D)
000010  5c0a              LDRB     r2,[r1,r0]
000012  2a0d              CMP      r2,#0xd
000014  d002              BEQ      |L7.28|
;;;339                    continue;
;;;340                if(g_au8UART_RX_Buffer[i] != 0x00)
000016  5c0a              LDRB     r2,[r1,r0]
000018  2a00              CMP      r2,#0
00001a  d154              BNE      |L7.198|
                  |L7.28|
00001c  1c40              ADDS     r0,r0,#1
00001e  b2c0              UXTB     r0,r0                 ;334
000020  2832              CMP      r0,#0x32              ;334
000022  d3ef              BCC      |L7.4|
;;;341                    return;
;;;342            }
;;;343        }
;;;344    
;;;345        for(i = 0; i < RX_BUFFER_SIZE; i++)
000024  2000              MOVS     r0,#0
;;;346        {
;;;347            String[i] = 0;
000026  4a29              LDR      r2,|L7.204|
000028  4603              MOV      r3,r0
                  |L7.42|
00002a  5413              STRB     r3,[r2,r0]
00002c  1c40              ADDS     r0,r0,#1
00002e  b2c0              UXTB     r0,r0                 ;345
000030  2832              CMP      r0,#0x32              ;345
000032  d3fa              BCC      |L7.42|
;;;348        }
;;;349    
;;;350        for(i = 0; i < RX_BUFFER_SIZE; i++)
000034  2000              MOVS     r0,#0
                  |L7.54|
;;;351        {
;;;352            if(g_au8UART_RX_Buffer[i] != 0x0D)
000036  5c0b              LDRB     r3,[r1,r0]
000038  2b0d              CMP      r3,#0xd
00003a  d001              BEQ      |L7.64|
;;;353                String[i] = g_au8UART_RX_Buffer[i];
00003c  5c0b              LDRB     r3,[r1,r0]
00003e  e000              B        |L7.66|
                  |L7.64|
;;;354            else
;;;355                String[i] = 0x00;
000040  2300              MOVS     r3,#0
                  |L7.66|
000042  5413              STRB     r3,[r2,r0]
;;;356    
;;;357            g_au8UART_RX_Buffer[i] = 0;
000044  2300              MOVS     r3,#0
000046  540b              STRB     r3,[r1,r0]
000048  1c40              ADDS     r0,r0,#1
00004a  b2c0              UXTB     r0,r0                 ;350
00004c  2832              CMP      r0,#0x32              ;350
00004e  d3f2              BCC      |L7.54|
000050  b5f8              PUSH     {r3-r7,lr}            ;331
;;;358        }
;;;359    
;;;360        printf("\nYour name is %s\n", String);
000052  491e              LDR      r1,|L7.204|
000054  a01e              ADR      r0,|L7.208|
000056  f7fffffe          BL       __2printf
;;;361        printf("Now you can BlingBling your name anytime and anywhere!\n");
00005a  a022              ADR      r0,|L7.228|
00005c  f7fffffe          BL       __2printf
000060  2259              MOVS     r2,#0x59
000062  482e              LDR      r0,|L7.284|
000064  2316              MOVS     r3,#0x16
000066  2188              MOVS     r1,#0x88
                  |L7.104|
000068  6002              STR      r2,[r0,#0]
00006a  6003              STR      r3,[r0,#0]
00006c  6001              STR      r1,[r0,#0]
00006e  6804              LDR      r4,[r0,#0]
000070  2c00              CMP      r4,#0
000072  d0f9              BEQ      |L7.104|
;;;362    
;;;363        SYS_UnlockReg();
;;;364    
;;;365        /* Enable FMC ISP function */
;;;366        FMC_Open();
000074  f7fffffe          BL       FMC_Open
;;;367    
;;;368        FMC_ENABLE_AP_UPDATE();
000078  4929              LDR      r1,|L7.288|
00007a  6808              LDR      r0,[r1,#0]
00007c  2208              MOVS     r2,#8
00007e  4310              ORRS     r0,r0,r2
000080  6008              STR      r0,[r1,#0]
;;;369    
;;;370        /* Erase page */
;;;371        FMC_Erase(DATA_FLASH_BASE);
000082  2403              MOVS     r4,#3
000084  0324              LSLS     r4,r4,#12
000086  4620              MOV      r0,r4
000088  f7fffffe          BL       FMC_Erase
;;;372    
;;;373        flash_write(DATA_FLASH_BASE, DATA_FLASH_BASE + RX_BUFFER_SIZE, (uint32_t*)String);
00008c  4e25              LDR      r6,|L7.292|
00008e  4f0f              LDR      r7,|L7.204|
000090  2500              MOVS     r5,#0
                  |L7.146|
000092  00a8              LSLS     r0,r5,#2
000094  5839              LDR      r1,[r7,r0]
000096  4620              MOV      r0,r4
000098  1c6d              ADDS     r5,r5,#1
00009a  f7fffffe          BL       FMC_Write
00009e  1d24              ADDS     r4,r4,#4
0000a0  42b4              CMP      r4,r6
0000a2  d3f6              BCC      |L7.146|
;;;374    
;;;375        FMC_DISABLE_AP_UPDATE();
0000a4  481e              LDR      r0,|L7.288|
0000a6  6801              LDR      r1,[r0,#0]
0000a8  2208              MOVS     r2,#8
0000aa  4391              BICS     r1,r1,r2
0000ac  6001              STR      r1,[r0,#0]
;;;376    
;;;377        FMC_Close();
0000ae  f7fffffe          BL       FMC_Close
;;;378    
;;;379        g_u8UART_RDA_Trigger_Cnt = 0;
0000b2  491d              LDR      r1,|L7.296|
0000b4  2000              MOVS     r0,#0
0000b6  7088              STRB     r0,[r1,#2]
;;;380        g_u8UART_RXTO_Trigger_Cnt = 0;
0000b8  70c8              STRB     r0,[r1,#3]
;;;381        u16UART_RX_Buffer_Index = 0;
0000ba  7108              STRB     r0,[r1,#4]
;;;382    
;;;383        showArray_row = 0;
0000bc  491b              LDR      r1,|L7.300|
0000be  7008              STRB     r0,[r1,#0]
;;;384        showArray_column = 0;
0000c0  491b              LDR      r1,|L7.304|
0000c2  7008              STRB     r0,[r1,#0]
;;;385    }
0000c4  bdf8              POP      {r3-r7,pc}
                  |L7.198|
0000c6  4770              BX       lr
                          ENDP

                  |L7.200|
                          DCD      ||.bss||
                  |L7.204|
                          DCD      ||.data||+0x8
                  |L7.208|
0000d0  0a596f75          DCB      "\nYour name is %s\n",0
0000d4  72206e61
0000d8  6d652069
0000dc  73202573
0000e0  0a00    
0000e2  00                DCB      0
0000e3  00                DCB      0
                  |L7.228|
0000e4  4e6f7720          DCB      "Now you can BlingBling your name anytime and anywhere!\n"
0000e8  796f7520
0000ec  63616e20
0000f0  426c696e
0000f4  67426c69
0000f8  6e672079
0000fc  6f757220
000100  6e616d65
000104  20616e79
000108  74696d65
00010c  20616e64
000110  20616e79
000114  77686572
000118  65210a  
00011b  00                DCB      0
                  |L7.284|
                          DCD      0x40000100
                  |L7.288|
                          DCD      0x4000c000
                  |L7.292|
                          DCD      0x00003032
                  |L7.296|
                          DCD      ||.data||
                  |L7.300|
                          DCD      showArray_row
                  |L7.304|
                          DCD      showArray_column

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

                  fill_data_pattern PROC
;;;47     
;;;48     int32_t fill_data_pattern(uint32_t u32StartAddr, uint32_t u32EndAddr, char u32Pattern[])
000000  b5f8              PUSH     {r3-r7,lr}
;;;49     {
000002  460e              MOV      r6,r1
;;;50         uint32_t u32Addr;
;;;51         uint8_t i = 0;
000004  2500              MOVS     r5,#0
000006  4617              MOV      r7,r2                 ;49
000008  4604              MOV      r4,r0                 ;49
;;;52     
;;;53         for (u32Addr = u32StartAddr; u32Addr < u32EndAddr; u32Addr += 4)
00000a  42b0              CMP      r0,r6
00000c  d208              BCS      |L8.32|
                  |L8.14|
;;;54         {
;;;55             FMC_Write(u32Addr, (uint32_t)u32Pattern[i++]);
00000e  5d79              LDRB     r1,[r7,r5]
000010  1c6d              ADDS     r5,r5,#1
000012  b2ed              UXTB     r5,r5
000014  4620              MOV      r0,r4
000016  f7fffffe          BL       FMC_Write
00001a  1d24              ADDS     r4,r4,#4
00001c  42b4              CMP      r4,r6                 ;53
00001e  d3f6              BCC      |L8.14|
                  |L8.32|
;;;56         }
;;;57         return 0;
000020  2000              MOVS     r0,#0
;;;58     }
000022  bdf8              POP      {r3-r7,pc}
;;;59     
                          ENDP


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

                  flash_read PROC
;;;59     
;;;60     void flash_read(uint32_t u32StartAddr, uint32_t u32EndAddr)
000000  b5f8              PUSH     {r3-r7,lr}
;;;61     {
000002  460e              MOV      r6,r1
;;;62         uint32_t    u32Addr, u32data;
;;;63         uint32_t j, count = 0;
000004  2400              MOVS     r4,#0
000006  4605              MOV      r5,r0                 ;61
;;;64         char temp;
;;;65     
;;;66         for (u32Addr = u32StartAddr; u32Addr < u32EndAddr; u32Addr+=4)
000008  42b0              CMP      r0,r6
00000a  d210              BCS      |L9.46|
;;;67         {
;;;68             u32data = FMC_Read(u32Addr);
;;;69     
;;;70             for(j = 0; j < 4; j++)
;;;71             {
;;;72                 temp = ((u32data >> (j*8)) & 0xFF);
;;;73                 flashData[count++] = temp;
00000c  4f08              LDR      r7,|L9.48|
                  |L9.14|
00000e  4628              MOV      r0,r5                 ;68
000010  f7fffffe          BL       FMC_Read
000014  4603              MOV      r3,r0                 ;68
000016  2000              MOVS     r0,#0                 ;70
                  |L9.24|
000018  00c2              LSLS     r2,r0,#3              ;72
00001a  4619              MOV      r1,r3                 ;72
00001c  40d1              LSRS     r1,r1,r2              ;72
00001e  5539              STRB     r1,[r7,r4]
000020  1c40              ADDS     r0,r0,#1
000022  1c64              ADDS     r4,r4,#1
000024  2804              CMP      r0,#4                 ;70
000026  d3f7              BCC      |L9.24|
000028  1d2d              ADDS     r5,r5,#4              ;70
00002a  42b5              CMP      r5,r6                 ;66
00002c  d3ef              BCC      |L9.14|
                  |L9.46|
;;;74             }
;;;75         }
;;;76     }
00002e  bdf8              POP      {r3-r7,pc}
;;;77     
                          ENDP

                  |L9.48|
                          DCD      ||.bss||+0x32

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

                  flash_write PROC
;;;77     
;;;78     void flash_write(uint32_t u32StartAddr, uint32_t u32EndAddr, uint32_t u32Pattern[])
000000  b5f8              PUSH     {r3-r7,lr}
;;;79     {
000002  460e              MOV      r6,r1
;;;80         uint32_t u32Addr;
;;;81         uint32_t i = 0;
000004  2500              MOVS     r5,#0
000006  4617              MOV      r7,r2                 ;79
000008  4604              MOV      r4,r0                 ;79
;;;82     
;;;83         for (u32Addr = u32StartAddr; u32Addr < u32EndAddr; u32Addr+=4)
00000a  42b0              CMP      r0,r6
00000c  d208              BCS      |L10.32|
                  |L10.14|
;;;84         {
;;;85             FMC_Write(u32Addr, (uint32_t)u32Pattern[i++]);
00000e  00a8              LSLS     r0,r5,#2
000010  5839              LDR      r1,[r7,r0]
000012  4620              MOV      r0,r4
000014  1c6d              ADDS     r5,r5,#1
000016  f7fffffe          BL       FMC_Write
00001a  1d24              ADDS     r4,r4,#4
00001c  42b4              CMP      r4,r6                 ;83
00001e  d3f6              BCC      |L10.14|
                  |L10.32|
;;;86         }
;;;87     }
000020  bdf8              POP      {r3-r7,pc}
;;;88     
                          ENDP


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

                  main PROC
;;;233    
;;;234    int32_t main(void)
000000  f7fffffe          BL       SYS_Init
;;;235    {
;;;236        /* Init System, IP clock and multi-function I/O. */
;;;237        SYS_Init();
000004  4829              LDR      r0,|L11.172|
000006  f7fffffe          BL       SYS_ResetModule
00000a  4c29              LDR      r4,|L11.176|
00000c  21e1              MOVS     r1,#0xe1
00000e  0249              LSLS     r1,r1,#9
000010  4620              MOV      r0,r4
000012  f7fffffe          BL       UART_Open
000016  2101              MOVS     r1,#1
000018  4620              MOV      r0,r4
00001a  f7fffffe          BL       UART_EnableInt
00001e  2101              MOVS     r1,#1
000020  4a24              LDR      r2,|L11.180|
000022  0309              LSLS     r1,r1,#12
000024  6011              STR      r1,[r2,#0]
000026  68a1              LDR      r1,[r4,#8]
000028  4620              MOV      r0,r4
00002a  22f0              MOVS     r2,#0xf0
00002c  4391              BICS     r1,r1,r2
00002e  60a1              STR      r1,[r4,#8]
000030  2132              MOVS     r1,#0x32
000032  f7fffffe          BL       UART_SetTimeoutCnt
;;;238    
;;;239        /* Init UART0 for printf */
;;;240        UART0_Init();
;;;241    
;;;242        /* Init ARGB */
;;;243        ARGB_init();
000036  f7fffffe          BL       ARGB_init
;;;244    
;;;245        TIMER_Delay(TIMER0, 1000000);
00003a  491f              LDR      r1,|L11.184|
00003c  481f              LDR      r0,|L11.188|
00003e  f7fffffe          BL       TIMER_Delay
;;;246    
;;;247        Read_DataFlash();
000042  f7fffffe          BL       Read_DataFlash
000046  4a1e              LDR      r2,|L11.192|
000048  2000              MOVS     r0,#0
00004a  7811              LDRB     r1,[r2,#0]  ; flashData
00004c  4604              MOV      r4,r0
00004e  29ff              CMP      r1,#0xff
000050  d014              BEQ      |L11.124|
000052  4b1c              LDR      r3,|L11.196|
                  |L11.84|
000054  541c              STRB     r4,[r3,r0]
000056  1c40              ADDS     r0,r0,#1
000058  b2c0              UXTB     r0,r0
00005a  2832              CMP      r0,#0x32
00005c  d3fa              BCC      |L11.84|
00005e  2000              MOVS     r0,#0
                  |L11.96|
000060  5c11              LDRB     r1,[r2,r0]
000062  29ff              CMP      r1,#0xff
000064  d004              BEQ      |L11.112|
000066  5419              STRB     r1,[r3,r0]
000068  1c40              ADDS     r0,r0,#1
00006a  b2c0              UXTB     r0,r0
00006c  2832              CMP      r0,#0x32
00006e  d3f7              BCC      |L11.96|
                  |L11.112|
000070  2000              MOVS     r0,#0
                  |L11.114|
000072  5414              STRB     r4,[r2,r0]
000074  1c40              ADDS     r0,r0,#1
000076  b2c0              UXTB     r0,r0
000078  2832              CMP      r0,#0x32
00007a  d3fa              BCC      |L11.114|
                  |L11.124|
;;;248    
;;;249        Convert_FlashData();
;;;250    
;;;251        printf("+-----------------------------------------------------------+\n");
00007c  a012              ADR      r0,|L11.200|
00007e  f7fffffe          BL       __2printf
;;;252        printf("| Start to ""BlingBling"" Your Name!                        |\n");
000082  a021              ADR      r0,|L11.264|
000084  f7fffffe          BL       __2printf
;;;253        printf("+-----------------------------------------------------------+\n");
000088  a00f              ADR      r0,|L11.200|
00008a  f7fffffe          BL       __2printf
;;;254        printf("Please type your name and enter to send on BlingBling board. \n");
00008e  a02d              ADR      r0,|L11.324|
000090  f7fffffe          BL       __2printf
;;;255    
;;;256        while(1)
;;;257        {
;;;258            if(receiveData == FALSE)
000094  4d3b              LDR      r5,|L11.388|
                  |L11.150|
000096  7828              LDRB     r0,[r5,#0]  ; receiveData
000098  2800              CMP      r0,#0
00009a  d003              BEQ      |L11.164|
;;;259            {
;;;260                put_string(String);
;;;261            }
;;;262            else
;;;263            {
;;;264                Write_DataFlash();
00009c  f7fffffe          BL       Write_DataFlash
;;;265                receiveData = FALSE;
0000a0  702c              STRB     r4,[r5,#0]
0000a2  e7f8              B        |L11.150|
                  |L11.164|
0000a4  4807              LDR      r0,|L11.196|
0000a6  f7fffffe          BL       put_string
0000aa  e7f4              B        |L11.150|
;;;266            }
;;;267        }
;;;268    }
;;;269    
                          ENDP

                  |L11.172|
                          DCD      0x04000010
                  |L11.176|
                          DCD      0x40070000
                  |L11.180|
                          DCD      0xe000e100
                  |L11.184|
                          DCD      0x000f4240
                  |L11.188|
                          DCD      0x40050000
                  |L11.192|
                          DCD      ||.bss||+0x32
                  |L11.196|
                          DCD      ||.data||+0x8
                  |L11.200|
0000c8  2b2d2d2d          DCB      "+------------------------------------------------------"
0000cc  2d2d2d2d
0000d0  2d2d2d2d
0000d4  2d2d2d2d
0000d8  2d2d2d2d
0000dc  2d2d2d2d
0000e0  2d2d2d2d
0000e4  2d2d2d2d
0000e8  2d2d2d2d
0000ec  2d2d2d2d
0000f0  2d2d2d2d
0000f4  2d2d2d2d
0000f8  2d2d2d2d
0000fc  2d2d2d  
0000ff  2d2d2d2d          DCB      "-----+\n",0
000103  2d2b0a00
000107  00                DCB      0
                  |L11.264|
000108  7c205374          DCB      "| Start to BlingBling Your Name!                       "
00010c  61727420
000110  746f2042
000114  6c696e67
000118  426c696e
00011c  6720596f
000120  7572204e
000124  616d6521
000128  20202020
00012c  20202020
000130  20202020
000134  20202020
000138  20202020
00013c  202020  
00013f  207c0a00          DCB      " |\n",0
000143  00                DCB      0
                  |L11.324|
000144  506c6561          DCB      "Please type your name and enter to send on BlingBling b"
000148  73652074
00014c  79706520
000150  796f7572
000154  206e616d
000158  6520616e
00015c  6420656e
000160  74657220
000164  746f2073
000168  656e6420
00016c  6f6e2042
000170  6c696e67
000174  426c696e
000178  672062  
00017b  6f617264          DCB      "oard. \n",0
00017f  2e200a00
000183  00                DCB      0
                  |L11.388|
                          DCD      ||.data||

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

                  g_au8UART_RX_Buffer
                          %        50
                  flashData
                          %        50

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

                  receiveData
000000  00                DCB      0x00
                  g_bUART_RX_Received_Data_State
000001  01                DCB      0x01
                  g_u8UART_RDA_Trigger_Cnt
000002  00                DCB      0x00
                  g_u8UART_RXTO_Trigger_Cnt
000003  00                DCB      0x00
                  u16UART_RX_Buffer_Index
000004  0000              DCB      0x00,0x00
                  |symbol_number.36|
000006  0000              DCW      0x0000
                  String
000008  6e75766f          DCB      0x6e,0x75,0x76,0x6f
00000c  546f6e00          DCB      0x54,0x6f,0x6e,0x00
                          %        40
000038  0000              DCB      0x00,0x00

;*** Start embedded assembler ***

#line 1 "..\\main.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___6_main_c_String____REV16|
#line 464 "..\\..\\..\\..\\Library\\CMSIS\\Include\\cmsis_armcc.h"
|__asm___6_main_c_String____REV16| PROC
#line 465

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___6_main_c_String____REVSH|
#line 479
|__asm___6_main_c_String____REVSH| PROC
#line 480

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***

                  __ARM_use_no_argv EQU 0
