CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Include/ciu32l051_std_flash.h

609 lines
19 KiB
C
Raw Normal View History

/************************************************************************************************/
/**
* @file ciu32l051_std_flash.h
* @author MCU Ecosystem Development Team
* @brief FLASH STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD>FLASH<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/*<2A><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>*/
#ifndef CIU32L051_STD_FLASH_H
#define CIU32L051_STD_FLASH_H
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @defgroup FLASH FLASH
* @brief FLASH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*/
/************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std_common.h"
/*-------------------------------------------define---------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup FLASH_Constants FLASH Constants
* @brief FLASH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/* Flash<73><68>ȡ<EFBFBD><C8A1><EFBFBD>ʵȴ<CAB5><C8B4><EFBFBD><EFBFBD><EFBFBD> */
#define FLASH_LATENCY_0CLK FLASH_ACR_LATENCY_0CLK /**< <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ڣ<EFBFBD>0 HCLK */
#define FLASH_LATENCY_1CLK FLASH_ACR_LATENCY_1CLK /**< <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ڣ<EFBFBD>1 HCLK */
#define FLASH_LATENCY_2CLK FLASH_ACR_LATENCY_2CLK /**< <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ڣ<EFBFBD>2 HCLK */
/* Flash<73><68><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> */
#define FLASH_WAIT_PROGRAM (1U) /**< Flash<73><68><EFBFBD>̵ȴ<CCB5>ʱ<EFBFBD>䣨ms<6D><73> */
#define FLASH_WAIT_PAGE_ERASE (5U) /**< Flashҳ<68><D2B3><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD>䣨ms<6D><73> */
#define FLASH_WAIT_MASS_ERASE (50U) /**< FlashƬ<68><C6AC><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD>䣨ms<6D><73> */
/* Flash<73><68><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ */
#define FLASH_CR_KEY1 (0xE57A1A85U) /**< Flash<73><68><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ1 */
#define FLASH_CR_KEY2 (0x7C6E8391U) /**< Flash<73><68><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ2 */
/* Flashѡ<68><D1A1><EFBFBD>ֽڽ<D6BD><DABD><EFBFBD><EFBFBD><EFBFBD>Կ */
#define FLASH_OPT_KEY1 (0x6A894D7BU) /**< Flashѡ<68><D1A1><EFBFBD>ֽڽ<D6BD><DABD><EFBFBD><EFBFBD><EFBFBD>Կ1 */
#define FLASH_OPT_KEY2 (0x7C311F5AU) /**< Flashѡ<68><D1A1><EFBFBD>ֽڽ<D6BD><DABD><EFBFBD><EFBFBD><EFBFBD>Կ2 */
/* Flash<73><68><EFBFBD><EFBFBD>״̬ */
#define FLASH_FLAG_EOP FLASH_SR_EOP /**< Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־ */
#define FLASH_FLAG_BSY FLASH_SR_BSY /**< Flash<73><68><EFBFBD><EFBFBD>״̬<D7B4><CCAC>־ */
#define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /**< Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
#define FLASH_FLAG_PROGERR FLASH_SR_PROGERR /**< Flash<73><68><EFBFBD>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>־ */
#define FLASH_FLAG_FSTERR FLASH_SR_FSTERR /**< Flash<73><68><EFBFBD>ٱ<EFBFBD><D9B1>̴<EFBFBD><CCB4><EFBFBD><EFBFBD><EFBFBD>־ */
#define FLASH_FLAG_ALL_ERR (FLASH_FLAG_PROGERR | FLASH_FLAG_WRPERR \
| FLASH_SR_FSTERR) /**< Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
/* Flash<73>ж<EFBFBD>Դ */
#define FLASH_INTERRUPT_OPERR FLASH_CR_OPERRIE /**< Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
#define FLASH_INTERRUPT_EOP FLASH_CR_EOPIE /**< Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
/* Flash<73><68><EFBFBD><EFBFBD>ģʽ */
#define FLASH_ERASE_DISABLE FLASH_CR_ER_MODE_NONE /**< Flash<73>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ģʽ */
#define FLASH_ERASE_PAGE FLASH_CR_ER_MODE_PAGE /**< Flashҳ<68><D2B3><EFBFBD><EFBFBD>ģʽ */
#define FLASH_ERASE_MASS FLASH_CR_ER_MODE_MASS /**< Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
/* ѡ<><D1A1><EFBFBD>ֽ<EFBFBD>1 λ<><CEBB>ʹ<EFBFBD><CAB9> */
#define FLASH_BOR_ENABLE FLASH_OPTR1_BOR_EN /**< BORʹ<52><CAB9> */
#define FLASH_BOR_LEVEL_MASK FLASH_OPTR1_BOR_LEVEL_MASK /**< BOR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define FLASH_BOR_LEVEL_0 FLASH_OPTR1_BOR_LEVEL_0 /**< BOR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>/<2F>½<EFBFBD><C2BD><EFBFBD>ֵ<EFBFBD><D6B5>2.1/2.0V */
#define FLASH_BOR_LEVEL_1 FLASH_OPTR1_BOR_LEVEL_1 /**< BOR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>/<2F>½<EFBFBD><C2BD><EFBFBD>ֵ<EFBFBD><D6B5>2.3/2.2V */
#define FLASH_BOR_LEVEL_2 FLASH_OPTR1_BOR_LEVEL_2 /**< BOR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>/<2F>½<EFBFBD><C2BD><EFBFBD>ֵ<EFBFBD><D6B5>2.6/2.5V */
#define FLASH_BOR_LEVEL_3 FLASH_OPTR1_BOR_LEVEL_3 /**< BOR<4F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>/<2F>½<EFBFBD><C2BD><EFBFBD>ֵ<EFBFBD><D6B5>2.9/2.8V */
#define FLASH_RDP_LEVEL_MASK FLASH_OPTR1_RDP_MASK /**< RDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define FLASH_RDP_LEVEL_0 (0x000000AAU) /**< RDP<44><50><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>0 */
#define FLASH_RDP_LEVEL_1 (0x00000000U) /**< RDP<44><50><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>1 */
#define FLASH_RDP_LEVEL_2 (0x00000055U) /**< RDP<44><50><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>2 */
/* ѡ<><D1A1><EFBFBD>ֽ<EFBFBD>2 λ<><CEBB>ʹ<EFBFBD><CAB9> */
#define FLASH_BOOT_SEL_SW FLASH_OPTR2_BOOT_SEL /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ѡ<EFBFBD><D1A1><EFBFBD>ֽ<EFBFBD>BOOT0_SW<53><57><EFBFBD><EFBFBD> */
#define FLASH_BOOT0_SW_1 FLASH_OPTR2_BOOT0_SW /**< <20><><EFBFBD><EFBFBD>BOOT0_SWΪ1 */
#define FLASH_BOOT1_SW_1 FLASH_OPTR2_BOOT1_SW /**< <20><><EFBFBD><EFBFBD>BOOT1_SWΪ1 */
#define FLASH_VBAT_MODE_ENABLE FLASH_OPTR2_VBAT_MODE_EN /**< VBATģʽʹ<CABD><CAB9> */
#define FLASH_IWDG_STOP_MODE_NORMAL FLASH_OPTR2_IWDG_STOP /**< IWDG<44><47>Stopģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define FLASH_STOP_RESET_DISABLE FLASH_OPTR2_RST_STOP /**< ִ<>н<EFBFBD><D0BD><EFBFBD>Stopģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Stop<6F><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ */
/* Option Bytes<65><73>ַ */
#define FLASH_OB_OPTR1_ADDR (0x1FFF0000) /**< ѡ<><D1A1><EFBFBD>ֽ<EFBFBD>1<EFBFBD><EFBFBD><E6B4A2>ַ */
#define FLASH_OB_OPTR2_ADDR (0x1FFF0004) /**< ѡ<><D1A1><EFBFBD>ֽ<EFBFBD>2<EFBFBD><EFBFBD><E6B4A2>ַ */
#define FLASH_OB_WRP1A_START_ADDR (0x1FFF0008) /**< д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41>ʼ<EFBFBD><CABC>ַ<EFBFBD><EFBFBD><E6B4A2>ַ */
#define FLASH_OB_WRP1A_END_ADDR (0x1FFF000C) /**< д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><E6B4A2>ַ */
#define FLASH_OB_WRP1B_START_ADDR (0x1FFF0010) /**< д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><42>ʼ<EFBFBD><CABC>ַ<EFBFBD><EFBFBD><E6B4A2>ַ */
#define FLASH_OB_WRP1B_END_ADDR (0x1FFF0014) /**< д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><E6B4A2>ַ */
/**
* @}
*/
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup FLASH_External_Functions FLASH External Functions
* @brief FLASH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @{
*
*/
/************************************************************************************************/
/**
* @brief Flash<EFBFBD><EFBFBD><EFBFBD>ƼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note FLASH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRKEY<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>´θ<EFBFBD>λ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_unlock(void)
{
if ((FLASH->CR & FLASH_CR_LOCK) == FLASH_CR_LOCK)
{
FLASH->CRKEY = FLASH_CR_KEY1;
FLASH->CRKEY = FLASH_CR_KEY2;
}
}
/**
* @brief Flash<EFBFBD><EFBFBD><EFBFBD>ƼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_lock(void)
{
FLASH->CR |= FLASH_CR_LOCK;
}
/**
* @brief <EFBFBD><EFBFBD>ȡFlash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @retval bool Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
*/
__STATIC_INLINE bool std_flash_get_lock_status(void)
{
return ((FLASH->CR & FLASH_CR_LOCK) == FLASH_CR_LOCK);
}
/**
* @brief Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽڽ<EFBFBD><EFBFBD><EFBFBD>
* @note FLASHѡ<EFBFBD><EFBFBD><EFBFBD>ֽڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OPTKEY<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>´θ<EFBFBD>λ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_opt_unlock(void)
{
if ((FLASH->CR & FLASH_CR_OPTLOCK) == FLASH_CR_OPTLOCK)
{
FLASH->OPTKEY = FLASH_OPT_KEY1;
FLASH->OPTKEY = FLASH_OPT_KEY2;
}
}
/**
* @brief Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_opt_lock(void)
{
FLASH->CR |= FLASH_CR_OPTLOCK;
}
/**
* @brief <EFBFBD><EFBFBD>ȡFlashѡ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @retval bool Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
*/
__STATIC_INLINE bool std_flash_get_opt_lock_status(void)
{
return ((FLASH->CR & FLASH_CR_OPTLOCK) == FLASH_CR_OPTLOCK);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>FLASH<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ʵȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param latency <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ʵȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg FLASH_LATENCY_0CLK
* @arg FLASH_LATENCY_1CLK
* @arg FLASH_LATENCY_2CLK
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_set_latency(uint32_t latency)
{
MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, latency);
}
/**
* @brief <EFBFBD><EFBFBD>ȡFLASH<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ʵȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ʵȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg FLASH_LATENCY_0CLK
* @arg FLASH_LATENCY_1CLK
* @arg FLASH_LATENCY_2CLK
*/
__STATIC_INLINE uint32_t std_flash_get_latency(void)
{
return (FLASH->ACR & FLASH_ACR_LATENCY);
}
/**
* @brief ʹ<EFBFBD><EFBFBD>FLASH<EFBFBD>ж<EFBFBD>
* @param interrupts <EFBFBD>ж<EFBFBD>Դ
* @arg FLASH_INTERRUPT_OPERR
* @arg FLASH_INTERRUPT_EOP
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_interrupt_enable(uint32_t interrupts)
{
FLASH->CR |= interrupts;
}
/**
* @brief <EFBFBD><EFBFBD>ֹFLASH<EFBFBD>ж<EFBFBD>
* @param interrupts <EFBFBD>ж<EFBFBD>Դ
* @arg FLASH_INTERRUPT_OPERR
* @arg FLASH_INTERRUPT_EOP
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_interrupt_disable(uint32_t interrupts)
{
FLASH->CR &= (~interrupts);
}
/**
* @brief <EFBFBD><EFBFBD>ȡFLASH<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>״̬
* @param interrupt <EFBFBD>ж<EFBFBD>Դ
* @arg FLASH_INTERRUPT_OPERR
* @arg FLASH_INTERRUPT_EOP
* @retval bool FLASH<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>״̬
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD>ж<EFBFBD>δʹ<EFBFBD><EFBFBD>
*/
__STATIC_INLINE bool std_flash_get_interrupt_enable(uint32_t interrupt)
{
return ((FLASH->CR & interrupt) == interrupt);
}
/**
* @brief <EFBFBD><EFBFBD>ȡFLASH״̬<EFBFBD><EFBFBD>־
* @param flag ״̬<EFBFBD><EFBFBD>־
* @arg FLASH_FLAG_EOP
* @arg FLASH_FLAG_BSY
* @arg FLASH_FLAG_WRPERR
* @arg FLASH_FLAG_PROGERR
* @arg FLASH_FLAG_FSTERR
* @arg FLASH_FLAG_ALL_ERR
* @retval bool FLASH״̬<EFBFBD><EFBFBD>־
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>λ
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>־δ<EFBFBD><EFBFBD>λ
*/
__STATIC_INLINE bool std_flash_get_flag(uint32_t flag)
{
return ((FLASH->SR & flag) == flag);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>FLASH״̬<EFBFBD><EFBFBD>־
* @param flags ״̬<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg FLASH_FLAG_EOP
* @arg FLASH_FLAG_WRPERR
* @arg FLASH_FLAG_PROGERR
* @arg FLASH_FLAG_FSTERR
* @arg FLASH_FLAG_ALL_ERR
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_clear_flag(uint32_t flags)
{
FLASH->SR = flags;
}
/**
* @brief ʹ<EFBFBD><EFBFBD>Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_program_enable(void)
{
FLASH->CR |= FLASH_CR_PG_MODE;
}
/**
* @brief <EFBFBD><EFBFBD>ֹFlash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_program_disable(void)
{
FLASH->CR &= (~FLASH_CR_PG_MODE);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_erase_start(void)
{
FLASH->CR |= FLASH_CR_ERASE;
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @arg FLASH_ERASE_DISABLE
* @arg FLASH_ERASE_PAGE
* @arg FLASH_ERASE_MASS
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_set_erase_mode(uint32_t mode)
{
MODIFY_REG(FLASH->CR, FLASH_CR_ER_MODE, mode);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
* @param index <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_set_erase_index(uint32_t index)
{
MODIFY_REG(FLASH->CR, FLASH_CR_PNB, (index << FLASH_CR_PNB_POS));
}
/**
* @brief <EFBFBD><EFBFBD>ȡFlash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_flash_get_erase_index(void)
{
return ((FLASH->CR & FLASH_CR_PNB) >> FLASH_CR_PNB_POS);
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽڲ<EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽڲ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽڼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_opt_erase_start(void)
{
FLASH->CR |= FLASH_CR_OPT_ERASE;
}
/**
* @brief Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽڼ<EFBFBD><EFBFBD><EFBFBD>
* @note ִ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ֽڼ<EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>Flashѡ<EFBFBD><EFBFBD><EFBFBD>ֽڼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ֽڼ<EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD>λ
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_opt_launch(void)
{
FLASH->CR |= FLASH_CR_OBL_LAUNCH;
}
/**
* @brief ʹ<EFBFBD><EFBFBD>Flash<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD>ģʽ
* @note <EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>RAM<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
__STATIC_INLINE void std_flash_fast_program_enable(void)
{
FLASH->CR |= FLASH_CR_FSTPG_MODE;
}
/**
* @brief <EFBFBD><EFBFBD>ѯFlash<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD>״̬
* @note <EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>RAM<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>
* @retval bool <EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>־
* @arg true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD>̽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE bool std_flash_get_fstpg_state(void)
{
return ((FLASH->CR & FLASH_CR_FSTPG_MODE) == FLASH_CR_FSTPG_MODE);
}
/**
* @brief <EFBFBD><EFBFBD>ȡѡ<EFBFBD><EFBFBD><EFBFBD>ֽڼĴ<EFBFBD><EFBFBD><EFBFBD>1
* @retval uint32_t ѡ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*/
__STATIC_INLINE uint32_t std_flash_get_opt1(void)
{
return (FLASH->OPTR1);
}
/**
* @brief <EFBFBD><EFBFBD>ȡFLASH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
* @retval uint32_t FLASH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
* @arg FLASH_RDP_LEVEL_0
* @arg FLASH_RDP_LEVEL_1
* @arg FLASH_RDP_LEVEL_2
*/
__STATIC_INLINE uint32_t std_flash_get_rdp_level(void)
{
return (FLASH->OPTR1 & FLASH_OPTR1_RDP);
}
/**
* @brief <EFBFBD><EFBFBD>ȡBOR<EFBFBD><EFBFBD>ֵ<EFBFBD>ȼ<EFBFBD>
* @retval uint32_t FLASH<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
* @arg FLASH_BOR_LEVEL_0
* @arg ...
* @arg FLASH_BOR_LEVEL_3
*/
__STATIC_INLINE uint32_t std_flash_get_bor_level(void)
{
return (FLASH->OPTR1 & FLASH_OPTR1_BOR_LEVEL);
}
/**
* @brief <EFBFBD><EFBFBD>ȡBORʹ<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>
* @retval bool BORʹ<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>
* @arg true <EFBFBD><EFBFBD>ʾBORʹ<EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾBOR<EFBFBD><EFBFBD>ֹ
*/
__STATIC_INLINE bool std_flash_get_bor_en(void)
{
return ((FLASH->OPTR1 & FLASH_OPTR1_BOR_EN) == FLASH_OPTR1_BOR_EN);
}
/**
* @brief <EFBFBD><EFBFBD>ȡѡ<EFBFBD><EFBFBD><EFBFBD>ֽڼĴ<EFBFBD><EFBFBD><EFBFBD>2
* @retval uint32_t ѡ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*/
__STATIC_INLINE uint32_t std_flash_get_opt2(void)
{
return (FLASH->OPTR2);
}
/**
* @brief <EFBFBD><EFBFBD>ȡоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽBOOT_SEL
* @retval bool BOOT_SELλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @arg true <EFBFBD><EFBFBD>ʾBOOT_SELΪ1
* @arg false <EFBFBD><EFBFBD>ʾBOOT_SELΪ0
*/
__STATIC_INLINE bool std_flash_get_boot_sel(void)
{
return ((FLASH->OPTR2 & FLASH_OPTR2_BOOT_SEL) == FLASH_OPTR2_BOOT_SEL);
}
/**
* @brief <EFBFBD><EFBFBD>ȡоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽBOOT0_SW
* @retval bool BOOT0_SWλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @arg true <EFBFBD><EFBFBD>ʾBOOT0_SWΪ1
* @arg false <EFBFBD><EFBFBD>ʾBOOT0_SWΪ0
*/
__STATIC_INLINE bool std_flash_get_boot0_sw(void)
{
return ((FLASH->OPTR2 & FLASH_OPTR2_BOOT0_SW) == FLASH_OPTR2_BOOT0_SW);
}
/**
* @brief <EFBFBD><EFBFBD>ȡоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽBOOT1_SW
* @retval bool BOOT1_SWλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @arg true <EFBFBD><EFBFBD>ʾBOOT1_SWΪ1
* @arg false <EFBFBD><EFBFBD>ʾBOOT1_SWΪ0
*/
__STATIC_INLINE bool std_flash_get_boot1_sw(void)
{
return ((FLASH->OPTR2 & FLASH_OPTR2_BOOT1_SW) == FLASH_OPTR2_BOOT1_SW);
}
/**
* @brief <EFBFBD><EFBFBD>ȡVBATʹ<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>
* @retval bool VBATģʽʹ<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>
* @arg true <EFBFBD><EFBFBD>ʾVBATģʽʹ<EFBFBD><EFBFBD>
* @arg false <EFBFBD><EFBFBD>ʾVBATģʽ<EFBFBD><EFBFBD>ֹ
*/
__STATIC_INLINE bool std_flash_get_vbat_mode(void)
{
return ((FLASH->OPTR2 & FLASH_OPTR2_VBAT_MODE_EN) == FLASH_OPTR2_VBAT_MODE_EN);
}
/**
* @brief <EFBFBD><EFBFBD>ȡIWDG<EFBFBD><EFBFBD>STOPģʽ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval bool IWDG_STOP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg true IWDG<EFBFBD><EFBFBD>STOPģʽ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg false IWDG<EFBFBD><EFBFBD>STOPģʽ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
__STATIC_INLINE bool std_flash_get_iwdg_stop(void)
{
return ((FLASH->OPTR2 & FLASH_OPTR2_IWDG_STOP) == FLASH_OPTR2_IWDG_STOP);
}
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>STOPģʽ<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval bool RST_STOP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg true ִ<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>STOPģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STOPģʽ
* @arg false ִ<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>STOPģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
*/
__STATIC_INLINE bool std_flash_get_rst_stop(void)
{
return ((FLASH->OPTR2 & FLASH_OPTR2_RST_STOP) == FLASH_OPTR2_RST_STOP);
}
/**
* @brief <EFBFBD><EFBFBD>ȡд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD>ʼҳ<EFBFBD><EFBFBD>
* @retval uint32_t д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD>ʼҳ<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_flash_get_wrpa_start(void)
{
return (FLASH->WRP1AS & FLASH_WRP1AS_WRP1A_START);
}
/**
* @brief <EFBFBD><EFBFBD>ȡд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
* @retval uint32_t д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_flash_get_wrpa_end(void)
{
return (FLASH->WRP1AE & FLASH_WRP1AE_WRP1A_END);
}
/**
* @brief <EFBFBD><EFBFBD>ȡд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><EFBFBD>ʼҳ<EFBFBD><EFBFBD>
* @retval uint32_t д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><EFBFBD>ʼҳ<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_flash_get_wrpb_start(void)
{
return (FLASH->WRP1BS & FLASH_WRP1BS_WRP1B_START);
}
/**
* @brief <EFBFBD><EFBFBD>ȡд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
* @retval uint32_t д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
*/
__STATIC_INLINE uint32_t std_flash_get_wrpb_end(void)
{
return (FLASH->WRP1BE & FLASH_WRP1BE_WRP1B_END);
}
/**
* @brief <EFBFBD><EFBFBD>ȡоƬ<EFBFBD>ͺ<EFBFBD>
* @retval uint32_t оƬ<EFBFBD>ͺ<EFBFBD>
*/
__STATIC_INLINE uint32_t std_flash_get_device_type(void)
{
return (*(uint32_t *)DEVICE_TYPE);
}
/**
* @brief <EFBFBD><EFBFBD>ȡFlash<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>С
* @retval uint32_t Flash<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>С
*/
__STATIC_INLINE uint32_t std_flash_get_flash_size(void)
{
return (*(uint32_t *)USERFLASH_SIZE);
}
/**
* @brief <EFBFBD><EFBFBD>ȡSRAM<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>С
* @retval uint32_t SRAM<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>С
*/
__STATIC_INLINE uint32_t std_flash_get_sram_size(void)
{
return (*(uint32_t *)SRAM_SIZE);
}
std_status_t std_flash_mass_erase(void);
std_status_t std_flash_page_erase(uint32_t page_index);
std_status_t std_flash_erase(uint32_t mode, uint32_t index);
std_status_t std_flash_word_program(uint32_t address, uint32_t prog_data);
std_status_t std_flash_opt_erase(void);
std_status_t std_flash_wait_for_last_operation(uint32_t timeout);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
/**
* @}
*/
/**
* @}
*/
#endif /* CIU32L051_STD_FLASH_H */