📄 stm32f10x_flash.lst
字号:
###############################################################################
# #
# 30/Jul/2008 14:37:39 #
# IAR ARM ANSI C/C++ Compiler V5.11.0.20622/W32 EVALUATION #
# Copyright 1999-2007 IAR Systems. All rights reserved. #
# #
# Cpu mode = thumb #
# Endian = little #
# Source file = E:\library\src\stm32f10x_flash.c #
# Command line = E:\library\src\stm32f10x_flash.c -D EMB_FLASH -lCN #
# E:\ELE\yten\pro\Debug\List\ -lb #
# E:\ELE\yten\pro\Debug\List\ -o #
# E:\ELE\yten\pro\Debug\Obj\ --no_cse --no_unroll #
# --no_inline --no_code_motion --no_tbaa --no_clustering #
# --no_scheduling --debug --endian little --cpu Cortex-M3 #
# -e --fpu None --dlib_config "C:\Program Files\IAR #
# Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\DLib_Config_Normal.h" -I #
# E:\ELE\yten\pro\ -I E:\ELE\yten\pro\..\LIBRARY\INC\ -I #
# "C:\Program Files\IAR Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\" --section .text=.XML -On #
# List file = E:\ELE\yten\pro\Debug\List\stm32f10x_flash.lst #
# Object file = E:\ELE\yten\pro\Debug\Obj\stm32f10x_flash.o #
# #
# #
###############################################################################
E:\library\src\stm32f10x_flash.c
1 /******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
2 * File Name : stm32f10x_flash.c
3 * Author : MCD Application Team
4 * Version : V1.0
5 * Date : 10/08/2007
6 * Description : This file provides all the FLASH firmware functions.
7 ********************************************************************************
8 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
12 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
14 *******************************************************************************/
15
16 /* Includes ------------------------------------------------------------------*/
17 #include "stm32f10x_flash.h"
18
19 /* Private typedef -----------------------------------------------------------*/
20 /* Private define ------------------------------------------------------------*/
21 /* Flash Access Control Register bits */
22 #define ACR_LATENCY_Mask ((u32)0x00000038)
23 #define ACR_HLFCYA_Mask ((u32)0xFFFFFFF7)
24 #define ACR_PRFTBE_Mask ((u32)0xFFFFFFEF)
25
26 #ifdef _FLASH_PROG
27 /* Flash Access Control Register bits */
28 #define ACR_PRFTBS_Mask ((u32)0x00000020)
29
30 /* Flash Control Register bits */
31 #define CR_PG_Set ((u32)0x00000001)
32 #define CR_PG_Reset ((u32)0x00001FFE)
33
34 #define CR_PER_Set ((u32)0x00000002)
35 #define CR_PER_Reset ((u32)0x00001FFD)
36
37 #define CR_MER_Set ((u32)0x00000004)
38 #define CR_MER_Reset ((u32)0x00001FFB)
39
40 #define CR_OPTPG_Set ((u32)0x00000010)
41 #define CR_OPTPG_Reset ((u32)0x00001FEF)
42
43 #define CR_OPTER_Set ((u32)0x00000020)
44 #define CR_OPTER_Reset ((u32)0x00001FDF)
45
46 #define CR_STRT_Set ((u32)0x00000040)
47
48 #define CR_LOCK_Set ((u32)0x00000080)
49
50 /* FLASH Mask */
51 #define RDPRT_Mask ((u32)0x00000002)
52 #define WRP0_Mask ((u32)0x000000FF)
53 #define WRP1_Mask ((u32)0x0000FF00)
54 #define WRP2_Mask ((u32)0x00FF0000)
55 #define WRP3_Mask ((u32)0xFF000000)
56
57 /* FLASH Keys */
58 #define RDP_Key ((u16)0x00A5)
59 #define FLASH_KEY1 ((u32)0x45670123)
60 #define FLASH_KEY2 ((u32)0xCDEF89AB)
61
62 /* Delay definition */
63 #define EraseTimeout ((u32)0x00000FFF)
64 #define ProgramTimeout ((u32)0x0000000F)
65 #endif
66
67 /* Private macro -------------------------------------------------------------*/
68 /* Private variables ---------------------------------------------------------*/
69 /* Private function prototypes -----------------------------------------------*/
70 #ifdef _FLASH_PROG
71 static void delay(void);
72 #endif
73
74 /* Private functions ---------------------------------------------------------*/
75 /*******************************************************************************
76 * Function Name : FLASH_SetLatency
77 * Description : Sets the code latency value.
78 * Input : - FLASH_Latency: specifies the FLASH Latency value.
79 * This parameter can be one of the following values:
80 * - FLASH_Latency_0: FLASH Zero Latency cycle
81 * - FLASH_Latency_1: FLASH One Latency cycle
82 * - FLASH_Latency_2: FLASH Two Latency cycles
83 * Output : None
84 * Return : None
85 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
86 void FLASH_SetLatency(u32 FLASH_Latency)
87 {
88 /* Check the parameters */
89 assert_param(IS_FLASH_LATENCY(FLASH_Latency));
90
91 /* Sets the Latency value */
92 FLASH->ACR &= ACR_LATENCY_Mask;
\ FLASH_SetLatency:
\ 00000000 .... LDR.N R1,??DataTable11 ;; 0x40022000
\ 00000002 0968 LDR R1,[R1, #+0]
\ 00000004 11F03801 ANDS R1,R1,#0x38
\ 00000008 .... LDR.N R2,??DataTable11 ;; 0x40022000
\ 0000000A 1160 STR R1,[R2, #+0]
93 FLASH->ACR |= FLASH_Latency;
\ 0000000C .... LDR.N R1,??DataTable11 ;; 0x40022000
\ 0000000E 0968 LDR R1,[R1, #+0]
\ 00000010 0143 ORRS R1,R1,R0
\ 00000012 .... LDR.N R2,??DataTable11 ;; 0x40022000
\ 00000014 1160 STR R1,[R2, #+0]
94 }
\ 00000016 7047 BX LR ;; return
95
96 /*******************************************************************************
97 * Function Name : FLASH_HalfCycleAccessCmd
98 * Description : Enables or disables the Half cycle flash access.
99 * Input : - FLASH_HalfCycle: specifies the FLASH Half cycle Access mode.
100 * This parameter can be one of the following values:
101 * - FLASH_HalfCycleAccess_Enable: FLASH Half Cycle Enable
102 * - FLASH_HalfCycleAccess_Disable: FLASH Half Cycle Disable
103 * Output : None
104 * Return : None
105 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
106 void FLASH_HalfCycleAccessCmd(u32 FLASH_HalfCycleAccess)
107 {
108 /* Check the parameters */
109 assert_param(IS_FLASH_HALFCYCLEACCESS_STATE(FLASH_HalfCycleAccess));
110
111 /* Enable or disable the Half cycle access */
112 FLASH->ACR &= ACR_HLFCYA_Mask;
\ FLASH_HalfCycleAccessCmd:
\ 00000000 .... LDR.N R1,??DataTable11 ;; 0x40022000
\ 00000002 0968 LDR R1,[R1, #+0]
\ 00000004 0822 MOVS R2,#+8
\ 00000006 9143 BICS R1,R1,R2
\ 00000008 .... LDR.N R2,??DataTable11 ;; 0x40022000
\ 0000000A 1160 STR R1,[R2, #+0]
113 FLASH->ACR |= FLASH_HalfCycleAccess;
\ 0000000C .... LDR.N R1,??DataTable11 ;; 0x40022000
\ 0000000E 0968 LDR R1,[R1, #+0]
\ 00000010 0143 ORRS R1,R1,R0
\ 00000012 .... LDR.N R2,??DataTable11 ;; 0x40022000
\ 00000014 1160 STR R1,[R2, #+0]
114 }
\ 00000016 7047 BX LR ;; return
115
116 /*******************************************************************************
117 * Function Name : FLASH_PrefetchBufferCmd
118 * Description : Enables or disables the Prefetch Buffer.
119 * Input : - FLASH_PrefetchBuffer: specifies the Prefetch buffer status.
120 * This parameter can be one of the following values:
121 * - FLASH_PrefetchBuffer_Enable: FLASH Prefetch Buffer Enable
122 * - FLASH_PrefetchBuffer_Disable: FLASH Prefetch Buffer Disable
123 * Output : None
124 * Return : None
125 *******************************************************************************/
\ In section .XML, align 4, keep-with-next
126 void FLASH_PrefetchBufferCmd(u32 FLASH_PrefetchBuffer)
127 {
128 /* Check the parameters */
129 assert_param(IS_FLASH_PREFETCHBUFFER_STATE(FLASH_PrefetchBuffer));
130
131 /* Enable or disable the Prefetch Buffer */
132 FLASH->ACR &= ACR_PRFTBE_Mask;
\ FLASH_PrefetchBufferCmd:
\ 00000000 .... LDR.N R1,??DataTable11 ;; 0x40022000
\ 00000002 0968 LDR R1,[R1, #+0]
\ 00000004 1022 MOVS R2,#+16
\ 00000006 9143 BICS R1,R1,R2
\ 00000008 .... LDR.N R2,??DataTable11 ;; 0x40022000
\ 0000000A 1160 STR R1,[R2, #+0]
133 FLASH->ACR |= FLASH_PrefetchBuffer;
\ 0000000C .... LDR.N R1,??DataTable11 ;; 0x40022000
\ 0000000E 0968 LDR R1,[R1, #+0]
\ 00000010 0143 ORRS R1,R1,R0
\ 00000012 .... LDR.N R2,??DataTable11 ;; 0x40022000
\ 00000014 1160 STR R1,[R2, #+0]
134 }
\ 00000016 7047 BX LR ;; return
\ In section .XML, align 4, keep-with-next
\ ??DataTable11:
\ 00000000 00200240 DC32 0x40022000
135
136 #ifdef _FLASH_PROG
137 /*******************************************************************************
138 * Function Name : FLASH_Unlock
139 * Description : Unlocks the FLASH Program Erase Controller.
140 * Input : None
141 * Output : None
142 * Return : None
143 *******************************************************************************/
144 void FLASH_Unlock(void)
145 {
146 /* Authorize the FPEC Access */
147 FLASH->KEYR = FLASH_KEY1;
148 FLASH->KEYR = FLASH_KEY2;
149 }
150
151 /*******************************************************************************
152 * Function Name : FLASH_Lock
153 * Description : Locks the FLASH Program Erase Controller.
154 * Input : None
155 * Output : None
156 * Return : None
157 *******************************************************************************/
158 void FLASH_Lock(void)
159 {
160 /* Set the Lock Bit to lock the FPEC and the FCR */
161 FLASH->CR |= CR_LOCK_Set;
162 }
163
164 /*******************************************************************************
165 * Function Name : FLASH_ErasePage
166 * Description : Erases a specified FLASH page.
167 * Input : - Page_Address: The page address to be erased.
168 * Output : None
169 * Return : FLASH Status: The returned value can be: FLASH_BUSY,
170 * FLASH_ERROR_PG or FLASH_ERROR_WRP or FLASH_COMPLETE or
171 * FLASH_TIMEOUT.
172 *******************************************************************************/
173 FLASH_Status FLASH_ErasePage(u32 Page_Address)
174 {
175 FLASH_Status status = FLASH_COMPLETE;
176
177 /* Check the parameters */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -