; generated by Component: ARM Compiler 5.05 (build 41) Tool: ArmCC [4d0eb9]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\obj\fmc.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\fmc.d --cpu=Cortex-M0 --apcs=interwork -I..\..\..\Library\CMSIS\Include -I..\..\..\Library\Device\Nuvoton\Mini51Series\Include -I..\..\..\Library\StdDriver\inc -I.\StdDriver\inc -I.\CMSIS -IG:\Geek\Projects\Zulolo_F\Force\Code\Zulolo_F_Force\RTE -ID:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.0.2\Device\Mini51\Include -ID:\Keil_v5\ARM\CMSIS\Include -I\ -D__MICROLIB --omf_browse=.\obj\fmc.crf StdDriver\src\fmc.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  FMC_SetBootSource PROC
;;;34       */
;;;35     void FMC_SetBootSource (int32_t i32BootSrc)
000000  496c              LDR      r1,|L1.436|
;;;36     {
;;;37         if (i32BootSrc == 1)
;;;38             FMC->ISPCON |= FMC_ISPCON_BS_Msk;
000002  2202              MOVS     r2,#2
000004  2801              CMP      r0,#1                 ;37
;;;39         else
;;;40             FMC->ISPCON &= ~FMC_ISPCON_BS_Msk;
000006  6808              LDR      r0,[r1,#0]
000008  d002              BEQ      |L1.16|
00000a  4390              BICS     r0,r0,r2
                  |L1.12|
00000c  6008              STR      r0,[r1,#0]            ;38
;;;41     }
00000e  4770              BX       lr
                  |L1.16|
000010  4310              ORRS     r0,r0,r2              ;38
000012  e7fb              B        |L1.12|
;;;42     
                          ENDP

                  FMC_Close PROC
;;;46       */
;;;47     void FMC_Close(void)
000014  4867              LDR      r0,|L1.436|
;;;48     {
;;;49         FMC->ISPCON &= ~FMC_ISPCON_ISPEN_Msk;
000016  6801              LDR      r1,[r0,#0]
000018  0849              LSRS     r1,r1,#1
00001a  0049              LSLS     r1,r1,#1
00001c  6001              STR      r1,[r0,#0]
;;;50     }
00001e  4770              BX       lr
;;;51     
                          ENDP

                  FMC_DisableAPUpdate PROC
;;;55       */
;;;56     void FMC_DisableAPUpdate(void)
000020  4864              LDR      r0,|L1.436|
;;;57     {
;;;58         FMC->ISPCON &= ~FMC_ISPCON_APUEN_Msk;
000022  6801              LDR      r1,[r0,#0]
000024  2208              MOVS     r2,#8
000026  4391              BICS     r1,r1,r2
000028  6001              STR      r1,[r0,#0]
;;;59     }
00002a  4770              BX       lr
;;;60     
                          ENDP

                  FMC_DisableConfigUpdate PROC
;;;64       */
;;;65     void FMC_DisableConfigUpdate(void)
00002c  4861              LDR      r0,|L1.436|
;;;66     {
;;;67         FMC->ISPCON &= ~FMC_ISPCON_CFGUEN_Msk;
00002e  6801              LDR      r1,[r0,#0]
000030  2210              MOVS     r2,#0x10
000032  4391              BICS     r1,r1,r2
000034  6001              STR      r1,[r0,#0]
;;;68     }
000036  4770              BX       lr
;;;69     
                          ENDP

                  FMC_DisableLDUpdate PROC
;;;73       */
;;;74     void FMC_DisableLDUpdate(void)
000038  485e              LDR      r0,|L1.436|
;;;75     {
;;;76         FMC->ISPCON &= ~FMC_ISPCON_LDUEN_Msk;
00003a  6801              LDR      r1,[r0,#0]
00003c  2220              MOVS     r2,#0x20
00003e  4391              BICS     r1,r1,r2
000040  6001              STR      r1,[r0,#0]
;;;77     }
000042  4770              BX       lr
;;;78     
                          ENDP

                  FMC_EnableAPUpdate PROC
;;;82       */
;;;83     void FMC_EnableAPUpdate(void)
000044  485b              LDR      r0,|L1.436|
;;;84     {
;;;85         FMC->ISPCON |= FMC_ISPCON_APUEN_Msk;
000046  6801              LDR      r1,[r0,#0]
000048  2208              MOVS     r2,#8
00004a  4311              ORRS     r1,r1,r2
00004c  6001              STR      r1,[r0,#0]
;;;86     }
00004e  4770              BX       lr
;;;87     
                          ENDP

                  FMC_EnableConfigUpdate PROC
;;;91       */
;;;92     void FMC_EnableConfigUpdate(void)
000050  4858              LDR      r0,|L1.436|
;;;93     {
;;;94         FMC->ISPCON |= FMC_ISPCON_CFGUEN_Msk;
000052  6801              LDR      r1,[r0,#0]
000054  2210              MOVS     r2,#0x10
000056  4311              ORRS     r1,r1,r2
000058  6001              STR      r1,[r0,#0]
;;;95     }
00005a  4770              BX       lr
;;;96     
                          ENDP

                  FMC_EnableLDUpdate PROC
;;;100      */
;;;101    void FMC_EnableLDUpdate(void)
00005c  4855              LDR      r0,|L1.436|
;;;102    {
;;;103        FMC->ISPCON |= FMC_ISPCON_LDUEN_Msk;
00005e  6801              LDR      r1,[r0,#0]
000060  2220              MOVS     r2,#0x20
000062  4311              ORRS     r1,r1,r2
000064  6001              STR      r1,[r0,#0]
;;;104    }
000066  4770              BX       lr
;;;105    
                          ENDP

                  FMC_Erase PROC
;;;112      */
;;;113    int32_t FMC_Erase(uint32_t u32PageAddr)
000068  4952              LDR      r1,|L1.436|
;;;114    {
;;;115        FMC->ISPCMD = FMC_ISPCMD_PAGE_ERASE;
00006a  2222              MOVS     r2,#0x22
00006c  60ca              STR      r2,[r1,#0xc]
;;;116        FMC->ISPADR = u32PageAddr;
00006e  6048              STR      r0,[r1,#4]
;;;117        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
000070  2001              MOVS     r0,#1
000072  6108              STR      r0,[r1,#0x10]
                  |L1.116|
;;;118        
;;;119        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
000074  6908              LDR      r0,[r1,#0x10]
000076  07c0              LSLS     r0,r0,#31
000078  d1fc              BNE      |L1.116|
;;;120    
;;;121        if (FMC->ISPCON & FMC_ISPCON_ISPFF_Msk)
00007a  6808              LDR      r0,[r1,#0]
00007c  0640              LSLS     r0,r0,#25
00007e  d504              BPL      |L1.138|
;;;122        {
;;;123            FMC->ISPCON = FMC_ISPCON_ISPFF_Msk;
000080  2040              MOVS     r0,#0x40
000082  6008              STR      r0,[r1,#0]
;;;124            return -1;
000084  2000              MOVS     r0,#0
000086  43c0              MVNS     r0,r0
;;;125        }
;;;126        return 0;
;;;127    }
000088  4770              BX       lr
                  |L1.138|
00008a  2000              MOVS     r0,#0                 ;126
00008c  4770              BX       lr
;;;128    
                          ENDP

                  FMC_GetBootSource PROC
;;;134      */
;;;135    int32_t FMC_GetBootSource (void)
00008e  4849              LDR      r0,|L1.436|
;;;136    {
;;;137        if (FMC->ISPCON & FMC_ISPCON_BS_Msk)
000090  6800              LDR      r0,[r0,#0]
000092  0780              LSLS     r0,r0,#30
000094  d501              BPL      |L1.154|
;;;138            return 1;
000096  2001              MOVS     r0,#1
;;;139        else
;;;140            return 0;
;;;141    }
000098  4770              BX       lr
                  |L1.154|
00009a  2000              MOVS     r0,#0                 ;140
00009c  4770              BX       lr
;;;142    
                          ENDP

                  FMC_Open PROC
;;;146      */
;;;147    void FMC_Open(void)
00009e  4845              LDR      r0,|L1.436|
;;;148    {
;;;149        FMC->ISPCON |=  FMC_ISPCON_ISPEN_Msk;
0000a0  6801              LDR      r1,[r0,#0]
0000a2  2201              MOVS     r2,#1
0000a4  4311              ORRS     r1,r1,r2
0000a6  6001              STR      r1,[r0,#0]
;;;150    }
0000a8  4770              BX       lr
;;;151    
                          ENDP

                  FMC_Read PROC
;;;157      */
;;;158    uint32_t FMC_Read(uint32_t u32Addr)
0000aa  4942              LDR      r1,|L1.436|
;;;159    { 
;;;160        FMC->ISPCMD = FMC_ISPCMD_READ;
0000ac  2200              MOVS     r2,#0
0000ae  60ca              STR      r2,[r1,#0xc]
;;;161        FMC->ISPADR = u32Addr;
0000b0  6048              STR      r0,[r1,#4]
;;;162        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
0000b2  2001              MOVS     r0,#1
0000b4  6108              STR      r0,[r1,#0x10]
                  |L1.182|
;;;163        
;;;164        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
0000b6  6908              LDR      r0,[r1,#0x10]
0000b8  07c0              LSLS     r0,r0,#31
0000ba  d1fc              BNE      |L1.182|
;;;165    
;;;166        return FMC->ISPDAT;
0000bc  6888              LDR      r0,[r1,#8]
;;;167    }
0000be  4770              BX       lr
;;;168    
                          ENDP

                  FMC_ReadCID PROC
;;;173      */
;;;174    uint32_t FMC_ReadCID(void)  
0000c0  483c              LDR      r0,|L1.436|
;;;175    {
;;;176        FMC->ISPCMD = FMC_ISPCMD_READ_CID;
0000c2  210b              MOVS     r1,#0xb
0000c4  60c1              STR      r1,[r0,#0xc]
;;;177        FMC->ISPADR = 0x0;
0000c6  2100              MOVS     r1,#0
0000c8  6041              STR      r1,[r0,#4]
;;;178        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
0000ca  2101              MOVS     r1,#1
0000cc  6101              STR      r1,[r0,#0x10]
                  |L1.206|
;;;179        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
0000ce  6901              LDR      r1,[r0,#0x10]
0000d0  07c9              LSLS     r1,r1,#31
0000d2  d1fc              BNE      |L1.206|
;;;180        return FMC->ISPDAT; 
0000d4  6880              LDR      r0,[r0,#8]
;;;181    }
0000d6  4770              BX       lr
;;;182    
                          ENDP

                  FMC_ReadDID PROC
;;;187      */
;;;188    uint32_t FMC_ReadDID(void)  
0000d8  4836              LDR      r0,|L1.436|
;;;189    {
;;;190        FMC->ISPCMD = FMC_ISPCMD_READ_DID;
0000da  210c              MOVS     r1,#0xc
0000dc  60c1              STR      r1,[r0,#0xc]
;;;191        FMC->ISPADR = 0;
0000de  2100              MOVS     r1,#0
0000e0  6041              STR      r1,[r0,#4]
;;;192        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
0000e2  2101              MOVS     r1,#1
0000e4  6101              STR      r1,[r0,#0x10]
                  |L1.230|
;;;193        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
0000e6  6901              LDR      r1,[r0,#0x10]
0000e8  07c9              LSLS     r1,r1,#31
0000ea  d1fc              BNE      |L1.230|
;;;194        return FMC->ISPDAT; 
0000ec  6880              LDR      r0,[r0,#8]
;;;195    }
0000ee  4770              BX       lr
;;;196    
                          ENDP

                  FMC_ReadPID PROC
;;;201      */
;;;202    uint32_t FMC_ReadPID(void)  
0000f0  4830              LDR      r0,|L1.436|
;;;203    {
;;;204        FMC->ISPCMD = FMC_ISPCMD_READ_DID;
0000f2  210c              MOVS     r1,#0xc
0000f4  60c1              STR      r1,[r0,#0xc]
;;;205        FMC->ISPADR = 0x04;
0000f6  2104              MOVS     r1,#4
0000f8  6041              STR      r1,[r0,#4]
;;;206        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
0000fa  2101              MOVS     r1,#1
0000fc  6101              STR      r1,[r0,#0x10]
                  |L1.254|
;;;207        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
0000fe  6901              LDR      r1,[r0,#0x10]
000100  07c9              LSLS     r1,r1,#31
000102  d1fc              BNE      |L1.254|
;;;208        return FMC->ISPDAT; 
000104  6880              LDR      r0,[r0,#8]
;;;209    }
000106  4770              BX       lr
;;;210    
                          ENDP

                  FMC_ReadUCID PROC
;;;216      */
;;;217    uint32_t FMC_ReadUCID(uint32_t u32Index)
000108  492a              LDR      r1,|L1.436|
;;;218    {
;;;219        FMC->ISPCMD = FMC_ISPCMD_READ_UID;
00010a  2204              MOVS     r2,#4
00010c  60ca              STR      r2,[r1,#0xc]
;;;220        FMC->ISPADR = (0x04 * u32Index) + 0x10;
00010e  0080              LSLS     r0,r0,#2
000110  3010              ADDS     r0,r0,#0x10
000112  6048              STR      r0,[r1,#4]
;;;221        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
000114  2001              MOVS     r0,#1
000116  6108              STR      r0,[r1,#0x10]
                  |L1.280|
;;;222        
;;;223        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
000118  6908              LDR      r0,[r1,#0x10]
00011a  07c0              LSLS     r0,r0,#31
00011c  d1fc              BNE      |L1.280|
;;;224    
;;;225        return FMC->ISPDAT; 
00011e  6888              LDR      r0,[r1,#8]
;;;226    }
000120  4770              BX       lr
;;;227    
                          ENDP

                  FMC_ReadUID PROC
;;;233      */
;;;234    uint32_t FMC_ReadUID(uint32_t u32Index)
000122  4924              LDR      r1,|L1.436|
;;;235    {
;;;236        FMC->ISPCMD = FMC_ISPCMD_READ_UID;
000124  2204              MOVS     r2,#4
000126  60ca              STR      r2,[r1,#0xc]
;;;237        FMC->ISPADR = 0x04 * u32Index;
000128  0080              LSLS     r0,r0,#2
00012a  6048              STR      r0,[r1,#4]
;;;238        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
00012c  2001              MOVS     r0,#1
00012e  6108              STR      r0,[r1,#0x10]
                  |L1.304|
;;;239        
;;;240        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
000130  6908              LDR      r0,[r1,#0x10]
000132  07c0              LSLS     r0,r0,#31
000134  d1fc              BNE      |L1.304|
;;;241    
;;;242        return FMC->ISPDAT; 
000136  6888              LDR      r0,[r1,#8]
;;;243    }
000138  4770              BX       lr
;;;244    
                          ENDP

                  FMC_ReadDataFlashBaseAddr PROC
;;;249      */
;;;250    uint32_t FMC_ReadDataFlashBaseAddr(void)
00013a  481e              LDR      r0,|L1.436|
;;;251    {
;;;252        return FMC->DFBADR; 
00013c  6940              LDR      r0,[r0,#0x14]
;;;253    }
00013e  4770              BX       lr
;;;254    
                          ENDP

                  FMC_SetVectorPageAddr PROC
;;;259      */
;;;260    void FMC_SetVectorPageAddr(uint32_t u32PageAddr)
000140  491c              LDR      r1,|L1.436|
;;;261    {
;;;262        FMC->ISPCMD = FMC_ISPCMD_VECMAP;
000142  222e              MOVS     r2,#0x2e
000144  60ca              STR      r2,[r1,#0xc]
;;;263        FMC->ISPADR = u32PageAddr;
000146  6048              STR      r0,[r1,#4]
;;;264        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
000148  2001              MOVS     r0,#1
00014a  6108              STR      r0,[r1,#0x10]
                  |L1.332|
;;;265        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
00014c  6908              LDR      r0,[r1,#0x10]
00014e  07c0              LSLS     r0,r0,#31
000150  d1fc              BNE      |L1.332|
;;;266    }
000152  4770              BX       lr
;;;267    
                          ENDP

                  FMC_Write PROC
;;;273      */
;;;274    void FMC_Write(uint32_t u32Addr, uint32_t u32Data)
000154  4a17              LDR      r2,|L1.436|
;;;275    {
;;;276        FMC->ISPCMD = FMC_ISPCMD_PROGRAM;
000156  2321              MOVS     r3,#0x21
000158  60d3              STR      r3,[r2,#0xc]
;;;277        FMC->ISPADR = u32Addr;
00015a  6050              STR      r0,[r2,#4]
;;;278        FMC->ISPDAT = u32Data;
00015c  6091              STR      r1,[r2,#8]
;;;279        FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 
00015e  2001              MOVS     r0,#1
000160  6110              STR      r0,[r2,#0x10]
                  |L1.354|
;;;280        while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ;
000162  6910              LDR      r0,[r2,#0x10]
000164  07c0              LSLS     r0,r0,#31
000166  d1fc              BNE      |L1.354|
;;;281    }
000168  4770              BX       lr
;;;282    
                          ENDP

                  FMC_ReadConfig PROC
;;;290      */
;;;291    int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count)
00016a  b510              PUSH     {r4,lr}
;;;292    { 
00016c  4603              MOV      r3,r0
;;;293        u32Config[0] = FMC_Read(FMC_CONFIG_BASE);
00016e  2003              MOVS     r0,#3
000170  460c              MOV      r4,r1                 ;292
000172  0500              LSLS     r0,r0,#20
000174  f7fffffe          BL       FMC_Read
;;;294        if (u32Count < 2)
000178  6018              STR      r0,[r3,#0]
00017a  2c02              CMP      r4,#2
00017c  d303              BCC      |L1.390|
;;;295            return 0;
;;;296        u32Config[1] = FMC_Read(FMC_CONFIG_BASE+4);
00017e  480e              LDR      r0,|L1.440|
000180  f7fffffe          BL       FMC_Read
000184  6058              STR      r0,[r3,#4]
                  |L1.390|
000186  2000              MOVS     r0,#0                 ;295
;;;297        return 0;
;;;298    }
000188  bd10              POP      {r4,pc}
;;;299    
                          ENDP

                  FMC_WriteConfig PROC
;;;307      */
;;;308    int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count)
00018a  b510              PUSH     {r4,lr}
;;;309    {       
00018c  4604              MOV      r4,r0
;;;310        FMC_EnableConfigUpdate();   
00018e  f7fffffe          BL       FMC_EnableConfigUpdate
;;;311        FMC_Erase(FMC_CONFIG_BASE);
000192  2303              MOVS     r3,#3
000194  051b              LSLS     r3,r3,#20
000196  4618              MOV      r0,r3
000198  f7fffffe          BL       FMC_Erase
;;;312        FMC_Write(FMC_CONFIG_BASE, u32Config[0]);
00019c  4618              MOV      r0,r3
00019e  6821              LDR      r1,[r4,#0]
0001a0  f7fffffe          BL       FMC_Write
;;;313        FMC_Write(FMC_CONFIG_BASE+4, u32Config[1]);
0001a4  4804              LDR      r0,|L1.440|
0001a6  6861              LDR      r1,[r4,#4]
0001a8  f7fffffe          BL       FMC_Write
;;;314        FMC_DisableConfigUpdate();
0001ac  f7fffffe          BL       FMC_DisableConfigUpdate
;;;315        return 0;
0001b0  2000              MOVS     r0,#0
;;;316    }
0001b2  bd10              POP      {r4,pc}
;;;317    
                          ENDP

                  |L1.436|
                          DCD      0x5000c000
                  |L1.440|
                          DCD      0x00300004

;*** Start embedded assembler ***

#line 1 "StdDriver\\src\\fmc.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___5_fmc_c_15679c7a____REV16|
#line 118 ".\\CMSIS\\core_cmInstr.h"
|__asm___5_fmc_c_15679c7a____REV16| PROC
#line 119

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___5_fmc_c_15679c7a____REVSH|
#line 132
|__asm___5_fmc_c_15679c7a____REVSH| PROC
#line 133

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
