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