?? stm32f10x_flash.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\stm32f10x_flash.o --depend=.\rvmdk\stm32f10x_flash.d --device=DARMSTM -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -ID:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\CPU\ST\STM32\src\stm32f10x_flash.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
FLASH_SetLatency PROC
;;;93 /* Sets the Latency value */
;;;94 FLASH->ACR &= ACR_LATENCY_Mask;
000000 49fc LDR r1,|L1.1012|
000002 680a LDR r2,[r1,#0]
000004 f002f002 AND r2,r2,#0x38
000008 600a STR r2,[r1,#0]
;;;95 FLASH->ACR |= FLASH_Latency;
00000a 680a LDR r2,[r1,#0]
00000c 4310 ORRS r0,r0,r2
00000e 6008 STR r0,[r1,#0]
;;;96 }
000010 4770 BX lr
;;;97
ENDP
FLASH_HalfCycleAccessCmd PROC
;;;113 /* Enable or disable the Half cycle access */
;;;114 FLASH->ACR &= ACR_HLFCYA_Mask;
000012 49f8 LDR r1,|L1.1012|
000014 680a LDR r2,[r1,#0]
000016 f022f022 BIC r2,r2,#8
00001a 600a STR r2,[r1,#0]
;;;115 FLASH->ACR |= FLASH_HalfCycleAccess;
00001c 680a LDR r2,[r1,#0]
00001e 4310 ORRS r0,r0,r2
000020 6008 STR r0,[r1,#0]
;;;116 }
000022 4770 BX lr
;;;117
ENDP
FLASH_PrefetchBufferCmd PROC
;;;133 /* Enable or disable the Prefetch Buffer */
;;;134 FLASH->ACR &= ACR_PRFTBE_Mask;
000024 49f3 LDR r1,|L1.1012|
000026 680a LDR r2,[r1,#0]
000028 f022f022 BIC r2,r2,#0x10
00002c 600a STR r2,[r1,#0]
;;;135 FLASH->ACR |= FLASH_PrefetchBuffer;
00002e 680a LDR r2,[r1,#0]
000030 4310 ORRS r0,r0,r2
000032 6008 STR r0,[r1,#0]
;;;136 }
000034 4770 BX lr
;;;137
ENDP
FLASH_Unlock PROC
;;;148 /* Authorize the FPEC Access */
;;;149 FLASH->KEYR = FLASH_KEY1;
000036 48ef LDR r0,|L1.1012|
000038 49ef LDR r1,|L1.1016|
00003a 6041 STR r1,[r0,#4]
;;;150 FLASH->KEYR = FLASH_KEY2;
00003c 49ef LDR r1,|L1.1020|
00003e 6041 STR r1,[r0,#4]
;;;151 }
000040 4770 BX lr
;;;152
ENDP
FLASH_Lock PROC
;;;162 /* Set the Lock Bit to lock the FPEC and the FCR */
;;;163 FLASH->CR |= CR_LOCK_Set;
000042 48ec LDR r0,|L1.1012|
000044 6901 LDR r1,[r0,#0x10]
000046 f041f041 ORR r1,r1,#0x80
00004a 6101 STR r1,[r0,#0x10]
;;;164 }
00004c 4770 BX lr
;;;165
ENDP
FLASH_GetStatus PROC
;;;827 {
;;;828 FLASH_Status flashstatus = FLASH_COMPLETE;
00004e 2004 MOVS r0,#4
;;;829
;;;830 if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY)
000050 49e8 LDR r1,|L1.1012|
000052 68ca LDR r2,[r1,#0xc]
000054 f012f012 TST r2,#1
000058 d001 BEQ |L1.94|
;;;831 {
;;;832 flashstatus = FLASH_BUSY;
00005a 2001 MOVS r0,#1
;;;833 }
;;;834 else
;;;835 {
;;;836 if(FLASH->SR & FLASH_FLAG_PGERR)
;;;837 {
;;;838 flashstatus = FLASH_ERROR_PG;
;;;839 }
;;;840 else
;;;841 {
;;;842 if(FLASH->SR & FLASH_FLAG_WRPRTERR)
;;;843 {
;;;844 flashstatus = FLASH_ERROR_WRP;
;;;845 }
;;;846 else
;;;847 {
;;;848 flashstatus = FLASH_COMPLETE;
;;;849 }
;;;850 }
;;;851 }
;;;852 /* Return the Flash Status */
;;;853 return flashstatus;
;;;854 }
00005c 4770 BX lr
|L1.94|
00005e 68ca LDR r2,[r1,#0xc]
000060 f012f012 TST r2,#4
000064 d001 BEQ |L1.106|
000066 2002 MOVS r0,#2
|L1.104|
000068 4770 BX lr
|L1.106|
00006a 68c9 LDR r1,[r1,#0xc]
00006c f011f011 TST r1,#0x10
000070 d0fa BEQ |L1.104|
000072 2003 MOVS r0,#3
000074 4770 BX lr
;;;855
ENDP
delay PROC
;;;899
;;;900 for(i = 0xFF; i != 0; i--)
000076 20ff MOVS r0,#0xff
|L1.120|
000078 1e40 SUBS r0,r0,#1
00007a 2800 CMP r0,#0
00007c d1fc BNE |L1.120|
;;;901 {
;;;902 }
;;;903 }
00007e 4770 BX lr
;;;904 #endif
ENDP
FLASH_WaitForLastOperation PROC
;;;865 FLASH_Status FLASH_WaitForLastOperation(u32 Timeout)
;;;866 {
000080 b500 PUSH {lr}
000082 4603 MOV r3,r0
;;;867 FLASH_Status status = FLASH_COMPLETE;
;;;868
;;;869 /* Check for the Flash Status */
;;;870 status = FLASH_GetStatus();
000084 f7fff7ff BL FLASH_GetStatus
;;;871
;;;872 /* Wait for a Flash operation to complete or a TIMEOUT to occur */
;;;873 while((status == FLASH_BUSY) && (Timeout != 0x00))
000088 e004 B |L1.148|
|L1.138|
;;;874 {
;;;875 delay();
00008a f7fff7ff BL delay
;;;876 status = FLASH_GetStatus();
00008e f7fff7ff BL FLASH_GetStatus
;;;877 Timeout--;
000092 1e5b SUBS r3,r3,#1
|L1.148|
000094 2801 CMP r0,#1
000096 d101 BNE |L1.156|
000098 2b00 CMP r3,#0
00009a d1f6 BNE |L1.138|
|L1.156|
;;;878 }
;;;879
;;;880 if(Timeout == 0x00 )
00009c 2b00 CMP r3,#0
00009e d100 BNE |L1.162|
;;;881 {
;;;882 status = FLASH_TIMEOUT;
0000a0 2005 MOVS r0,#5
|L1.162|
;;;883 }
;;;884
;;;885 /* Return the operation status */
;;;886 return status;
;;;887 }
0000a2 bd00 POP {pc}
;;;888
ENDP
FLASH_ErasePage PROC
;;;175 FLASH_Status FLASH_ErasePage(u32 Page_Address)
;;;176 {
0000a4 b530 PUSH {r4,r5,lr}
0000a6 4605 MOV r5,r0
;;;177 FLASH_Status status = FLASH_COMPLETE;
;;;178
;;;179 /* Check the parameters */
;;;180 assert(IS_FLASH_ADDRESS(Page_Address));
;;;181
;;;182 /* Wait for last operation to be completed */
;;;183 status = FLASH_WaitForLastOperation(EraseTimeout);
0000a8 f640f640 MOV r0,#0xfff
0000ac f7fff7ff BL FLASH_WaitForLastOperation
;;;184
;;;185 if(status == FLASH_COMPLETE)
0000b0 2804 CMP r0,#4
0000b2 d114 BNE |L1.222|
;;;186 {
;;;187 /* if the previous operation is completed, proceed to erase the page */
;;;188 FLASH->CR|= CR_PER_Set;
0000b4 4ccf LDR r4,|L1.1012|
0000b6 6920 LDR r0,[r4,#0x10]
0000b8 f040f040 ORR r0,r0,#2
0000bc 6120 STR r0,[r4,#0x10]
;;;189 FLASH->AR = Page_Address;
0000be 6165 STR r5,[r4,#0x14]
;;;190 FLASH->CR|= CR_STRT_Set;
0000c0 6920 LDR r0,[r4,#0x10]
0000c2 f040f040 ORR r0,r0,#0x40
0000c6 6120 STR r0,[r4,#0x10]
;;;191
;;;192 /* Wait for last operation to be completed */
;;;193 status = FLASH_WaitForLastOperation(EraseTimeout);
0000c8 f640f640 MOV r0,#0xfff
0000cc f7fff7ff BL FLASH_WaitForLastOperation
;;;194
;;;195 if(status != FLASH_BUSY)
0000d0 2801 CMP r0,#1
0000d2 d004 BEQ |L1.222|
;;;196 {
;;;197 /* if the erase operation is completed, disable the PER Bit */
;;;198 FLASH->CR &= CR_PER_Reset;
0000d4 6921 LDR r1,[r4,#0x10]
0000d6 f641f641 MOV r2,#0x1ffd
0000da 4011 ANDS r1,r1,r2
0000dc 6121 STR r1,[r4,#0x10]
|L1.222|
;;;199 }
;;;200 }
;;;201 /* Return the Erase Status */
;;;202 return status;
;;;203 }
0000de bd30 POP {r4,r5,pc}
;;;204
ENDP
FLASH_EraseAllPages PROC
;;;214 FLASH_Status FLASH_EraseAllPages(void)
;;;215 {
0000e0 b510 PUSH {r4,lr}
;;;216 FLASH_Status status = FLASH_COMPLETE;
;;;217
;;;218 /* Wait for last operation to be completed */
;;;219 status = FLASH_WaitForLastOperation(EraseTimeout);
0000e2 f640f640 MOV r0,#0xfff
0000e6 f7fff7ff BL FLASH_WaitForLastOperation
;;;220
;;;221 if(status == FLASH_COMPLETE)
0000ea 2804 CMP r0,#4
0000ec d113 BNE |L1.278|
;;;222 {
;;;223 /* if the previous operation is completed, proceed to erase all pages */
;;;224 FLASH->CR |= CR_MER_Set;
0000ee 4cc1 LDR r4,|L1.1012|
0000f0 6920 LDR r0,[r4,#0x10]
0000f2 f040f040 ORR r0,r0,#4
0000f6 6120 STR r0,[r4,#0x10]
;;;225 FLASH->CR |= CR_STRT_Set;
0000f8 6920 LDR r0,[r4,#0x10]
0000fa f040f040 ORR r0,r0,#0x40
0000fe 6120 STR r0,[r4,#0x10]
;;;226
;;;227 /* Wait for last operation to be completed */
;;;228 status = FLASH_WaitForLastOperation(EraseTimeout);
000100 f640f640 MOV r0,#0xfff
000104 f7fff7ff BL FLASH_WaitForLastOperation
;;;229
;;;230 if(status != FLASH_BUSY)
000108 2801 CMP r0,#1
00010a d004 BEQ |L1.278|
;;;231 {
;;;232 /* if the erase operation is completed, disable the MER Bit */
;;;233 FLASH->CR &= CR_MER_Reset;
00010c 6921 LDR r1,[r4,#0x10]
00010e f641f641 MOV r2,#0x1ffb
000112 4011 ANDS r1,r1,r2
000114 6121 STR r1,[r4,#0x10]
|L1.278|
;;;234 }
;;;235 }
;;;236 /* Return the Erase Status */
;;;237 return status;
;;;238 }
000116 bd10 POP {r4,pc}
;;;239
ENDP
FLASH_EraseOptionBytes PROC
;;;249 FLASH_Status FLASH_EraseOptionBytes(void)
;;;250 {
000118 b530 PUSH {r4,r5,lr}
;;;251 FLASH_Status status = FLASH_COMPLETE;
;;;252
;;;253 /* Wait for last operation to be completed */
;;;254 status = FLASH_WaitForLastOperation(EraseTimeout);
00011a f640f640 MOV r0,#0xfff
00011e f7fff7ff BL FLASH_WaitForLastOperation
;;;255
;;;256 if(status == FLASH_COMPLETE)
000122 2804 CMP r0,#4
000124 d128 BNE |L1.376|
;;;257 {
;;;258 /* Authorize the small information block programming */
;;;259 FLASH->OPTKEYR = FLASH_KEY1;
000126 4cb3 LDR r4,|L1.1012|
000128 48b3 LDR r0,|L1.1016|
00012a 60a0 STR r0,[r4,#8]
;;;260 FLASH->OPTKEYR = FLASH_KEY2;
00012c 48b3 LDR r0,|L1.1020|
00012e 60a0 STR r0,[r4,#8]
;;;261
;;;262 /* if the previous operation is completed, proceed to erase the option bytes */
;;;263 FLASH->CR |= CR_OPTER_Set;
000130 6920 LDR r0,[r4,#0x10]
000132 f040f040 ORR r0,r0,#0x20
000136 6120 STR r0,[r4,#0x10]
;;;264 FLASH->CR |= CR_STRT_Set;
000138 6920 LDR r0,[r4,#0x10]
00013a f040f040 ORR r0,r0,#0x40
00013e 6120 STR r0,[r4,#0x10]
;;;265
;;;266 /* Wait for last operation to be completed */
;;;267 status = FLASH_WaitForLastOperation(EraseTimeout);
000140 f640f640 MOV r0,#0xfff
000144 f7fff7ff BL FLASH_WaitForLastOperation
;;;268
;;;269 if(status == FLASH_COMPLETE)
000148 f641f641 MOV r5,#0x1fef
00014c 2804 CMP r0,#4
00014e d114 BNE |L1.378|
;;;270 {
;;;271 /* if the erase operation is completed, disable the OPTER Bit */
;;;272 FLASH->CR &= CR_OPTER_Reset;
000150 6920 LDR r0,[r4,#0x10]
000152 f641f641 MOV r1,#0x1fdf
000156 4008 ANDS r0,r0,r1
000158 6120 STR r0,[r4,#0x10]
;;;273
;;;274 /* Enable the Option Bytes Programming operation */
;;;275 FLASH->CR |= CR_OPTPG_Set;
00015a 6920 LDR r0,[r4,#0x10]
00015c f040f040 ORR r0,r0,#0x10
000160 6120 STR r0,[r4,#0x10]
;;;276
;;;277 /* Enable the readout access */
;;;278 OB->RDP= RDP_Key;
000162 49a7 LDR r1,|L1.1024|
000164 20a5 MOVS r0,#0xa5
000166 8008 STRH r0,[r1,#0]
;;;279
;;;280 /* Wait for last operation to be completed */
;;;281 status = FLASH_WaitForLastOperation(ProgramTimeout);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -