fm33lc0xx_fl_flash.h 37 KB

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