1 /**
2 *******************************************************************************************************
3 * @file fm33lc0xx_fl_flash.h
4 * @author FMSH Application Team
5 * @brief Head file of FLASH FL Module
6 *******************************************************************************************************
7 * @attention
8 *
9 * Copyright (c) [2021] [Fudan Microelectronics]
10 * THIS SOFTWARE is licensed under Mulan PSL v2.
11 * You can use this software according to the terms and conditions of the Mulan PSL v2.
12 * You may obtain a copy of Mulan PSL v2 at:
13 * http://license.coscl.org.cn/MulanPSL2
14 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
15 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
16 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
17 * See the Mulan PSL v2 for more details.
18 *
19 *******************************************************************************************************
20 */
21
22
23 /* Define to prevent recursive inclusion---------------------------------------------------------------*/
24 #ifndef __FM33LC0XX_FL_FLASH_H
25 #define __FM33LC0XX_FL_FLASH_H
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 /* Includes -------------------------------------------------------------------------------------------*/
31 #include "fm33lc0xx_fl_def.h"
32 /** @addtogroup FM33LC0XX_FL_Driver
33 * @{
34 */
35
36 /** @defgroup FLASH FLASH
37 * @brief FLASH FL driver
38 * @{
39 */
40
41 /* Exported types -------------------------------------------------------------------------------------*/
42 /** @defgroup FLASH_FL_ES_INIT FLASH Exported Init structures
43 * @{
44 */
45
46 /**
47 * @}
48 */
49 /* Exported constants ---------------------------------------------------------------------------------*/
50 /** @defgroup FLASH_FL_Exported_Constants FLASH Exported Constants
51 * @{
52 */
53
54 #define FLASH_RDCR_WAIT_Pos (0U)
55 #define FLASH_RDCR_WAIT_Msk (0x3U << FLASH_RDCR_WAIT_Pos)
56 #define FLASH_RDCR_WAIT FLASH_RDCR_WAIT_Msk
57
58 #define FLASH_PFCR_PRFTEN_Pos (0U)
59 #define FLASH_PFCR_PRFTEN_Msk (0x1U << FLASH_PFCR_PRFTEN_Pos)
60 #define FLASH_PFCR_PRFTEN FLASH_PFCR_PRFTEN_Msk
61
62 #define FLASH_OPTBR_IWDTSLP_Pos (31U)
63 #define FLASH_OPTBR_IWDTSLP_Msk (0x1U << FLASH_OPTBR_IWDTSLP_Pos)
64 #define FLASH_OPTBR_IWDTSLP FLASH_OPTBR_IWDTSLP_Msk
65
66 #define FLASH_OPTBR_IFLOCK_Pos (17U)
67 #define FLASH_OPTBR_IFLOCK_Msk (0x3U << FLASH_OPTBR_IFLOCK_Pos)
68 #define FLASH_OPTBR_IFLOCK FLASH_OPTBR_IFLOCK_Msk
69
70 #define FLASH_OPTBR_DFLSEN_Pos (10U)
71 #define FLASH_OPTBR_DFLSEN_Msk (0x1U << FLASH_OPTBR_DFLSEN_Pos)
72 #define FLASH_OPTBR_DFLSEN FLASH_OPTBR_DFLSEN_Msk
73
74 #define FLASH_OPTBR_BTSEN_Pos (8U)
75 #define FLASH_OPTBR_BTSEN_Msk (0x3U << FLASH_OPTBR_BTSEN_Pos)
76 #define FLASH_OPTBR_BTSEN FLASH_OPTBR_BTSEN_Msk
77
78 #define FLASH_OPTBR_ACLOCKEN_Pos (2U)
79 #define FLASH_OPTBR_ACLOCKEN_Msk (0x3U << FLASH_OPTBR_ACLOCKEN_Pos)
80 #define FLASH_OPTBR_ACLOCKEN FLASH_OPTBR_ACLOCKEN_Msk
81
82 #define FLASH_OPTBR_DBRDPEN_Pos (0U)
83 #define FLASH_OPTBR_DBRDPEN_Msk (0x3U << FLASH_OPTBR_DBRDPEN_Pos)
84 #define FLASH_OPTBR_DBRDPEN FLASH_OPTBR_DBRDPEN_Msk
85
86 #define FLASH_EPCR_ERTYPE_Pos (8U)
87 #define FLASH_EPCR_ERTYPE_Msk (0x3U << FLASH_EPCR_ERTYPE_Pos)
88 #define FLASH_EPCR_ERTYPE FLASH_EPCR_ERTYPE_Msk
89
90 #define FLASH_EPCR_PREQ_Pos (1U)
91 #define FLASH_EPCR_PREQ_Msk (0x1U << FLASH_EPCR_PREQ_Pos)
92 #define FLASH_EPCR_PREQ FLASH_EPCR_PREQ_Msk
93
94 #define FLASH_EPCR_EREQ_Pos (0U)
95 #define FLASH_EPCR_EREQ_Msk (0x1U << FLASH_EPCR_EREQ_Pos)
96 #define FLASH_EPCR_EREQ FLASH_EPCR_EREQ_Msk
97
98 #define FLASH_IER_OPTIE_Pos (11U)
99 #define FLASH_IER_OPTIE_Msk (0x1U << FLASH_IER_OPTIE_Pos)
100 #define FLASH_IER_OPTIE FLASH_IER_OPTIE_Msk
101
102 #define FLASH_IER_AUTHIE_Pos (10U)
103 #define FLASH_IER_AUTHIE_Msk (0x1U << FLASH_IER_AUTHIE_Pos)
104 #define FLASH_IER_AUTHIE FLASH_IER_AUTHIE_Msk
105
106 #define FLASH_IER_KEYIE_Pos (9U)
107 #define FLASH_IER_KEYIE_Msk (0x1U << FLASH_IER_KEYIE_Pos)
108 #define FLASH_IER_KEYIE FLASH_IER_KEYIE_Msk
109
110 #define FLASH_IER_CKIE_Pos (8U)
111 #define FLASH_IER_CKIE_Msk (0x1U << FLASH_IER_CKIE_Pos)
112 #define FLASH_IER_CKIE FLASH_IER_CKIE_Msk
113
114 #define FLASH_IER_PRDIE_Pos (1U)
115 #define FLASH_IER_PRDIE_Msk (0x1U << FLASH_IER_PRDIE_Pos)
116 #define FLASH_IER_PRDIE FLASH_IER_PRDIE_Msk
117
118 #define FLASH_IER_ERDIE_Pos (0U)
119 #define FLASH_IER_ERDIE_Msk (0x1U << FLASH_IER_ERDIE_Pos)
120 #define FLASH_IER_ERDIE FLASH_IER_ERDIE_Msk
121
122 #define FLASH_ISR_KEYSTA_Pos (17U)
123 #define FLASH_ISR_KEYSTA_Msk (0x7U << FLASH_ISR_KEYSTA_Pos)
124 #define FLASH_ISR_KEYSTA FLASH_ISR_KEYSTA_Msk
125
126 #define FLASH_ISR_BTSF_Pos (16U)
127 #define FLASH_ISR_BTSF_Msk (0x1U << FLASH_ISR_BTSF_Pos)
128 #define FLASH_ISR_BTSF FLASH_ISR_BTSF_Msk
129
130 #define FLASH_ISR_OPTERR_Pos (11U)
131 #define FLASH_ISR_OPTERR_Msk (0x1U << FLASH_ISR_OPTERR_Pos)
132 #define FLASH_ISR_OPTERR FLASH_ISR_OPTERR_Msk
133
134 #define FLASH_ISR_AUTHERR_Pos (10U)
135 #define FLASH_ISR_AUTHERR_Msk (0x1U << FLASH_ISR_AUTHERR_Pos)
136 #define FLASH_ISR_AUTHERR FLASH_ISR_AUTHERR_Msk
137
138 #define FLASH_ISR_KEYERR_Pos (9U)
139 #define FLASH_ISR_KEYERR_Msk (0x1U << FLASH_ISR_KEYERR_Pos)
140 #define FLASH_ISR_KEYERR FLASH_ISR_KEYERR_Msk
141
142 #define FLASH_ISR_CKERR_Pos (8U)
143 #define FLASH_ISR_CKERR_Msk (0x1U << FLASH_ISR_CKERR_Pos)
144 #define FLASH_ISR_CKERR FLASH_ISR_CKERR_Msk
145
146 #define FLASH_ISR_PRD_Pos (1U)
147 #define FLASH_ISR_PRD_Msk (0x1U << FLASH_ISR_PRD_Pos)
148 #define FLASH_ISR_PRD FLASH_ISR_PRD_Msk
149
150 #define FLASH_ISR_ERD_Pos (0U)
151 #define FLASH_ISR_ERD_Msk (0x1U << FLASH_ISR_ERD_Pos)
152 #define FLASH_ISR_ERD FLASH_ISR_ERD_Msk
153
154
155
156 #define FL_FLASH_INFORMATION1_REGIN (0x1U << 17U)
157 #define FL_FLASH_INFORMATION2_REGIN (0x1U << 18U)
158 #define FL_FLASH_BLOCK_0 (0x1U << 0U)
159 #define FL_FLASH_BLOCK_1 (0x1U << 1U)
160 #define FL_FLASH_BLOCK_2 (0x1U << 2U)
161 #define FL_FLASH_BLOCK_3 (0x1U << 3U)
162 #define FL_FLASH_BLOCK_4 (0x1U << 4U)
163 #define FL_FLASH_BLOCK_5 (0x1U << 5U)
164 #define FL_FLASH_BLOCK_6 (0x1U << 6U)
165 #define FL_FLASH_BLOCK_7 (0x1U << 7U)
166 #define FL_FLASH_BLOCK_8 (0x1U << 8U)
167 #define FL_FLASH_BLOCK_9 (0x1U << 9U)
168 #define FL_FLASH_BLOCK_10 (0x1U << 10U)
169 #define FL_FLASH_BLOCK_11 (0x1U << 11U)
170 #define FL_FLASH_BLOCK_12 (0x1U << 12U)
171 #define FL_FLASH_BLOCK_13 (0x1U << 13U)
172 #define FL_FLASH_BLOCK_14 (0x1U << 14U)
173 #define FL_FLASH_BLOCK_15 (0x1U << 15U)
174 #define FL_FLASH_LOCK_ALL (0x0U << 0U)
175 #define FL_FLASH_LOCK_SOFTWARE (0x2U << 0U)
176 #define FL_FLASH_LOCK_NONE (0x3U << 0U)
177 #define FL_FLASH_BOOTSWAP_ENABLE (0x2U << 8U)
178 #define FL_FLASH_BOOTSWAP_DISABLE (0x0U << 8U)
179 #define FL_FLASH_APPCODE_LOCK_ENABLE (0x2U << 2U)
180 #define FL_FLASH_APPCODE_LOCK_DISABLE (0x0U << 2U)
181 #define FL_FLASH_DEBUG_READ_ENABLE (0x2U << 0U)
182 #define FL_FLASH_DEBUG_READ_DISABLE (0x0U << 0U)
183 #define FL_FLASH_ERASE_KEY 0x96969696U
184 #define FL_FLASH_CHIP_ERASE_KEY 0x7D7D7D7DU
185 #define FL_FLASH_PAGE_ERASE_KEY 0xEAEAEAEAU
186 #define FL_FLASH_SECTOR_ERASE_KEY 0x3C3C3C3CU
187 #define FL_FLASH_ERASE_REQUEST 0x1234ABCDU
188 #define FL_FLASH_PROGRAM_KEY1 0xA5A5A5A5U
189 #define FL_FLASH_PROGRAM_KEY2 0xF1F1F1F1U
190 #define FL_FLASH_ERASE_TIMEOUT 0x0000FFFFU
191 #define FL_FLASH_ADDRS_ALIGN 0x00000004U
192 #define FL_FLASH_MAX_PAGE_NUM 0x00000200U
193 #define FL_FLASH_MAX_SECTOR_NUM 0x00000080U
194 #define FL_FLASH_SECTOR_SIZE_BYTE 0x00000800U
195 #define FL_FLASH_PAGE_SIZE_BYTE 0x00000200U
196 #define FL_FLASH_ADDR_MAXPROGRAM 0x0003FFFFU
197
198
199
200 #define FL_FLASH_READ_WAIT_0CYCLE (0x0U << FLASH_RDCR_WAIT_Pos)
201 #define FL_FLASH_READ_WAIT_1CYCLE (0x1U << FLASH_RDCR_WAIT_Pos)
202 #define FL_FLASH_READ_WAIT_2CYCLE (0x2U << FLASH_RDCR_WAIT_Pos)
203
204
205 #define FL_FLASH_IWDT_STOP_UNDER_SLEEP (0x0U << FLASH_OPTBR_IWDTSLP_Pos)
206 #define FL_FLASH_IWDT_WORK_UNDER_SLEEP (0x1U << FLASH_OPTBR_IWDTSLP_Pos)
207
208 #define FL_FLASH_IF_UNLOCK (0x0U << FLASH_OPTBR_IFLOCK_Pos)
209 #define FL_FLASH_IF_LOCK (0x1U << FLASH_OPTBR_IFLOCK_Pos)
210
211 #define FL_FLASH_DATA_FLASH_DISABLE (0x0U << FLASH_OPTBR_DFLSEN_Pos)
212 #define FL_FLASH_DATA_FLASH_ENABLE (0x1U << FLASH_OPTBR_DFLSEN_Pos)
213
214 #define FL_FLASH_BOOT_SWAP_DISABLE (0x0U << FLASH_OPTBR_BTSEN_Pos)
215 #define FL_FLASH_BOOT_SWAP_ENABLE (0x1U << FLASH_OPTBR_BTSEN_Pos)
216
217 #define FL_FLASH_FLASH_LOCK_DISABLE (0x0U << FLASH_OPTBR_ACLOCKEN_Pos)
218 #define FL_FLASH_FLASH_LOCK_ENABLE (0x1U << FLASH_OPTBR_ACLOCKEN_Pos)
219
220 #define FL_FLASH_SWD_READ_PEOTECTION_DISABLE (0x0U << FLASH_OPTBR_DBRDPEN_Pos)
221 #define FL_FLASH_SWD_READ_PEOTECTION_ENABLE (0x1U << FLASH_OPTBR_DBRDPEN_Pos)
222
223 #define FL_FLASH_ERASE_TYPE_PAGE (0x0U << FLASH_EPCR_ERTYPE_Pos)
224 #define FL_FLASH_ERASE_TYPE_SECTOR (0x1U << FLASH_EPCR_ERTYPE_Pos)
225
226
227 #define FL_FLASH_KEY_STATUS_LOCK (0x0U << FLASH_ISR_KEYSTA_Pos)
228 #define FL_FLASH_KEY_STATUS_PAGE_ERASE (0x2U << FLASH_ISR_KEYSTA_Pos)
229 #define FL_FLASH_KEY_STATUS_PROGRAM (0x3U << FLASH_ISR_KEYSTA_Pos)
230 #define FL_FLASH_KEY_STATUS_ERROR (0x4U << FLASH_ISR_KEYSTA_Pos)
231 #define FL_FLASH_KEY_STATUS_SECTOR_ERASE (0x5U << FLASH_ISR_KEYSTA_Pos)
232
233 #define FL_FLASH_BOOT_SECTOR_0000H_1FFFH (0x0U << FLASH_ISR_BTSF_Pos)
234 #define FL_FLASH_BOOT_SECTOR_2000H_3FFFH (0x1U << FLASH_ISR_BTSF_Pos)
235
236 /**
237 * @}
238 */
239 /* Exported functions ---------------------------------------------------------------------------------*/
240 /** @defgroup FLASH_FL_Exported_Functions FLASH Exported Functions
241 * @{
242 */
243
244 /**
245 * @brief Flash wait cycles config
246 * @rmtoll RDCR WAIT FL_FLASH_SetReadWait
247 * @param FLASHx FLASH instance
248 * @param wait This parameter can be one of the following values:
249 * @arg @ref FL_FLASH_READ_WAIT_0CYCLE
250 * @arg @ref FL_FLASH_READ_WAIT_1CYCLE
251 * @arg @ref FL_FLASH_READ_WAIT_2CYCLE
252 * @retval None
253 */
FL_FLASH_SetReadWait(FLASH_Type * FLASHx,uint32_t wait)254 __STATIC_INLINE void FL_FLASH_SetReadWait(FLASH_Type *FLASHx, uint32_t wait)
255 {
256 MODIFY_REG(FLASHx->RDCR, FLASH_RDCR_WAIT_Msk, wait);
257 }
258
259 /**
260 * @brief Get flash wait cycles config status
261 * @rmtoll RDCR WAIT FL_FLASH_GetReadWait
262 * @param FLASHx FLASH instance
263 * @retval Returned value can be one of the following values:
264 * @arg @ref FL_FLASH_READ_WAIT_0CYCLE
265 * @arg @ref FL_FLASH_READ_WAIT_1CYCLE
266 * @arg @ref FL_FLASH_READ_WAIT_2CYCLE
267 */
FL_FLASH_GetReadWait(FLASH_Type * FLASHx)268 __STATIC_INLINE uint32_t FL_FLASH_GetReadWait(FLASH_Type *FLASHx)
269 {
270 return (uint32_t)(READ_BIT(FLASHx->RDCR, FLASH_RDCR_WAIT_Msk));
271 }
272
273 /**
274 * @brief Prefetch Enable
275 * @rmtoll PFCR PRFTEN FL_FLASH_EnablePrefetch
276 * @param FLASHx FLASH instance
277 * @retval None
278 */
FL_FLASH_EnablePrefetch(FLASH_Type * FLASHx)279 __STATIC_INLINE void FL_FLASH_EnablePrefetch(FLASH_Type *FLASHx)
280 {
281 SET_BIT(FLASHx->PFCR, FLASH_PFCR_PRFTEN_Msk);
282 }
283
284 /**
285 * @brief Get prefetch enable status
286 * @rmtoll PFCR PRFTEN FL_FLASH_IsEnabledPrefetch
287 * @param FLASHx FLASH instance
288 * @retval State of bit (1 or 0).
289 */
FL_FLASH_IsEnabledPrefetch(FLASH_Type * FLASHx)290 __STATIC_INLINE uint32_t FL_FLASH_IsEnabledPrefetch(FLASH_Type *FLASHx)
291 {
292 return (uint32_t)(READ_BIT(FLASHx->PFCR, FLASH_PFCR_PRFTEN_Msk) == FLASH_PFCR_PRFTEN_Msk);
293 }
294
295 /**
296 * @brief Prefetch disable
297 * @rmtoll PFCR PRFTEN FL_FLASH_DisablePrefetch
298 * @param FLASHx FLASH instance
299 * @retval None
300 */
FL_FLASH_DisablePrefetch(FLASH_Type * FLASHx)301 __STATIC_INLINE void FL_FLASH_DisablePrefetch(FLASH_Type *FLASHx)
302 {
303 CLEAR_BIT(FLASHx->PFCR, FLASH_PFCR_PRFTEN_Msk);
304 }
305
306 /**
307 * @brief Get IWDT sleep enable status
308 * @rmtoll OPTBR IWDTSLP FL_FLASH_GetIWDTStateUnderSleep
309 * @param FLASHx FLASH instance
310 * @retval Returned value can be one of the following values:
311 * @arg @ref FL_FLASH_IWDT_STOP_UNDER_SLEEP
312 * @arg @ref FL_FLASH_IWDT_WORK_UNDER_SLEEP
313 */
FL_FLASH_GetIWDTStateUnderSleep(FLASH_Type * FLASHx)314 __STATIC_INLINE uint32_t FL_FLASH_GetIWDTStateUnderSleep(FLASH_Type *FLASHx)
315 {
316 return (uint32_t)(READ_BIT(FLASHx->OPTBR, FLASH_OPTBR_IWDTSLP_Msk));
317 }
318
319 /**
320 * @brief Get information2 lock enable flag
321 * @rmtoll OPTBR IFLOCK FL_FLASH_IsActiveFlag_IFLockedState
322 * @param FLASHx FLASH instance
323 * @param region This parameter can be one of the following values:
324 * @arg @ref FL_FLASH_INFORMATION1_REGIN
325 * @arg @ref FL_FLASH_INFORMATION2_REGIN
326 * @retval State of bit (1 or 0).
327 */
FL_FLASH_IsActiveFlag_IFLockedState(FLASH_Type * FLASHx,uint32_t region)328 __STATIC_INLINE uint32_t FL_FLASH_IsActiveFlag_IFLockedState(FLASH_Type *FLASHx, uint32_t region)
329 {
330 return (uint32_t)(READ_BIT(FLASHx->OPTBR, FLASH_OPTBR_IFLOCK_Msk) == (FLASH_OPTBR_IFLOCK_Msk));
331 }
332
333 /**
334 * @brief Get dataflash enable status
335 * @rmtoll OPTBR DFLSEN FL_FLASH_GetDataFlashState
336 * @param FLASHx FLASH instance
337 * @retval Returned value can be one of the following values:
338 * @arg @ref FL_FLASH_DATA_FLASH_DISABLE
339 * @arg @ref FL_FLASH_DATA_FLASH_ENABLE
340 */
FL_FLASH_GetDataFlashState(FLASH_Type * FLASHx)341 __STATIC_INLINE uint32_t FL_FLASH_GetDataFlashState(FLASH_Type *FLASHx)
342 {
343 return (uint32_t)(READ_BIT(FLASHx->OPTBR, FLASH_OPTBR_DFLSEN_Msk));
344 }
345
346 /**
347 * @brief Get BootSwap enable status
348 * @rmtoll OPTBR BTSEN FL_FLASH_GetBootSwapState
349 * @param FLASHx FLASH instance
350 * @retval Returned value can be one of the following values:
351 * @arg @ref FL_FLASH_BOOT_SWAP_DISABLE
352 * @arg @ref FL_FLASH_BOOT_SWAP_ENABLE
353 */
FL_FLASH_GetBootSwapState(FLASH_Type * FLASHx)354 __STATIC_INLINE uint32_t FL_FLASH_GetBootSwapState(FLASH_Type *FLASHx)
355 {
356 return (uint32_t)(READ_BIT(FLASHx->OPTBR, FLASH_OPTBR_BTSEN_Msk));
357 }
358
359 /**
360 * @brief Get AppCode lock enable
361 * @rmtoll OPTBR ACLOCKEN FL_FLASH_GetFlashLockState
362 * @param FLASHx FLASH instance
363 * @retval Returned value can be one of the following values:
364 * @arg @ref FL_FLASH_FLASH_LOCK_DISABLE
365 * @arg @ref FL_FLASH_FLASH_LOCK_ENABLE
366 */
FL_FLASH_GetFlashLockState(FLASH_Type * FLASHx)367 __STATIC_INLINE uint32_t FL_FLASH_GetFlashLockState(FLASH_Type *FLASHx)
368 {
369 return (uint32_t)(READ_BIT(FLASHx->OPTBR, FLASH_OPTBR_ACLOCKEN_Msk));
370 }
371
372 /**
373 * @brief Get debug read protection enable status
374 * @rmtoll OPTBR DBRDPEN FL_FLASH_GetSWDReadProtectionState
375 * @param FLASHx FLASH instance
376 * @retval Returned value can be one of the following values:
377 * @arg @ref FL_FLASH_SWD_READ_PEOTECTION_DISABLE
378 * @arg @ref FL_FLASH_SWD_READ_PEOTECTION_ENABLE
379 */
FL_FLASH_GetSWDReadProtectionState(FLASH_Type * FLASHx)380 __STATIC_INLINE uint32_t FL_FLASH_GetSWDReadProtectionState(FLASH_Type *FLASHx)
381 {
382 return (uint32_t)(READ_BIT(FLASHx->OPTBR, FLASH_OPTBR_DBRDPEN_Msk));
383 }
384
385 /**
386 * @brief Set ACLOCK register low 32 bit
387 * @rmtoll ACLOCK1 FL_FLASH_SetFlashLowRegionLock
388 * @param FLASHx FLASH instance
389 * @param region This parameter can be one of the following values:
390 * @arg @ref FL_FLASH_BLOCK_0
391 * @arg @ref FL_FLASH_BLOCK_1
392 * @arg @ref FL_FLASH_BLOCK_2
393 * @arg @ref FL_FLASH_BLOCK_3
394 * @arg @ref FL_FLASH_BLOCK_4
395 * @arg @ref FL_FLASH_BLOCK_5
396 * @arg @ref FL_FLASH_BLOCK_6
397 * @arg @ref FL_FLASH_BLOCK_7
398 * @arg @ref FL_FLASH_BLOCK_8
399 * @arg @ref FL_FLASH_BLOCK_9
400 * @arg @ref FL_FLASH_BLOCK_10
401 * @arg @ref FL_FLASH_BLOCK_11
402 * @arg @ref FL_FLASH_BLOCK_12
403 * @arg @ref FL_FLASH_BLOCK_13
404 * @arg @ref FL_FLASH_BLOCK_14
405 * @arg @ref FL_FLASH_BLOCK_15
406 * @param mode This parameter can be one of the following values:
407 * @arg @ref FL_FLASH_LOCK_ALL
408 * @arg @ref FL_FLASH_LOCK_SOFTWARE
409 * @arg @ref FL_FLASH_LOCK_NONE
410 * @retval None
411 */
FL_FLASH_SetFlashLowRegionLock(FLASH_Type * FLASHx,uint32_t region,uint32_t mode)412 __STATIC_INLINE void FL_FLASH_SetFlashLowRegionLock(FLASH_Type *FLASHx, uint32_t region, uint32_t mode)
413 {
414 CLEAR_BIT(FLASHx->ACLOCK1, ((region * region) * (((mode == 3) ? 0 : (~mode)) & 0x03)));
415 }
416
417 /**
418 * @brief Get ACLOCK register low 32 bit status
419 * @rmtoll ACLOCK1 FL_FLASH_GetFlashLowRegionLock
420 * @param FLASHx FLASH instance
421 * @param region This parameter can be one of the following values:
422 * @arg @ref FL_FLASH_BLOCK_0
423 * @arg @ref FL_FLASH_BLOCK_1
424 * @arg @ref FL_FLASH_BLOCK_2
425 * @arg @ref FL_FLASH_BLOCK_3
426 * @arg @ref FL_FLASH_BLOCK_4
427 * @arg @ref FL_FLASH_BLOCK_5
428 * @arg @ref FL_FLASH_BLOCK_6
429 * @arg @ref FL_FLASH_BLOCK_7
430 * @arg @ref FL_FLASH_BLOCK_8
431 * @arg @ref FL_FLASH_BLOCK_9
432 * @arg @ref FL_FLASH_BLOCK_10
433 * @arg @ref FL_FLASH_BLOCK_11
434 * @arg @ref FL_FLASH_BLOCK_12
435 * @arg @ref FL_FLASH_BLOCK_13
436 * @arg @ref FL_FLASH_BLOCK_14
437 * @arg @ref FL_FLASH_BLOCK_15
438 * @retval Returned value can be one of the following values:
439 */
FL_FLASH_GetFlashLowRegionLock(FLASH_Type * FLASHx,uint32_t region)440 __STATIC_INLINE uint32_t FL_FLASH_GetFlashLowRegionLock(FLASH_Type *FLASHx, uint32_t region)
441 {
442 return (uint32_t)(READ_BIT(FLASHx->ACLOCK1, ((region * region) * 0x03)) / (region * region));
443 }
444
445 /**
446 * @brief Set ACLOCK register high 32 bit
447 * @rmtoll ACLOCK2 FL_FLASH_SetFlashHighRegionLock
448 * @param FLASHx FLASH instance
449 * @param region This parameter can be one of the following values:
450 * @arg @ref FL_FLASH_BLOCK_0
451 * @arg @ref FL_FLASH_BLOCK_1
452 * @arg @ref FL_FLASH_BLOCK_2
453 * @arg @ref FL_FLASH_BLOCK_3
454 * @arg @ref FL_FLASH_BLOCK_4
455 * @arg @ref FL_FLASH_BLOCK_5
456 * @arg @ref FL_FLASH_BLOCK_6
457 * @arg @ref FL_FLASH_BLOCK_7
458 * @arg @ref FL_FLASH_BLOCK_8
459 * @arg @ref FL_FLASH_BLOCK_9
460 * @arg @ref FL_FLASH_BLOCK_10
461 * @arg @ref FL_FLASH_BLOCK_11
462 * @arg @ref FL_FLASH_BLOCK_12
463 * @arg @ref FL_FLASH_BLOCK_13
464 * @arg @ref FL_FLASH_BLOCK_14
465 * @arg @ref FL_FLASH_BLOCK_15
466 * @param mode This parameter can be one of the following values:
467 * @arg @ref FL_FLASH_LOCK_ALL
468 * @arg @ref FL_FLASH_LOCK_SOFTWARE
469 * @arg @ref FL_FLASH_LOCK_NONE
470 * @retval None
471 */
FL_FLASH_SetFlashHighRegionLock(FLASH_Type * FLASHx,uint32_t region,uint32_t mode)472 __STATIC_INLINE void FL_FLASH_SetFlashHighRegionLock(FLASH_Type *FLASHx, uint32_t region, uint32_t mode)
473 {
474 CLEAR_BIT(FLASHx->ACLOCK2, ((region * region) * (((mode == 3) ? 0 : (~mode)) & 0x03)));
475 }
476
477 /**
478 * @brief Get ACLOCK register high 32 bit status
479 * @rmtoll ACLOCK2 FL_FLASH_GetFlashHighRegionLock
480 * @param FLASHx FLASH instance
481 * @param region This parameter can be one of the following values:
482 * @arg @ref FL_FLASH_BLOCK_0
483 * @arg @ref FL_FLASH_BLOCK_1
484 * @arg @ref FL_FLASH_BLOCK_2
485 * @arg @ref FL_FLASH_BLOCK_3
486 * @arg @ref FL_FLASH_BLOCK_4
487 * @arg @ref FL_FLASH_BLOCK_5
488 * @arg @ref FL_FLASH_BLOCK_6
489 * @arg @ref FL_FLASH_BLOCK_7
490 * @arg @ref FL_FLASH_BLOCK_8
491 * @arg @ref FL_FLASH_BLOCK_9
492 * @arg @ref FL_FLASH_BLOCK_10
493 * @arg @ref FL_FLASH_BLOCK_11
494 * @arg @ref FL_FLASH_BLOCK_12
495 * @arg @ref FL_FLASH_BLOCK_13
496 * @arg @ref FL_FLASH_BLOCK_14
497 * @arg @ref FL_FLASH_BLOCK_15
498 * @retval Returned value can be one of the following values:
499 */
FL_FLASH_GetFlashHighRegionLock(FLASH_Type * FLASHx,uint32_t region)500 __STATIC_INLINE uint32_t FL_FLASH_GetFlashHighRegionLock(FLASH_Type *FLASHx, uint32_t region)
501 {
502 return (uint32_t)(READ_BIT(FLASHx->ACLOCK2, ((region * region) * 0x03)) / (region * region));
503 }
504
505 /**
506 * @brief Set flash erase type
507 * @rmtoll EPCR ERTYPE FL_FLASH_SetFlashEraseType
508 * @param FLASHx FLASH instance
509 * @param type This parameter can be one of the following values:
510 * @arg @ref FL_FLASH_ERASE_TYPE_PAGE
511 * @arg @ref FL_FLASH_ERASE_TYPE_SECTOR
512 * @retval None
513 */
FL_FLASH_SetFlashEraseType(FLASH_Type * FLASHx,uint32_t type)514 __STATIC_INLINE void FL_FLASH_SetFlashEraseType(FLASH_Type *FLASHx, uint32_t type)
515 {
516 MODIFY_REG(FLASHx->EPCR, FLASH_EPCR_ERTYPE_Msk, type);
517 }
518
519 /**
520 * @brief Get flash erase type
521 * @rmtoll EPCR ERTYPE FL_FLASH_GetFlashEraseType
522 * @param FLASHx FLASH instance
523 * @retval Returned value can be one of the following values:
524 * @arg @ref FL_FLASH_ERASE_TYPE_PAGE
525 * @arg @ref FL_FLASH_ERASE_TYPE_SECTOR
526 */
FL_FLASH_GetFlashEraseType(FLASH_Type * FLASHx)527 __STATIC_INLINE uint32_t FL_FLASH_GetFlashEraseType(FLASH_Type *FLASHx)
528 {
529 return (uint32_t)(READ_BIT(FLASHx->EPCR, FLASH_EPCR_ERTYPE_Msk));
530 }
531
532 /**
533 * @brief Program request enable
534 * @rmtoll EPCR PREQ FL_FLASH_EnableProgram
535 * @param FLASHx FLASH instance
536 * @retval None
537 */
FL_FLASH_EnableProgram(FLASH_Type * FLASHx)538 __STATIC_INLINE void FL_FLASH_EnableProgram(FLASH_Type *FLASHx)
539 {
540 CLEAR_BIT(FLASHx->EPCR, FLASH_EPCR_EREQ_Msk);
541 SET_BIT(FLASHx->EPCR, FLASH_EPCR_PREQ_Msk);
542 }
543
544 /**
545 * @brief Erase request enable
546 * @rmtoll EPCR EREQ FL_FLASH_EnableErase
547 * @param FLASHx FLASH instance
548 * @retval None
549 */
FL_FLASH_EnableErase(FLASH_Type * FLASHx)550 __STATIC_INLINE void FL_FLASH_EnableErase(FLASH_Type *FLASHx)
551 {
552 CLEAR_BIT(FLASHx->EPCR, FLASH_EPCR_PREQ_Msk);
553 SET_BIT(FLASHx->EPCR, FLASH_EPCR_EREQ_Msk);
554 }
555
556 /**
557 * @brief Set flash key
558 * @rmtoll KEY FL_FLASH_UnlockFlash
559 * @param FLASHx FLASH instance
560 * @param key
561 * @retval None
562 */
FL_FLASH_UnlockFlash(FLASH_Type * FLASHx,uint32_t key)563 __STATIC_INLINE void FL_FLASH_UnlockFlash(FLASH_Type *FLASHx, uint32_t key)
564 {
565 WRITE_REG(FLASHx->KEY, key);
566 }
567
568 /**
569 * @brief Reset flash key
570 * @rmtoll KEY FL_FLASH_LockFlash
571 * @param FLASHx FLASH instance
572 * @retval None
573 */
FL_FLASH_LockFlash(FLASH_Type * FLASHx)574 __STATIC_INLINE void FL_FLASH_LockFlash(FLASH_Type *FLASHx)
575 {
576 WRITE_REG(FLASHx->KEY, 0xFFFFFFFF);
577 }
578
579 /**
580 * @brief OTP program error interrupt enable
581 * @rmtoll IER OPTIE FL_FLASH_EnableIT_OTPProgramError
582 * @param FLASHx FLASH instance
583 * @retval None
584 */
FL_FLASH_EnableIT_OTPProgramError(FLASH_Type * FLASHx)585 __STATIC_INLINE void FL_FLASH_EnableIT_OTPProgramError(FLASH_Type *FLASHx)
586 {
587 SET_BIT(FLASHx->IER, FLASH_IER_OPTIE_Msk);
588 }
589
590 /**
591 * @brief OTP program error interrupt disable
592 * @rmtoll IER OPTIE FL_FLASH_DisableIT_OTPProgramError
593 * @param FLASHx FLASH instance
594 * @retval None
595 */
FL_FLASH_DisableIT_OTPProgramError(FLASH_Type * FLASHx)596 __STATIC_INLINE void FL_FLASH_DisableIT_OTPProgramError(FLASH_Type *FLASHx)
597 {
598 CLEAR_BIT(FLASHx->IER, FLASH_IER_OPTIE_Msk);
599 }
600
601 /**
602 * @brief Get OTP program error interrupt enable status
603 * @rmtoll IER OPTIE FL_FLASH_IsEnabledIT_OTPProgramError
604 * @param FLASHx FLASH instance
605 * @retval State of bit (1 or 0).
606 */
FL_FLASH_IsEnabledIT_OTPProgramError(FLASH_Type * FLASHx)607 __STATIC_INLINE uint32_t FL_FLASH_IsEnabledIT_OTPProgramError(FLASH_Type *FLASHx)
608 {
609 return (uint32_t)(READ_BIT(FLASHx->IER, FLASH_IER_OPTIE_Msk) == FLASH_IER_OPTIE_Msk);
610 }
611
612 /**
613 * @brief Flash authentication error interrupt enable
614 * @rmtoll IER AUTHIE FL_FLASH_EnableIT_AuthenticationError
615 * @param FLASHx FLASH instance
616 * @retval None
617 */
FL_FLASH_EnableIT_AuthenticationError(FLASH_Type * FLASHx)618 __STATIC_INLINE void FL_FLASH_EnableIT_AuthenticationError(FLASH_Type *FLASHx)
619 {
620 SET_BIT(FLASHx->IER, FLASH_IER_AUTHIE_Msk);
621 }
622
623 /**
624 * @brief Flash authentication error interrupt disable
625 * @rmtoll IER AUTHIE FL_FLASH_DisableIT_AuthenticationError
626 * @param FLASHx FLASH instance
627 * @retval None
628 */
FL_FLASH_DisableIT_AuthenticationError(FLASH_Type * FLASHx)629 __STATIC_INLINE void FL_FLASH_DisableIT_AuthenticationError(FLASH_Type *FLASHx)
630 {
631 CLEAR_BIT(FLASHx->IER, FLASH_IER_AUTHIE_Msk);
632 }
633
634 /**
635 * @brief Get flash authentication error interrupt enable status
636 * @rmtoll IER AUTHIE FL_FLASH_IsEnabledIT_AuthenticationError
637 * @param FLASHx FLASH instance
638 * @retval State of bit (1 or 0).
639 */
FL_FLASH_IsEnabledIT_AuthenticationError(FLASH_Type * FLASHx)640 __STATIC_INLINE uint32_t FL_FLASH_IsEnabledIT_AuthenticationError(FLASH_Type *FLASHx)
641 {
642 return (uint32_t)(READ_BIT(FLASHx->IER, FLASH_IER_AUTHIE_Msk) == FLASH_IER_AUTHIE_Msk);
643 }
644
645 /**
646 * @brief Flash key error interrupt enable
647 * @rmtoll IER KEYIE FL_FLASH_EnableIT_KeyError
648 * @param FLASHx FLASH instance
649 * @retval None
650 */
FL_FLASH_EnableIT_KeyError(FLASH_Type * FLASHx)651 __STATIC_INLINE void FL_FLASH_EnableIT_KeyError(FLASH_Type *FLASHx)
652 {
653 SET_BIT(FLASHx->IER, FLASH_IER_KEYIE_Msk);
654 }
655
656 /**
657 * @brief Flash key error interrupt disable
658 * @rmtoll IER KEYIE FL_FLASH_DisableIT_KeyError
659 * @param FLASHx FLASH instance
660 * @retval None
661 */
FL_FLASH_DisableIT_KeyError(FLASH_Type * FLASHx)662 __STATIC_INLINE void FL_FLASH_DisableIT_KeyError(FLASH_Type *FLASHx)
663 {
664 CLEAR_BIT(FLASHx->IER, FLASH_IER_KEYIE_Msk);
665 }
666
667 /**
668 * @brief Get Flash key error interrupt enable status
669 * @rmtoll IER KEYIE FL_FLASH_IsEnabledIT_KeyError
670 * @param FLASHx FLASH instance
671 * @retval State of bit (1 or 0).
672 */
FL_FLASH_IsEnabledIT_KeyError(FLASH_Type * FLASHx)673 __STATIC_INLINE uint32_t FL_FLASH_IsEnabledIT_KeyError(FLASH_Type *FLASHx)
674 {
675 return (uint32_t)(READ_BIT(FLASHx->IER, FLASH_IER_KEYIE_Msk) == FLASH_IER_KEYIE_Msk);
676 }
677
678 /**
679 * @brief Erase/Program clock error interrupt enable
680 * @rmtoll IER CKIE FL_FLASH_EnableIT_ClockError
681 * @param FLASHx FLASH instance
682 * @retval None
683 */
FL_FLASH_EnableIT_ClockError(FLASH_Type * FLASHx)684 __STATIC_INLINE void FL_FLASH_EnableIT_ClockError(FLASH_Type *FLASHx)
685 {
686 SET_BIT(FLASHx->IER, FLASH_IER_CKIE_Msk);
687 }
688
689 /**
690 * @brief Erase/Program clock error interrupt disable
691 * @rmtoll IER CKIE FL_FLASH_DisableIT_ClockError
692 * @param FLASHx FLASH instance
693 * @retval None
694 */
FL_FLASH_DisableIT_ClockError(FLASH_Type * FLASHx)695 __STATIC_INLINE void FL_FLASH_DisableIT_ClockError(FLASH_Type *FLASHx)
696 {
697 CLEAR_BIT(FLASHx->IER, FLASH_IER_CKIE_Msk);
698 }
699
700 /**
701 * @brief Get Erase/Program clock error interrupt enable status
702 * @rmtoll IER CKIE FL_FLASH_IsEnabledIT_ClockError
703 * @param FLASHx FLASH instance
704 * @retval State of bit (1 or 0).
705 */
FL_FLASH_IsEnabledIT_ClockError(FLASH_Type * FLASHx)706 __STATIC_INLINE uint32_t FL_FLASH_IsEnabledIT_ClockError(FLASH_Type *FLASHx)
707 {
708 return (uint32_t)(READ_BIT(FLASHx->IER, FLASH_IER_CKIE_Msk) == FLASH_IER_CKIE_Msk);
709 }
710
711 /**
712 * @brief Program done interrupt enable
713 * @rmtoll IER PRDIE FL_FLASH_EnableIT_ProgramComplete
714 * @param FLASHx FLASH instance
715 * @retval None
716 */
FL_FLASH_EnableIT_ProgramComplete(FLASH_Type * FLASHx)717 __STATIC_INLINE void FL_FLASH_EnableIT_ProgramComplete(FLASH_Type *FLASHx)
718 {
719 SET_BIT(FLASHx->IER, FLASH_IER_PRDIE_Msk);
720 }
721
722 /**
723 * @brief Program done interrupt disable
724 * @rmtoll IER PRDIE FL_FLASH_DisableIT_ProgramComplete
725 * @param FLASHx FLASH instance
726 * @retval None
727 */
FL_FLASH_DisableIT_ProgramComplete(FLASH_Type * FLASHx)728 __STATIC_INLINE void FL_FLASH_DisableIT_ProgramComplete(FLASH_Type *FLASHx)
729 {
730 CLEAR_BIT(FLASHx->IER, FLASH_IER_PRDIE_Msk);
731 }
732
733 /**
734 * @brief Get program done interrupt enable status
735 * @rmtoll IER PRDIE FL_FLASH_IsEnabledIT_ProgramComplete
736 * @param FLASHx FLASH instance
737 * @retval State of bit (1 or 0).
738 */
FL_FLASH_IsEnabledIT_ProgramComplete(FLASH_Type * FLASHx)739 __STATIC_INLINE uint32_t FL_FLASH_IsEnabledIT_ProgramComplete(FLASH_Type *FLASHx)
740 {
741 return (uint32_t)(READ_BIT(FLASHx->IER, FLASH_IER_PRDIE_Msk) == FLASH_IER_PRDIE_Msk);
742 }
743
744 /**
745 * @brief Erase done interrupt enable
746 * @rmtoll IER ERDIE FL_FLASH_EnableIT_EraseComplete
747 * @param FLASHx FLASH instance
748 * @retval None
749 */
FL_FLASH_EnableIT_EraseComplete(FLASH_Type * FLASHx)750 __STATIC_INLINE void FL_FLASH_EnableIT_EraseComplete(FLASH_Type *FLASHx)
751 {
752 SET_BIT(FLASHx->IER, FLASH_IER_ERDIE_Msk);
753 }
754
755 /**
756 * @brief Erase done interrupt disable
757 * @rmtoll IER ERDIE FL_FLASH_DisableIT_EraseComplete
758 * @param FLASHx FLASH instance
759 * @retval None
760 */
FL_FLASH_DisableIT_EraseComplete(FLASH_Type * FLASHx)761 __STATIC_INLINE void FL_FLASH_DisableIT_EraseComplete(FLASH_Type *FLASHx)
762 {
763 CLEAR_BIT(FLASHx->IER, FLASH_IER_ERDIE_Msk);
764 }
765
766 /**
767 * @brief Get erase done interrupt enable status
768 * @rmtoll IER ERDIE FL_FLASH_IsEnabledIT_EraseComplete
769 * @param FLASHx FLASH instance
770 * @retval State of bit (1 or 0).
771 */
FL_FLASH_IsEnabledIT_EraseComplete(FLASH_Type * FLASHx)772 __STATIC_INLINE uint32_t FL_FLASH_IsEnabledIT_EraseComplete(FLASH_Type *FLASHx)
773 {
774 return (uint32_t)(READ_BIT(FLASHx->IER, FLASH_IER_ERDIE_Msk) == FLASH_IER_ERDIE_Msk);
775 }
776
777 /**
778 * @brief Get flash key status
779 * @rmtoll ISR KEYSTA FL_FLASH_GetFlashLockStatus
780 * @param FLASHx FLASH instance
781 * @retval Returned value can be one of the following values:
782 * @arg @ref FL_FLASH_KEY_STATUS_LOCK
783 * @arg @ref FL_FLASH_KEY_STATUS_PAGE_ERASE
784 * @arg @ref FL_FLASH_KEY_STATUS_PROGRAM
785 * @arg @ref FL_FLASH_KEY_STATUS_ERROR
786 * @arg @ref FL_FLASH_KEY_STATUS_SECTOR_ERASE
787 */
FL_FLASH_GetFlashLockStatus(FLASH_Type * FLASHx)788 __STATIC_INLINE uint32_t FL_FLASH_GetFlashLockStatus(FLASH_Type *FLASHx)
789 {
790 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_KEYSTA_Msk));
791 }
792
793 /**
794 * @brief Get BootSwap
795 register value
796 * @rmtoll ISR BTSF FL_FLASH_GetFlashSwapStatus
797 * @param FLASHx FLASH instance
798 * @retval Returned value can be one of the following values:
799 * @arg @ref FL_FLASH_BOOT_SECTOR_0000H_1FFFH
800 * @arg @ref FL_FLASH_BOOT_SECTOR_2000H_3FFFH
801 */
FL_FLASH_GetFlashSwapStatus(FLASH_Type * FLASHx)802 __STATIC_INLINE uint32_t FL_FLASH_GetFlashSwapStatus(FLASH_Type *FLASHx)
803 {
804 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_BTSF_Msk));
805 }
806
807 /**
808 * @brief Get OTP program Error Flag
809 * @rmtoll ISR OPTERR FL_FLASH_IsActiveFlag_OPTProgramError
810 * @param FLASHx FLASH instance
811 * @retval State of bit (1 or 0).
812 */
FL_FLASH_IsActiveFlag_OPTProgramError(FLASH_Type * FLASHx)813 __STATIC_INLINE uint32_t FL_FLASH_IsActiveFlag_OPTProgramError(FLASH_Type *FLASHx)
814 {
815 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_OPTERR_Msk) == (FLASH_ISR_OPTERR_Msk));
816 }
817
818 /**
819 * @brief Clear OTP program Error Flag
820 * @rmtoll ISR OPTERR FL_FLASH_ClearFlag_OPTProgramError
821 * @param UARTx UART instance
822 * @retval None
823 */
FL_FLASH_ClearFlag_OPTProgramError(UART_Type * UARTx)824 __STATIC_INLINE void FL_FLASH_ClearFlag_OPTProgramError(UART_Type *UARTx)
825 {
826 WRITE_REG(UARTx->ISR, FLASH_ISR_OPTERR_Msk);
827 }
828
829 /**
830 * @brief Get Flash Authentication Error Flag
831 * @rmtoll ISR AUTHERR FL_FLASH_IsActiveFlag_AuthenticationError
832 * @param FLASHx FLASH instance
833 * @retval State of bit (1 or 0).
834 */
FL_FLASH_IsActiveFlag_AuthenticationError(FLASH_Type * FLASHx)835 __STATIC_INLINE uint32_t FL_FLASH_IsActiveFlag_AuthenticationError(FLASH_Type *FLASHx)
836 {
837 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_AUTHERR_Msk) == (FLASH_ISR_AUTHERR_Msk));
838 }
839
840 /**
841 * @brief ClearFlash Authentication Error Flag
842 * @rmtoll ISR AUTHERR FL_FLASH_ClearFlag_AuthenticationError
843 * @param FLASHx FLASH instance
844 * @retval None
845 */
FL_FLASH_ClearFlag_AuthenticationError(FLASH_Type * FLASHx)846 __STATIC_INLINE void FL_FLASH_ClearFlag_AuthenticationError(FLASH_Type *FLASHx)
847 {
848 WRITE_REG(FLASHx->ISR, FLASH_ISR_AUTHERR_Msk);
849 }
850
851 /**
852 * @brief Get Flash Key Error Flag
853 * @rmtoll ISR KEYERR FL_FLASH_IsActiveFlag_KeyError
854 * @param FLASHx FLASH instance
855 * @retval State of bit (1 or 0).
856 */
FL_FLASH_IsActiveFlag_KeyError(FLASH_Type * FLASHx)857 __STATIC_INLINE uint32_t FL_FLASH_IsActiveFlag_KeyError(FLASH_Type *FLASHx)
858 {
859 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_KEYERR_Msk) == (FLASH_ISR_KEYERR_Msk));
860 }
861
862 /**
863 * @brief Clear Flash Key Error Flag
864 * @rmtoll ISR KEYERR FL_FLASH_ClearFlag_KeyError
865 * @param FLASHx FLASH instance
866 * @retval None
867 */
FL_FLASH_ClearFlag_KeyError(FLASH_Type * FLASHx)868 __STATIC_INLINE void FL_FLASH_ClearFlag_KeyError(FLASH_Type *FLASHx)
869 {
870 WRITE_REG(FLASHx->ISR, FLASH_ISR_KEYERR_Msk);
871 }
872
873 /**
874 * @brief Get Erase/Program Clock Error Flag
875 * @rmtoll ISR CKERR FL_FLASH_IsActiveFlag_ClockError
876 * @param FLASHx FLASH instance
877 * @retval State of bit (1 or 0).
878 */
FL_FLASH_IsActiveFlag_ClockError(FLASH_Type * FLASHx)879 __STATIC_INLINE uint32_t FL_FLASH_IsActiveFlag_ClockError(FLASH_Type *FLASHx)
880 {
881 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_CKERR_Msk) == (FLASH_ISR_CKERR_Msk));
882 }
883
884 /**
885 * @brief Clear Erase/Program Clock Error Flag
886 * @rmtoll ISR CKERR FL_FLASH_ClearFlag_ClockError
887 * @param FLASHx FLASH instance
888 * @retval None
889 */
FL_FLASH_ClearFlag_ClockError(FLASH_Type * FLASHx)890 __STATIC_INLINE void FL_FLASH_ClearFlag_ClockError(FLASH_Type *FLASHx)
891 {
892 WRITE_REG(FLASHx->ISR, FLASH_ISR_CKERR_Msk);
893 }
894
895 /**
896 * @brief Get Program Done Flag
897 * @rmtoll ISR PRD FL_FLASH_IsActiveFlag_ProgramComplete
898 * @param FLASHx FLASH instance
899 * @retval State of bit (1 or 0).
900 */
FL_FLASH_IsActiveFlag_ProgramComplete(FLASH_Type * FLASHx)901 __STATIC_INLINE uint32_t FL_FLASH_IsActiveFlag_ProgramComplete(FLASH_Type *FLASHx)
902 {
903 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_PRD_Msk) == (FLASH_ISR_PRD_Msk));
904 }
905
906 /**
907 * @brief Clear Program Done Flag
908 * @rmtoll ISR PRD FL_FLASH_ClearFlag_ProgramComplete
909 * @param FLASHx FLASH instance
910 * @retval None
911 */
FL_FLASH_ClearFlag_ProgramComplete(FLASH_Type * FLASHx)912 __STATIC_INLINE void FL_FLASH_ClearFlag_ProgramComplete(FLASH_Type *FLASHx)
913 {
914 WRITE_REG(FLASHx->ISR, FLASH_ISR_PRD_Msk);
915 }
916
917 /**
918 * @brief Get Erase Done Flag
919 * @rmtoll ISR ERD FL_FLASH_IsActiveFlag_EraseComplete
920 * @param FLASHx FLASH instance
921 * @retval State of bit (1 or 0).
922 */
FL_FLASH_IsActiveFlag_EraseComplete(FLASH_Type * FLASHx)923 __STATIC_INLINE uint32_t FL_FLASH_IsActiveFlag_EraseComplete(FLASH_Type *FLASHx)
924 {
925 return (uint32_t)(READ_BIT(FLASHx->ISR, FLASH_ISR_ERD_Msk) == (FLASH_ISR_ERD_Msk));
926 }
927
928 /**
929 * @brief Clear Erase Done Flag
930 * @rmtoll ISR ERD FL_FLASH_ClearFlag_EraseComplete
931 * @param FLASHx FLASH instance
932 * @retval None
933 */
FL_FLASH_ClearFlag_EraseComplete(FLASH_Type * FLASHx)934 __STATIC_INLINE void FL_FLASH_ClearFlag_EraseComplete(FLASH_Type *FLASHx)
935 {
936 WRITE_REG(FLASHx->ISR, FLASH_ISR_ERD_Msk);
937 }
938
939 /**
940 * @}
941 */
942
943 /** @defgroup FLASH_FL_EF_Init Initialization and de-initialization functions
944 * @{
945 */
946
947 /**
948 * @}
949 */
950
951 /** @defgroup FLASH_FL_EF_Operation Opeartion functions
952 * @{
953 */
954
955 FL_ErrorStatus FL_FLASH_PageErase(FLASH_Type *FLASHx, uint32_t address);
956 FL_ErrorStatus FL_FLASH_SectorErase(FLASH_Type *FLASHx, uint32_t address);
957
958 FL_ErrorStatus FL_FLASH_Program_Word(FLASH_Type *FLASHx, uint32_t address, uint32_t data);
959 FL_ErrorStatus FL_FLASH_Program_Page(FLASH_Type *FLASHx, uint32_t pageNum, uint32_t *data);
960 FL_ErrorStatus FL_FLASH_Program_Sector(FLASH_Type *FLASHx, uint32_t sectorNum, uint32_t *data);
961
962 /**
963 * @}
964 */
965
966 /**
967 * @}
968 */
969
970 /**
971 * @}
972 */
973
974 #ifdef __cplusplus
975 }
976 #endif
977
978 #endif /* __FM33LC0XX_FL_FLASH_H*/
979
980 /*************************Py_Code_Generator Version: 0.1-0.14-0.2 @ 2020-12-15*************************/
981 /********************** (C) COPYRIGHT Fudan Microelectronics **** END OF FILE ***********************/
982