488 lines
16 KiB
C
488 lines
16 KiB
C
|
|
/**
|
||
|
|
*******************************************************************************
|
||
|
|
* @file hc32_ll_efm.h
|
||
|
|
* @brief This file contains all the functions prototypes of the EFM driver
|
||
|
|
* library.
|
||
|
|
@verbatim
|
||
|
|
Change Logs:
|
||
|
|
Date Author Notes
|
||
|
|
2022-03-31 CDT First version
|
||
|
|
2022-10-31 CDT Add Flash protect level define
|
||
|
|
2023-01-15 CDT Code refine
|
||
|
|
2023-09-30 CDT Add FLASH security addr define
|
||
|
|
@endverbatim
|
||
|
|
*******************************************************************************
|
||
|
|
* Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved.
|
||
|
|
*
|
||
|
|
* This software component is licensed by XHSC 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
|
||
|
|
*
|
||
|
|
*******************************************************************************
|
||
|
|
*/
|
||
|
|
#ifndef __HC32_LL_EFM_H__
|
||
|
|
#define __HC32_LL_EFM_H__
|
||
|
|
|
||
|
|
/* C binding of definitions if building with C++ compiler */
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C"
|
||
|
|
{
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Include files
|
||
|
|
******************************************************************************/
|
||
|
|
#include "hc32_ll_def.h"
|
||
|
|
|
||
|
|
#include "hc32f4xx.h"
|
||
|
|
#include "hc32f4xx_conf.h"
|
||
|
|
/**
|
||
|
|
* @addtogroup LL_Driver
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @addtogroup LL_EFM
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
#if (LL_EFM_ENABLE == DDL_ON)
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global type definitions ('typedef')
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Global_Types EFM Global Types
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
/**
|
||
|
|
* @brief EFM unique ID definition
|
||
|
|
*/
|
||
|
|
typedef struct {
|
||
|
|
uint32_t u32UniqueID0; /*!< unique ID 0. */
|
||
|
|
uint32_t u32UniqueID1; /*!< unique ID 1. */
|
||
|
|
uint32_t u32UniqueID2; /*!< unique ID 2. */
|
||
|
|
} stc_efm_unique_id_t;
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
uint32_t u32State;
|
||
|
|
uint32_t u32Addr;
|
||
|
|
uint32_t u32Size;
|
||
|
|
} stc_efm_remap_init_t;
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global pre-processor symbols/macros ('#define')
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Global_Macros EFM Global Macros
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Address EFM Address Area
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_START_ADDR (0x00000000UL) /*!< Flash start address */
|
||
|
|
|
||
|
|
#define EFM_END_ADDR (0x0007FFFFUL) /*!< Flash end address */
|
||
|
|
#define EFM_OTP_START_ADDR (0x03000C00UL) /*!< OTP start address */
|
||
|
|
#define EFM_OTP_END_ADDR (0x03000FFBUL) /*!< OTP end address */
|
||
|
|
#define EFM_OTP_LOCK_ADDR_START (0x03000FC0UL) /*!< OTP lock start address */
|
||
|
|
#define EFM_OTP_LOCK_ADDR_END (0x03000FFCUL) /*!< OTP lock end address */
|
||
|
|
#define EFM_SECURITY_START_ADDR (0x0317FFE0UL) /*!< Flash security start address */
|
||
|
|
#define EFM_SECURITY_END_ADDR (0x0317FFFFUL) /*!< Flash security end address */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Chip_Sel EFM Chip Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_CHIP_ALL (EFM_FSTP_FSTP)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Bus_Status EFM Bus Status
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_BUS_HOLD (0x0UL) /*!< Bus busy while flash program or erase */
|
||
|
|
#define EFM_BUS_RELEASE (0x1UL) /*!< Bus release while flash program or erase */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Wait_Cycle EFM Wait Cycle
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define EFM_WAIT_CYCLE0 (0U << EFM_FRMC_FLWT_POS) /*!< Don't insert read wait cycle */
|
||
|
|
#define EFM_WAIT_CYCLE1 (1U << EFM_FRMC_FLWT_POS) /*!< Insert 1 read wait cycle */
|
||
|
|
|
||
|
|
#define EFM_WAIT_CYCLE2 (2U << EFM_FRMC_FLWT_POS) /*!< Insert 2 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE3 (3U << EFM_FRMC_FLWT_POS) /*!< Insert 3 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE4 (4U << EFM_FRMC_FLWT_POS) /*!< Insert 4 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE5 (5U << EFM_FRMC_FLWT_POS) /*!< Insert 5 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE6 (6U << EFM_FRMC_FLWT_POS) /*!< Insert 6 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE7 (7U << EFM_FRMC_FLWT_POS) /*!< Insert 7 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE8 (8U << EFM_FRMC_FLWT_POS) /*!< Insert 8 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE9 (9U << EFM_FRMC_FLWT_POS) /*!< Insert 9 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE10 (10U << EFM_FRMC_FLWT_POS) /*!< Insert 10 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE11 (11U << EFM_FRMC_FLWT_POS) /*!< Insert 11 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE12 (12U << EFM_FRMC_FLWT_POS) /*!< Insert 12 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE13 (13U << EFM_FRMC_FLWT_POS) /*!< Insert 13 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE14 (14U << EFM_FRMC_FLWT_POS) /*!< Insert 14 read wait cycles */
|
||
|
|
#define EFM_WAIT_CYCLE15 (15U << EFM_FRMC_FLWT_POS) /*!< Insert 15 read wait cycles */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Swap_Address EFM Swap Address
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_SWAP_ADDR (0x0007FFDCUL)
|
||
|
|
#define EFM_SWAP_DATA (0xFFFF4321UL)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_OperateMode_Sel EFM Operate Mode Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_MD_READONLY (0x0UL << EFM_FWMC_PEMOD_POS) /*!< Read only mode */
|
||
|
|
#define EFM_MD_PGM_SINGLE (0x1UL << EFM_FWMC_PEMOD_POS) /*!< Program single mode */
|
||
|
|
#define EFM_MD_PGM_READBACK (0x2UL << EFM_FWMC_PEMOD_POS) /*!< Program and read back mode */
|
||
|
|
#define EFM_MD_PGM_SEQ (0x3UL << EFM_FWMC_PEMOD_POS) /*!< Program sequence mode */
|
||
|
|
#define EFM_MD_ERASE_SECTOR (0x4UL << EFM_FWMC_PEMOD_POS) /*!< Sector erase mode */
|
||
|
|
|
||
|
|
#define EFM_MD_ERASE_ALL_CHIP (0x5UL << EFM_FWMC_PEMOD_POS) /*!< Chip erase mode */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Flag_Sel EFM Flag Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_FLAG_PEWERR (EFM_FSR_PEWERR) /*!< EFM Programming/erase error flag. */
|
||
|
|
#define EFM_FLAG_PGMISMTCH (EFM_FSR_PGMISMTCH) /*!< EFM Programming missing match error flag */
|
||
|
|
#define EFM_FLAG_OPTEND (EFM_FSR_OPTEND) /*!< EFM End of operation flag. */
|
||
|
|
#define EFM_FLAG_COLERR (EFM_FSR_COLERR) /*!< EFM Read collide error flag. */
|
||
|
|
#define EFM_FLAG_PEPRTERR (EFM_FSR_PEPRTERR) /*!< EFM write protect address error flag */
|
||
|
|
#define EFM_FLAG_RDY (EFM_FSR_RDY) /*!< EFM ready flag. */
|
||
|
|
#define EFM_FLAG_PGSZERR (EFM_FSR_PGSZERR) /*!< EFM Programming/erase protect area error flag. */
|
||
|
|
|
||
|
|
#define EFM_FLAG_ALL (EFM_FLAG_PEWERR | EFM_FLAG_PGMISMTCH | EFM_FLAG_OPTEND | EFM_FLAG_PEPRTERR | \
|
||
|
|
EFM_FLAG_COLERR | EFM_FLAG_PGSZERR | EFM_FLAG_RDY)
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Interrupt_Sel EFM Interrupt Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_INT_PEERR (EFM_FITE_PEERRITE) /*!< Program/erase error Interrupt source */
|
||
|
|
#define EFM_INT_OPTEND (EFM_FITE_OPTENDITE) /*!< End of EFM operation Interrupt source */
|
||
|
|
#define EFM_INT_COLERR (EFM_FITE_COLERRITE) /*!< Read collide error Interrupt source */
|
||
|
|
|
||
|
|
#define EFM_INT_ALL (EFM_FITE_PEERRITE | EFM_FITE_OPTENDITE | EFM_FITE_COLERRITE)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Keys EFM Keys
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_REG_UNLOCK_KEY1 (0x0123UL)
|
||
|
|
#define EFM_REG_UNLOCK_KEY2 (0x3210UL)
|
||
|
|
#define EFM_REG_LOCK_KEY (0x0000UL)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Sector_Size EFM Sector Size
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define SECTOR_SIZE (0x2000UL)
|
||
|
|
#define EFM_SECTOR_SIZE (0x2000UL)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Sector_Address EFM Sector Address
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_SECTOR_ADDR(x) (uint32_t)(SECTOR_SIZE * (x))
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_OTP_Base_Address EFM Otp Base Address
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_OTP_BASE1_ADDR (0x03000C00UL)
|
||
|
|
#define EFM_OTP_BASE1_SIZE (0x40UL)
|
||
|
|
#define EFM_OTP_BASE1_OFFSET (0UL)
|
||
|
|
#define EFM_OTP_LOCK_ADDR (0x03000FC0UL)
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_OTP_Address EFM Otp Address
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_OTP_BLOCK0 (EFM_OTP_BASE1_ADDR + ((0UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK1 (EFM_OTP_BASE1_ADDR + ((1UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK2 (EFM_OTP_BASE1_ADDR + ((2UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK3 (EFM_OTP_BASE1_ADDR + ((3UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK4 (EFM_OTP_BASE1_ADDR + ((4UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK5 (EFM_OTP_BASE1_ADDR + ((5UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK6 (EFM_OTP_BASE1_ADDR + ((6UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK7 (EFM_OTP_BASE1_ADDR + ((7UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK8 (EFM_OTP_BASE1_ADDR + ((8UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK9 (EFM_OTP_BASE1_ADDR + ((9UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK10 (EFM_OTP_BASE1_ADDR + ((10UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK11 (EFM_OTP_BASE1_ADDR + ((11UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK12 (EFM_OTP_BASE1_ADDR + ((12UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK13 (EFM_OTP_BASE1_ADDR + ((13UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
#define EFM_OTP_BLOCK14 (EFM_OTP_BASE1_ADDR + ((14UL - EFM_OTP_BASE1_OFFSET) * EFM_OTP_BASE1_SIZE))
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_OTP_Lock_Address EFM Otp Lock_address
|
||
|
|
* @note x at range of 0~14
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_OTP_BLOCK_LOCKADDR(x) (EFM_OTP_LOCK_ADDR + 0x04UL * (x)) /*!< OTP block x lock address */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define EFM_REMAP_REG_LOCK_KEY (0x0000UL)
|
||
|
|
#define EFM_REMAP_REG_UNLOCK_KEY1 (0x0123UL)
|
||
|
|
#define EFM_REMAP_REG_UNLOCK_KEY2 (0x3210UL)
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Remap_State EFM remap function state
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_REMAP_OFF (0UL)
|
||
|
|
#define EFM_REMAP_ON (EFM_MMF_REMCR_EN)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Remap_Size EFM remap size definition
|
||
|
|
* @note refer to chip user manual for details size spec.
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_REMAP_4K (12UL)
|
||
|
|
#define EFM_REMAP_8K (13UL)
|
||
|
|
#define EFM_REMAP_16K (14UL)
|
||
|
|
#define EFM_REMAP_32K (15UL)
|
||
|
|
#define EFM_REMAP_64K (16UL)
|
||
|
|
#define EFM_REMAP_128K (17UL)
|
||
|
|
#define EFM_REMAP_256K (18UL)
|
||
|
|
#define EFM_REMAP_512K (19UL)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Remap_Index EFM remap index
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_REMAP_IDX0 (0U)
|
||
|
|
#define EFM_REMAP_IDX1 (1U)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Remap_BaseAddr EFM remap base address
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_REMAP_BASE_ADDR0 (0x2000000UL)
|
||
|
|
#define EFM_REMAP_BASE_ADDR1 (0x2080000UL)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Remap_Region EFM remap ROM/RAM region
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_REMAP_ROM_END_ADDR EFM_END_ADDR
|
||
|
|
|
||
|
|
#define EFM_REMAP_RAM_START_ADDR (0x1FFF8000UL)
|
||
|
|
#define EFM_REMAP_RAM_END_ADDR (0x1FFFFFFFUL)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_Protect_Level EFM protect level
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_PROTECT_LEVEL1 (1U)
|
||
|
|
#define EFM_PROTECT_LEVEL2 (2U)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EFM_MCU_Status EFM protect level
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EFM_MCU_PROTECT1_FREE (0U)
|
||
|
|
#define EFM_MCU_PROTECT1_LOCK (1U)
|
||
|
|
#define EFM_MCU_PROTECT1_UNLOCK (2U)
|
||
|
|
#define EFM_MCU_PROTECT2_LOCK (4U)
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global variable definitions ('extern')
|
||
|
|
******************************************************************************/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
Global function prototypes (definition in C source)
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @addtogroup EFM_Global_Functions
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief EFM Protect Unlock.
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
|
||
|
|
__STATIC_INLINE void EFM_REG_Unlock(void)
|
||
|
|
{
|
||
|
|
WRITE_REG32(CM_EFM->FAPRT, EFM_REG_UNLOCK_KEY1);
|
||
|
|
WRITE_REG32(CM_EFM->FAPRT, EFM_REG_UNLOCK_KEY2);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief EFM Protect Lock.
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
__STATIC_INLINE void EFM_REG_Lock(void)
|
||
|
|
{
|
||
|
|
WRITE_REG32(CM_EFM->FAPRT, EFM_REG_LOCK_KEY);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief EFM remap Unlock.
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
__STATIC_INLINE void EFM_REMAP_Unlock(void)
|
||
|
|
{
|
||
|
|
WRITE_REG32(CM_EFM->MMF_REMPRT, EFM_REMAP_REG_UNLOCK_KEY1);
|
||
|
|
WRITE_REG32(CM_EFM->MMF_REMPRT, EFM_REMAP_REG_UNLOCK_KEY2);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief EFM remap Lock.
|
||
|
|
* @param None
|
||
|
|
* @retval None
|
||
|
|
*/
|
||
|
|
__STATIC_INLINE void EFM_REMAP_Lock(void)
|
||
|
|
{
|
||
|
|
WRITE_REG32(CM_EFM->MMF_REMPRT, EFM_REMAP_REG_LOCK_KEY);
|
||
|
|
}
|
||
|
|
|
||
|
|
void EFM_Cmd(uint32_t u32Flash, en_functional_state_t enNewState);
|
||
|
|
void EFM_FWMC_Cmd(en_functional_state_t enNewState);
|
||
|
|
void EFM_SetBusStatus(uint32_t u32Status);
|
||
|
|
void EFM_IntCmd(uint32_t u32EfmInt, en_functional_state_t enNewState);
|
||
|
|
void EFM_ClearStatus(uint32_t u32Flag);
|
||
|
|
int32_t EFM_SetWaitCycle(uint32_t u32WaitCycle);
|
||
|
|
int32_t EFM_SetOperateMode(uint32_t u32Mode);
|
||
|
|
int32_t EFM_ReadByte(uint32_t u32Addr, uint8_t *pu8ReadBuf, uint32_t u32ByteLen);
|
||
|
|
int32_t EFM_Program(uint32_t u32Addr, uint8_t *pu8Buf, uint32_t u32Len);
|
||
|
|
int32_t EFM_ProgramWord(uint32_t u32Addr, uint32_t u32Data);
|
||
|
|
int32_t EFM_ProgramWordReadBack(uint32_t u32Addr, uint32_t u32Data);
|
||
|
|
int32_t EFM_SequenceProgram(uint32_t u32Addr, uint8_t *pu8Buf, uint32_t u32Len);
|
||
|
|
int32_t EFM_SectorErase(uint32_t u32Addr);
|
||
|
|
int32_t EFM_ChipErase(uint8_t u8Chip);
|
||
|
|
|
||
|
|
en_flag_status_t EFM_GetAnyStatus(uint32_t u32Flag);
|
||
|
|
en_flag_status_t EFM_GetStatus(uint32_t u32Flag);
|
||
|
|
void EFM_GetUID(stc_efm_unique_id_t *pstcUID);
|
||
|
|
|
||
|
|
void EFM_DataCacheResetCmd(en_functional_state_t enNewState);
|
||
|
|
void EFM_CacheCmd(en_functional_state_t enNewState);
|
||
|
|
|
||
|
|
void EFM_LowVoltageReadCmd(en_functional_state_t enNewState);
|
||
|
|
int32_t EFM_SwapCmd(en_functional_state_t enNewState);
|
||
|
|
en_flag_status_t EFM_GetSwapStatus(void);
|
||
|
|
int32_t EFM_OTP_Lock(uint32_t u32Addr);
|
||
|
|
|
||
|
|
int32_t EFM_REMAP_StructInit(stc_efm_remap_init_t *pstcEfmRemapInit);
|
||
|
|
int32_t EFM_REMAP_Init(uint8_t u8RemapIdx, stc_efm_remap_init_t *pstcEfmRemapInit);
|
||
|
|
void EFM_REMAP_DeInit(void);
|
||
|
|
void EFM_REMAP_Cmd(uint8_t u8RemapIdx, en_functional_state_t enNewState);
|
||
|
|
void EFM_REMAP_SetAddr(uint8_t u8RemapIdx, uint32_t u32Addr);
|
||
|
|
void EFM_REMAP_SetSize(uint8_t u8RemapIdx, uint32_t u32Size);
|
||
|
|
|
||
|
|
void EFM_LowVoltageCmd(en_functional_state_t enNewState);
|
||
|
|
|
||
|
|
void EFM_SetWindowProtectAddr(uint32_t u32StartAddr, uint32_t u32EndAddr);
|
||
|
|
|
||
|
|
void EFM_Protect_Enable(uint8_t u8Level);
|
||
|
|
int32_t EFM_WriteSecurityCode(uint8_t *pu8Buf, uint32_t u32Len);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
#endif /* LL_EFM_ENABLE */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /* __HC32_LL_EFM_H__ */
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* EOF (not truncated)
|
||
|
|
******************************************************************************/
|