; 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\fmc.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\fmc.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\fmc.crf ..\..\..\Library\StdDriver\src\fmc.c] THUMB AREA ||i.FMC_Close||, CODE, READONLY, ALIGN=2 FMC_Close PROC ;;;35 */ ;;;36 void FMC_Close(void) 000000 4802 LDR r0,|L1.12| ;;;37 { ;;;38 FMC->ISPCTL &= ~FMC_ISPCTL_ISPEN_Msk; 000002 6801 LDR r1,[r0,#0] 000004 0849 LSRS r1,r1,#1 000006 0049 LSLS r1,r1,#1 000008 6001 STR r1,[r0,#0] ;;;39 } 00000a 4770 BX lr ;;;40 ENDP |L1.12| DCD 0x5000c000 AREA ||i.FMC_Erase||, CODE, READONLY, ALIGN=2 FMC_Erase PROC ;;;47 */ ;;;48 int32_t FMC_Erase(uint32_t u32PageAddr) 000000 490a LDR r1,|L2.44| ;;;49 { ;;;50 FMC->ISPCMD = FMC_ISPCMD_PAGE_ERASE; 000002 2222 MOVS r2,#0x22 000004 60ca STR r2,[r1,#0xc] ;;;51 FMC->ISPADDR = u32PageAddr; 000006 6048 STR r0,[r1,#4] ;;;52 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 000008 2001 MOVS r0,#1 00000a 6108 STR r0,[r1,#0x10] |L2.12| ;;;53 ;;;54 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00000c 6908 LDR r0,[r1,#0x10] 00000e 07c0 LSLS r0,r0,#31 000010 d1fc BNE |L2.12| ;;;55 ;;;56 if (FMC->ISPCTL & FMC_ISPCTL_ISPFF_Msk) { 000012 6808 LDR r0,[r1,#0] 000014 0640 LSLS r0,r0,#25 000016 d506 BPL |L2.38| ;;;57 FMC->ISPCTL |= FMC_ISPCTL_ISPFF_Msk; 000018 6808 LDR r0,[r1,#0] 00001a 2240 MOVS r2,#0x40 00001c 4310 ORRS r0,r0,r2 00001e 6008 STR r0,[r1,#0] ;;;58 return -1; 000020 2000 MOVS r0,#0 000022 43c0 MVNS r0,r0 ;;;59 } ;;;60 return 0; ;;;61 } 000024 4770 BX lr |L2.38| 000026 2000 MOVS r0,#0 ;60 000028 4770 BX lr ;;;62 ENDP 00002a 0000 DCW 0x0000 |L2.44| DCD 0x5000c000 AREA ||i.FMC_GetBootSource||, CODE, READONLY, ALIGN=2 FMC_GetBootSource PROC ;;;68 */ ;;;69 int32_t FMC_GetBootSource (void) 000000 4803 LDR r0,|L3.16| ;;;70 { ;;;71 if (FMC->ISPCTL & FMC_ISPCTL_BS_Msk) 000002 6800 LDR r0,[r0,#0] 000004 0780 LSLS r0,r0,#30 000006 d501 BPL |L3.12| ;;;72 return 1; 000008 2001 MOVS r0,#1 ;;;73 else ;;;74 return 0; ;;;75 } 00000a 4770 BX lr |L3.12| 00000c 2000 MOVS r0,#0 ;74 00000e 4770 BX lr ;;;76 ENDP |L3.16| DCD 0x5000c000 AREA ||i.FMC_GetCRC32Sum||, CODE, READONLY, ALIGN=2 FMC_GetCRC32Sum PROC ;;;270 */ ;;;271 int32_t FMC_GetCRC32Sum(uint32_t addr, uint32_t count, uint32_t *chksum) 000000 b570 PUSH {r4-r6,lr} ;;;272 { ;;;273 FMC->ISPCMD = FMC_ISPCMD_CAL_CRC32; 000002 4b12 LDR r3,|L4.76| 000004 242d MOVS r4,#0x2d 000006 60dc STR r4,[r3,#0xc] ;;;274 FMC->ISPADDR = addr; 000008 6058 STR r0,[r3,#4] ;;;275 FMC->ISPDAT = count; 00000a 6099 STR r1,[r3,#8] ;;;276 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 00000c 2401 MOVS r4,#1 00000e 611c STR r4,[r3,#0x10] |L4.16| ;;;277 ;;;278 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 000010 6919 LDR r1,[r3,#0x10] 000012 07c9 LSLS r1,r1,#31 000014 d1fc BNE |L4.16| ;;;279 ;;;280 if (FMC->ISPCTL & FMC_ISPCTL_ISPFF_Msk) { 000016 6819 LDR r1,[r3,#0] ;;;281 FMC->ISPCTL |= FMC_ISPCTL_ISPFF_Msk; ;;;282 return -1; 000018 2500 MOVS r5,#0 00001a 064e LSLS r6,r1,#25 ;280 00001c 2140 MOVS r1,#0x40 ;281 00001e 43ed MVNS r5,r5 000020 2e00 CMP r6,#0 ;280 000022 db09 BLT |L4.56| ;;;283 } ;;;284 ;;;285 FMC->ISPCMD = FMC_ISPCMD_READ_CRC32; 000024 260d MOVS r6,#0xd 000026 60de STR r6,[r3,#0xc] ;;;286 FMC->ISPADDR = addr; 000028 6058 STR r0,[r3,#4] ;;;287 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 00002a 611c STR r4,[r3,#0x10] |L4.44| ;;;288 ;;;289 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00002c 6918 LDR r0,[r3,#0x10] 00002e 07c0 LSLS r0,r0,#31 000030 d1fc BNE |L4.44| ;;;290 ;;;291 if (FMC->ISPCTL & FMC_ISPCTL_ISPFF_Msk) { 000032 6818 LDR r0,[r3,#0] 000034 0640 LSLS r0,r0,#25 000036 d504 BPL |L4.66| |L4.56| ;;;292 FMC->ISPCTL |= FMC_ISPCTL_ISPFF_Msk; 000038 6818 LDR r0,[r3,#0] 00003a 4308 ORRS r0,r0,r1 00003c 6018 STR r0,[r3,#0] ;;;293 return -1; 00003e 4628 MOV r0,r5 ;;;294 } ;;;295 ;;;296 *chksum = FMC->ISPDAT; ;;;297 ;;;298 return 0; ;;;299 } 000040 bd70 POP {r4-r6,pc} |L4.66| 000042 6898 LDR r0,[r3,#8] ;296 000044 6010 STR r0,[r2,#0] ;298 000046 2000 MOVS r0,#0 ;298 000048 bd70 POP {r4-r6,pc} ;;;300 ENDP 00004a 0000 DCW 0x0000 |L4.76| DCD 0x5000c000 AREA ||i.FMC_GetVectorPageAddr||, CODE, READONLY, ALIGN=2 FMC_GetVectorPageAddr PROC ;;;193 */ ;;;194 uint32_t FMC_GetVectorPageAddr(void) 000000 4802 LDR r0,|L5.12| ;;;195 { ;;;196 return (FMC->ISPSTS & 0x0FFFFF00ul); 000002 6800 LDR r0,[r0,#0] 000004 4902 LDR r1,|L5.16| 000006 4008 ANDS r0,r0,r1 ;;;197 } 000008 4770 BX lr ;;;198 ENDP 00000a 0000 DCW 0x0000 |L5.12| DCD 0x5000c040 |L5.16| DCD 0x0fffff00 AREA ||i.FMC_Open||, CODE, READONLY, ALIGN=2 FMC_Open PROC ;;;80 */ ;;;81 void FMC_Open(void) 000000 4802 LDR r0,|L6.12| ;;;82 { ;;;83 FMC->ISPCTL |= FMC_ISPCTL_ISPEN_Msk; 000002 6801 LDR r1,[r0,#0] 000004 2201 MOVS r2,#1 000006 4311 ORRS r1,r1,r2 000008 6001 STR r1,[r0,#0] ;;;84 } 00000a 4770 BX lr ;;;85 ENDP |L6.12| DCD 0x5000c000 AREA ||i.FMC_Read||, CODE, READONLY, ALIGN=2 FMC_Read PROC ;;;91 */ ;;;92 uint32_t FMC_Read(uint32_t u32Addr) 000000 4905 LDR r1,|L7.24| ;;;93 { ;;;94 FMC->ISPCMD = FMC_ISPCMD_READ; 000002 2200 MOVS r2,#0 000004 60ca STR r2,[r1,#0xc] ;;;95 FMC->ISPADDR = u32Addr; 000006 6048 STR r0,[r1,#4] ;;;96 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 000008 2001 MOVS r0,#1 00000a 6108 STR r0,[r1,#0x10] |L7.12| ;;;97 ;;;98 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00000c 6908 LDR r0,[r1,#0x10] 00000e 07c0 LSLS r0,r0,#31 000010 d1fc BNE |L7.12| ;;;99 ;;;100 return FMC->ISPDAT; 000012 6888 LDR r0,[r1,#8] ;;;101 } 000014 4770 BX lr ;;;102 ENDP 000016 0000 DCW 0x0000 |L7.24| DCD 0x5000c000 AREA ||i.FMC_ReadCID||, CODE, READONLY, ALIGN=2 FMC_ReadCID PROC ;;;107 */ ;;;108 uint32_t FMC_ReadCID(void) 000000 4805 LDR r0,|L8.24| ;;;109 { ;;;110 FMC->ISPCMD = FMC_ISPCMD_READ_CID; 000002 210b MOVS r1,#0xb 000004 60c1 STR r1,[r0,#0xc] ;;;111 FMC->ISPADDR = 0x0; 000006 2100 MOVS r1,#0 000008 6041 STR r1,[r0,#4] ;;;112 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 00000a 2101 MOVS r1,#1 00000c 6101 STR r1,[r0,#0x10] |L8.14| ;;;113 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00000e 6901 LDR r1,[r0,#0x10] 000010 07c9 LSLS r1,r1,#31 000012 d1fc BNE |L8.14| ;;;114 return FMC->ISPDAT; 000014 6880 LDR r0,[r0,#8] ;;;115 } 000016 4770 BX lr ;;;116 ENDP |L8.24| DCD 0x5000c000 AREA ||i.FMC_ReadConfig||, CODE, READONLY, ALIGN=2 FMC_ReadConfig PROC ;;;223 */ ;;;224 int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count) 000000 b510 PUSH {r4,lr} ;;;225 { 000002 000b MOVS r3,r1 000004 4604 MOV r4,r0 000006 d00a BEQ |L9.30| ;;;226 if (u32Count < 1) ;;;227 return 0; ;;;228 ;;;229 u32Config[0] = FMC_Read(FMC_CONFIG_BASE); 000008 2003 MOVS r0,#3 00000a 0500 LSLS r0,r0,#20 00000c f7fffffe BL FMC_Read ;;;230 if (u32Count < 2) 000010 6020 STR r0,[r4,#0] 000012 2b02 CMP r3,#2 000014 d303 BCC |L9.30| ;;;231 return 0; ;;;232 ;;;233 u32Config[1] = FMC_Read(FMC_CONFIG_BASE+4); 000016 4803 LDR r0,|L9.36| 000018 f7fffffe BL FMC_Read 00001c 6060 STR r0,[r4,#4] |L9.30| 00001e 2000 MOVS r0,#0 ;231 ;;;234 return 0; ;;;235 } 000020 bd10 POP {r4,pc} ;;;236 ENDP 000022 0000 DCW 0x0000 |L9.36| DCD 0x00300004 AREA ||i.FMC_ReadDataFlashBaseAddr||, CODE, READONLY, ALIGN=2 FMC_ReadDataFlashBaseAddr PROC ;;;169 */ ;;;170 uint32_t FMC_ReadDataFlashBaseAddr(void) 000000 4801 LDR r0,|L10.8| ;;;171 { ;;;172 return FMC->DFBA; 000002 6940 LDR r0,[r0,#0x14] ;;;173 } 000004 4770 BX lr ;;;174 ENDP 000006 0000 DCW 0x0000 |L10.8| DCD 0x5000c000 AREA ||i.FMC_ReadPID||, CODE, READONLY, ALIGN=2 FMC_ReadPID PROC ;;;121 */ ;;;122 uint32_t FMC_ReadPID(void) 000000 4805 LDR r0,|L11.24| ;;;123 { ;;;124 FMC->ISPCMD = FMC_ISPCMD_READ_PID; 000002 210c MOVS r1,#0xc 000004 60c1 STR r1,[r0,#0xc] ;;;125 FMC->ISPADDR = 0x04; 000006 2104 MOVS r1,#4 000008 6041 STR r1,[r0,#4] ;;;126 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 00000a 2101 MOVS r1,#1 00000c 6101 STR r1,[r0,#0x10] |L11.14| ;;;127 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00000e 6901 LDR r1,[r0,#0x10] 000010 07c9 LSLS r1,r1,#31 000012 d1fc BNE |L11.14| ;;;128 return FMC->ISPDAT; 000014 6880 LDR r0,[r0,#8] ;;;129 } 000016 4770 BX lr ;;;130 ENDP |L11.24| DCD 0x5000c000 AREA ||i.FMC_ReadUCID||, CODE, READONLY, ALIGN=2 FMC_ReadUCID PROC ;;;136 */ ;;;137 uint32_t FMC_ReadUCID(uint32_t u32Index) 000000 4906 LDR r1,|L12.28| ;;;138 { ;;;139 FMC->ISPCMD = FMC_ISPCMD_READ_UID; 000002 2204 MOVS r2,#4 000004 60ca STR r2,[r1,#0xc] ;;;140 FMC->ISPADDR = (0x04 * u32Index) + 0x10; 000006 0080 LSLS r0,r0,#2 000008 3010 ADDS r0,r0,#0x10 00000a 6048 STR r0,[r1,#4] ;;;141 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 00000c 2001 MOVS r0,#1 00000e 6108 STR r0,[r1,#0x10] |L12.16| ;;;142 ;;;143 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 000010 6908 LDR r0,[r1,#0x10] 000012 07c0 LSLS r0,r0,#31 000014 d1fc BNE |L12.16| ;;;144 ;;;145 return FMC->ISPDAT; 000016 6888 LDR r0,[r1,#8] ;;;146 } 000018 4770 BX lr ;;;147 ENDP 00001a 0000 DCW 0x0000 |L12.28| DCD 0x5000c000 AREA ||i.FMC_ReadUID||, CODE, READONLY, ALIGN=2 FMC_ReadUID PROC ;;;153 */ ;;;154 uint32_t FMC_ReadUID(uint32_t u32Index) 000000 4905 LDR r1,|L13.24| ;;;155 { ;;;156 FMC->ISPCMD = FMC_ISPCMD_READ_UID; 000002 2204 MOVS r2,#4 000004 60ca STR r2,[r1,#0xc] ;;;157 FMC->ISPADDR = 0x04 * u32Index; 000006 0080 LSLS r0,r0,#2 000008 6048 STR r0,[r1,#4] ;;;158 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 00000a 2001 MOVS r0,#1 00000c 6108 STR r0,[r1,#0x10] |L13.14| ;;;159 ;;;160 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00000e 6908 LDR r0,[r1,#0x10] 000010 07c0 LSLS r0,r0,#31 000012 d1fc BNE |L13.14| ;;;161 ;;;162 return FMC->ISPDAT; 000014 6888 LDR r0,[r1,#8] ;;;163 } 000016 4770 BX lr ;;;164 ENDP |L13.24| DCD 0x5000c000 AREA ||i.FMC_SetVectorPageAddr||, CODE, READONLY, ALIGN=2 FMC_SetVectorPageAddr PROC ;;;180 */ ;;;181 void FMC_SetVectorPageAddr(uint32_t u32PageAddr) 000000 4904 LDR r1,|L14.20| ;;;182 { ;;;183 FMC->ISPCMD = FMC_ISPCMD_VECMAP; 000002 222e MOVS r2,#0x2e 000004 60ca STR r2,[r1,#0xc] ;;;184 FMC->ISPADDR = u32PageAddr; 000006 6048 STR r0,[r1,#4] ;;;185 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 000008 2001 MOVS r0,#1 00000a 6108 STR r0,[r1,#0x10] |L14.12| ;;;186 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00000c 6908 LDR r0,[r1,#0x10] 00000e 07c0 LSLS r0,r0,#31 000010 d1fc BNE |L14.12| ;;;187 } 000012 4770 BX lr ;;;188 ENDP |L14.20| DCD 0x5000c000 AREA ||i.FMC_Write||, CODE, READONLY, ALIGN=2 FMC_Write PROC ;;;206 */ ;;;207 void FMC_Write(uint32_t u32Addr, uint32_t u32Data) 000000 4a05 LDR r2,|L15.24| ;;;208 { ;;;209 FMC->ISPCMD = FMC_ISPCMD_PROGRAM; 000002 2321 MOVS r3,#0x21 000004 60d3 STR r3,[r2,#0xc] ;;;210 FMC->ISPADDR = u32Addr; 000006 6050 STR r0,[r2,#4] ;;;211 FMC->ISPDAT = u32Data; 000008 6091 STR r1,[r2,#8] ;;;212 FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; 00000a 2001 MOVS r0,#1 00000c 6110 STR r0,[r2,#0x10] |L15.14| ;;;213 while (FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; 00000e 6910 LDR r0,[r2,#0x10] 000010 07c0 LSLS r0,r0,#31 000012 d1fc BNE |L15.14| ;;;214 } 000014 4770 BX lr ;;;215 ENDP 000016 0000 DCW 0x0000 |L15.24| DCD 0x5000c000 AREA ||i.FMC_WriteConfig||, CODE, READONLY, ALIGN=2 FMC_WriteConfig PROC ;;;244 */ ;;;245 int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count) 000000 b5f0 PUSH {r4-r7,lr} ;;;246 { 000002 000d MOVS r5,r1 000004 4606 MOV r6,r0 000006 d015 BEQ |L16.52| ;;;247 if (u32Count < 1) ;;;248 return 0; ;;;249 ;;;250 FMC_ENABLE_CFG_UPDATE(); 000008 4c0b LDR r4,|L16.56| 00000a 6820 LDR r0,[r4,#0] 00000c 2710 MOVS r7,#0x10 00000e 4338 ORRS r0,r0,r7 000010 6020 STR r0,[r4,#0] ;;;251 FMC_Erase(FMC_CONFIG_BASE); 000012 01a3 LSLS r3,r4,#6 000014 4618 MOV r0,r3 000016 f7fffffe BL FMC_Erase ;;;252 FMC_Write(FMC_CONFIG_BASE, u32Config[0]); 00001a 4618 MOV r0,r3 00001c 6831 LDR r1,[r6,#0] 00001e f7fffffe BL FMC_Write ;;;253 ;;;254 if (u32Count < 2) 000022 2d02 CMP r5,#2 000024 d306 BCC |L16.52| ;;;255 return 0; ;;;256 ;;;257 FMC_Write(FMC_CONFIG_BASE+4, u32Config[1]); 000026 4805 LDR r0,|L16.60| 000028 6871 LDR r1,[r6,#4] 00002a f7fffffe BL FMC_Write ;;;258 FMC_DISABLE_CFG_UPDATE(); 00002e 6820 LDR r0,[r4,#0] 000030 43b8 BICS r0,r0,r7 000032 6020 STR r0,[r4,#0] |L16.52| 000034 2000 MOVS r0,#0 ;255 ;;;259 return 0; ;;;260 } 000036 bdf0 POP {r4-r7,pc} ;;;261 ENDP |L16.56| DCD 0x5000c000 |L16.60| DCD 0x00300004 ;*** Start embedded assembler *** #line 1 "..\\..\\..\\Library\\StdDriver\\src\\fmc.c" AREA ||.rev16_text||, CODE THUMB EXPORT |__asm___5_fmc_c_65c03504____REV16| #line 388 "..\\..\\..\\Library\\CMSIS\\Include\\cmsis_armcc.h" |__asm___5_fmc_c_65c03504____REV16| PROC #line 389 rev16 r0, r0 bx lr ENDP AREA ||.revsh_text||, CODE THUMB EXPORT |__asm___5_fmc_c_65c03504____REVSH| #line 402 |__asm___5_fmc_c_65c03504____REVSH| PROC #line 403 revsh r0, r0 bx lr ENDP ;*** End embedded assembler ***