/** ****************************************************************************** * @file tae32f53xx_ll_flash.h * @author MCD Application Team * @brief Head file for FLASH module LL driver. * ****************************************************************************** * @attention * *

© Copyright (c) 2020 Tai-Action. * All rights reserved.

* * This software is licensed by Tai-Action under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef _TAE32F53XX_LL_FLASH_H_ #define _TAE32F53XX_LL_FLASH_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Includes ------------------------------------------------------------------*/ #include "tae32f53xx_ll_def.h" /** @addtogroup TAE32F53xx_LL_Driver * @{ */ /** @addtogroup FLASH_LL * @{ */ /* Exported types ------------------------------------------------------------*/ /** @defgroup FLASH_LL_Exported_Types FLASH LL Exported Types * @brief Set the read protection level * @{ */ /** @brief Set the read protection level */ typedef enum { FLASH_RDP_LEVEL_0 = 0xAAU, /*!< FLASH Read Protection Level 0 */ FLASH_RDP_LEVEL_1 = 0xFFU, /*!< FLASH Read Protection Level 1 */ FLASH_RDP_LEVEL_2 = 0xCCU, /*!< FLASH Read Protection Level 2, Warning: When enabling read protection level 2,it's no more possible to go back to level 1 or 0 */ } FLASH_RDPLVETypeDef; /** @brief Write Protection State */ typedef enum { FLASH_WRPSTATE_DISABLE = 0x00U, /*!< Disable the write protection of the desired sections */ FLASH_WRPSTATE_ENABLE = 0x01U, /*!< Enable the write protection of the desired sections */ } FLASH_WRPSTETypeDef; /** * @brief Write Permission Area Control. Each AREA control 8 sections (refer to one area) in Main Memory Array */ typedef enum { FLASH_WRP_AREA_1 = 0x00000001, /*!< FLASH Write Protection Area 1 */ FLASH_WRP_AREA_2 = 0x00000002, /*!< FLASH Write Protection Area 2 */ FLASH_WRP_AREA_3 = 0x00000004, /*!< FLASH Write Protection Area 3 */ FLASH_WRP_AREA_4 = 0x00000008, /*!< FLASH Write Protection Area 4 */ FLASH_WRP_AREA_5 = 0x00000010, /*!< FLASH Write Protection Area 5 */ FLASH_WRP_AREA_6 = 0x00000020, /*!< FLASH Write Protection Area 6 */ FLASH_WRP_AREA_7 = 0x00000040, /*!< FLASH Write Protection Area 7 */ FLASH_WRP_AREA_8 = 0x00000080, /*!< FLASH Write Protection Area 8 */ FLASH_WRP_AREA_9 = 0x00000100, /*!< FLASH Write Protection Area 9 */ FLASH_WRP_AREA_10 = 0x00000200, /*!< FLASH Write Protection Area 10 */ FLASH_WRP_AREA_11 = 0x00000400, /*!< FLASH Write Protection Area 11 */ FLASH_WRP_AREA_12 = 0x00000800, /*!< FLASH Write Protection Area 12 */ FLASH_WRP_AREA_13 = 0x00001000, /*!< FLASH Write Protection Area 13 */ FLASH_WRP_AREA_14 = 0x00002000, /*!< FLASH Write Protection Area 14 */ FLASH_WRP_AREA_15 = 0x00004000, /*!< FLASH Write Protection Area 15 */ FLASH_WRP_AREA_16 = 0x00008000, /*!< FLASH Write Protection Area 16 */ FLASH_WRP_AREA_17 = 0x00010000, /*!< FLASH Write Protection Area 17 */ FLASH_WRP_AREA_18 = 0x00020000, /*!< FLASH Write Protection Area 18 */ FLASH_WRP_AREA_19 = 0x00040000, /*!< FLASH Write Protection Area 19 */ FLASH_WRP_AREA_20 = 0x00080000, /*!< FLASH Write Protection Area 20 */ FLASH_WRP_AREA_ALL = 0x000FFFFF, /*!< FLASH Write Protection Area ALL */ FLASH_WRP_AREA_Msk = FLASH_WRP_AREA_ALL, /*!< FLASH Write Protection Area Mask */ } FLASH_WRPAREAETypeDef; /** * @} */ /* Exported constants --------------------------------------------------------*/ /** @defgroup FLASH_LL_Exported_Constants FLASH LL Exported Constants * @brief FLASH LL Exported Constants * @{ */ /** @defgroup FLASH_Error_Codes FLASH Error Codes * @{ */ #define FLASH_ERROR_NONE 0x00U /*!< No error */ #define FLASH_ERROR_OPT 0x01U /*!< Operation error */ #define FLASH_ERROR_WRP 0x02U /*!< Write protection error */ #define FLASH_ERROR_RDP 0x04U /*!< Read protection error */ #define FLASH_ERROR_ECC 0x08U /*!< ECC validity error */ /** * @} */ /** @defgroup FLASH_Program_Width FLASH Program Width * @{ */ #define FLASH_PROG_DATA_WIDTH 16U /*!< Data width in a single programming operation.Number in bytes */ /** * @} */ /** @defgroup FLASH_Keys FLASH Keys * @{ */ #define FLASH_KEY1 0x32107654U /*!< FLASH key1 */ #define FLASH_KEY2 0xFEDCBA98U /*!< FLASH key2: used with FLASH_KEY1 to unlock the FLASH Program/Erase features */ #define FLASH_OP_KEY 0x50035003U /*!< FLASH Operation Protection Key : Unlock the operation of FLASH Read/Write Protection Register */ #define FLASH_PWR_KEY 0x50030000U /*!< FLASH pwr key: unlock the FLASH Standby/Wakeup features */ /** * @} */ /** @defgroup FLASH_Flag_definition FLASH Flag Definition * @{ */ #define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Flag BSY */ #define FLASH_FLAG_DIF FLASH_ISR_DIF /*!< FLASH Flag DIF */ #define FLASH_FLAG_ECCEIF FLASH_ISR_ECCEIF /*!< FLASH Flag ECCEIF */ #define FLASH_FLAG_RPEIF FLASH_ISR_RPEIF /*!< FLASH Flag RPEIF */ #define FLASH_FLAG_WPEIF FLASH_ISR_WPEIF /*!< FLASH Flag WPEIF */ #define FLASH_FLAG_OPTEIF FLASH_ISR_OPTEIF /*!< FLASH Flag OPEIF */ /** * @} */ /** * @} */ /* Exported macro ------------------------------------------------------------*/ /** @defgroup FLASH_LL_Exported_Macros FLASH LL Exported Macros * @brief FLASH LL Exported Macros * @{ */ /** * @brief Enable FLASH I BUS Prefetch feature. * @note Prefetch feature should not be enabled when CPU frequency is lower than 40MHz. * @param None * @return None */ #define __LL_FLASH_I_BUS_PREFETCH_ENABLE() SET_BIT(FLASH->CR, FLASH_CR_IBPE) /** * @brief Disable FLASH I BUS Prefetch feature. * @param None * @return None */ #define __LL_FLASH_I_BUS_PREFETCH_DISABLE() CLEAR_BIT(FLASH->CR, FLASH_CR_IBPE) /** * @brief Enable FLASH D BUS Prefetch feature. * @note Prefetch feature should not be enabled when CPU frequency is lower than 40MHz. * @param None * @return None */ #define __LL_FLASH_D_BUS_PREFETCH_ENABLE() SET_BIT(FLASH->CR, FLASH_CR_DBPE) /** * @brief Disable FLASH D BUS Prefetch feature. * @param None * @return None */ #define __LL_FLASH_D_BUS_PREFETCH_DISABLE() CLEAR_BIT(FLASH->CR, FLASH_CR_DBPE) /** * @brief FLASH Standby. * Flash will enter standby mode aim for low power mode. * @param None * @return None */ #define __LL_FLASH_STANDBY_ENABLE() do{ WRITE_REG(FLASH->LPR, FLASH_PWR_KEY); \ SET_BIT(FLASH->LPR, FLASH_LPR_STDBY); \ } while (0); /** * @brief FLASH Wakeup. * Flash will exit from standby mode. * @param None * @return None */ #define __LL_FLASH_WAKEUP_ENABLE() do{ WRITE_REG(FLASH->LPR, FLASH_PWR_KEY); \ SET_BIT(FLASH->LPR, FLASH_LPR_WKUP); \ } while (0); /** * @brief Check whether the specified status flag in FLASH_SR Register is SET or not. * @param __FLAG__ specifies the FLASH status flag to check. * This parameter can be ONE of the following values: * @arg FLASH_FLAG_BSY : FLASH BUSY Status * @return The new state of __FLAG__ (SET or RESET). */ #define __LL_FLASH_GET_STATUS_FLAG(__FLAG__) ((READ_BIT(FLASH->SR, (__FLAG__)) == (__FLAG__)) ? SET : RESET) /** * @brief Check whether the specified interrupt pending flag in FLASH_ISR Register is SET or not. * @param __FLAG__ specifies the FLASH interrupt pending flag to check. * This parameter can be ONE of the following values: * @arg FLASH_FLAG_DIF : Done * @arg FLASH_FLAG_ECCEIF : ECC Error * @arg FLASH_FLAG_RPEIF : Read Protection Error * @arg FLASH_FLAG_WPEIF : Write Protection Error * @arg FLASH_FLAG_OPTEIF : Operation Error * @return The new state of __FLAG__ (SET or RESET). */ #define __LL_FLASH_GET_PENDING_FLAG(__FLAG__) ((READ_BIT(FLASH->ISR, (__FLAG__)) == (__FLAG__)) ? SET : RESET) /** * @brief Clear the FLASH's Pending Register flag. * @param __FLAG__ specifies the FLASH pending flags to clear. * This parameter can be any combination of the following values: * @arg FLASH_FLAG_DIF : Done * @arg FLASH_FLAG_ECCEIF : ECC Error * @arg FLASH_FLAG_RPEIF : Read Protection Error * @arg FLASH_FLAG_WPEIF : Write Protection Error * @arg FLASH_FLAG_OPTEIF : Operation Error * @return The new state of __FLAG__ (SET or RESET). */ #define __LL_FLASH_CLEAR_PENDING_FLAG(__FLAG__) WRITE_REG(FLASH->ISR, (__FLAG__)) /** * @} */ /* Exported functions --------------------------------------------------------*/ /** @addtogroup FLASH_LL_Exported_Functions * @{ */ /** @addtogroup FLASH_LL_Exported_Functions_Group1 * @{ */ LL_StatusETypeDef LL_FLASH_ReadProtectLevelConfig(FLASH_RDPLVETypeDef RDPLevel); LL_StatusETypeDef LL_FLASH_WriteProtectConfig(FLASH_WRPAREAETypeDef WRPAreas, FLASH_WRPSTETypeDef WRPState); /** * @} */ /** @addtogroup FLASH_LL_Exported_Functions_Group2 * @{ */ LL_StatusETypeDef LL_FLASH_WaitForLastOperation(uint32_t Timeout); uint32_t LL_FLASH_GetError(void); /** * @} */ /** @addtogroup FLASH_LL_Exported_Functions_Group3 * @{ */ /** * @brief Unlock the FLASH Program/Erase access. * @param None * @return LL Status */ __STATIC_INLINE LL_StatusETypeDef LL_FLASH_Unlock(void) { if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Program/Erase access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); /* Verify FLASH is unlocked */ if (READ_BIT(FLASH->CR, FLASH_CR_LOCK_Msk) != RESET) { return LL_ERROR; } } /* Return function status */ return LL_OK; } /** * @brief Lock the FLASH Program/Erase access. * @param None * @return LL Status */ __STATIC_INLINE LL_StatusETypeDef LL_FLASH_Lock(void) { /* Set the LOCK Bit to lock the FLASH Program/Erase access */ SET_BIT(FLASH->CR, FLASH_CR_LOCK); /* Return function status */ return LL_OK; } /** * @brief Unlock the FLASH write/read Protection Feature access. * @param None * @return LL Status */ __STATIC_INLINE LL_StatusETypeDef LL_FLASH_PF_Unlock(void) { /* Unlock the FLASH Read/Write Operation Protection access */ WRITE_REG(FLASH->KEYR, FLASH_OP_KEY); /* Return function status */ return LL_OK; } /** * @brief Lock the FLASH write/read Protection Feature access. * @param None * @return LL Status */ __STATIC_INLINE LL_StatusETypeDef LL_FLASH_PF_Lock(void) { /* Lock the Read/Write Operation Protection access */ WRITE_REG(FLASH->KEYR, 0x00000000UL); /* Return function status */ return LL_OK; } /** * @brief Launch the write/read Protection Feature reloading. * @param None * @retval None */ __STATIC_INLINE LL_StatusETypeDef LL_FLASH_PF_Launch(void) { /* Set the LAU bit in FLASH_CR register to reload */ SET_BIT(FLASH->CR, FLASH_CR_LAU); /* Return function status */ return LL_OK; } LL_StatusETypeDef LL_FLASH_Program(uint32_t Address, uint8_t Data[FLASH_PROG_DATA_WIDTH]); LL_StatusETypeDef LL_FLASH_MultiSectorsErase(uint16_t Sector, uint16_t Num, uint16_t *SectorError); LL_StatusETypeDef LL_FLASH_SectorErase(uint16_t Sector); LL_StatusETypeDef LL_FLASH_ChipErase(void); /** * @} */ /** * @} */ /* Private types -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private constants ---------------------------------------------------------*/ /** @defgroup FLASH_LL_Private_Constants FLASH LL Private Constants * @brief FLASH LL Private Constants * @{ */ #define FLASH_PROGRAM_ADDRESS_MASK 0x00FFFFFFU /*!< Program address mask */ #define FLASH_TIMEOUT_MAX_VALUE 300U /*!< Max timeout for flash operations. Default 300 ticks */ /** * @} */ /* Private macros ------------------------------------------------------------*/ /** @defgroup FLASH_LL_Private_Macros FLASH LL Private Macros * @brief FLASH LL Private Macros * @{ */ /** * @brief Judge is write protect state or not * @param STATE state to judge * @retval 0 isn't write protect state * @retval 1 is write protect state */ #define IS_WRITE_PROTECT_STATE(STATE) (((STATE) == FLASH_WRPSTATE_DISABLE) || \ /** * @brief Judge is flash program address align 128bit or not * @param ADDRESS address to judge * @retval 0 isn't flash program address align 128bit * @retval 1 is flash program address align 128bit */ #define IS_FLASH_PROGRAM_ADDRESS_ALIGN_128BIT(ADDRESS) (((ADDRESS) & 0xF) == 0x00U) /** * @brief Judge is flash sector or not * @param SECTOR sector to judge * @retval 0 isn't flash sector * @retval 1 is flash sector */ #define IS_FLASH_NB_SECTORS(SECTOR) ((SECTOR) < 160U) /** * @} */ /* Private functions ---------------------------------------------------------*/ /** * @} */ /** * @} */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _TAE32F53XX_LL_FLASH_H_ */ /************************* (C) COPYRIGHT Tai-Action *****END OF FILE***********/