| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- /*****************************************************************************
- * Copyright (C) 2020, Huada Semiconductor Co., Ltd. All rights reserved.
- *
- * This software component is licensed by HDSC 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
- */
- /******************************************************************************/
- /** \file hc32f460_efm.h
- **
- ** A detailed description is available at
- ** @link EfmGroup EFM description @endlink
- **
- ** - 2018-10-29 CDT First version for Device Driver Library of EFM.
- **
- ******************************************************************************/
- #ifndef __HC32F460_EFM_H__
- #define __HC32F460_EFM_H__
- /*******************************************************************************
- * Include files
- ******************************************************************************/
- #include "hc32_common.h"
- #include "ddl_config.h"
- #if (DDL_EFM_ENABLE == DDL_ON)
- /* C binding of definitions if building with C++ compiler */
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /**
- *******************************************************************************
- ** \defgroup EfmGroup Embedded Flash Management unit(EFM)
- **
- ******************************************************************************/
- //@{
- /*******************************************************************************
- * Global type definitions ('typedef')
- ******************************************************************************/
- /**
- *******************************************************************************
- ** \brief The flash status.
- **
- ******************************************************************************/
- typedef enum en_efm_flash_status
- {
- FlashReady = 1u, ///< The flash ready flag.
- FlashRWErr = 2u, ///< The flash read/write error flag.
- FlashEOP = 3u, ///< The flash end of operation flag.
- FlashPgMissMatch = 4u, ///< The flash program miss match flag.
- FlashPgSizeErr = 5u, ///< The flash program size error flag.
- FlashPgareaPErr = 6u, ///< The flash program protect area error flag.
- FlashWRPErr = 7u, ///< The flash write protect error flag.
- }en_efm_flash_status_t;
- /**
- *******************************************************************************
- ** \brief The flash read mode.
- **
- ******************************************************************************/
- typedef enum en_efm_read_md
- {
- NormalRead = 0u, ///< The flash normal read mode.
- UltraPowerRead = 1u, ///< The flash ultra power read mode.
- }en_efm_read_md_t;
- /**
- *******************************************************************************
- ** \brief The flash interrupt select.
- **
- ******************************************************************************/
- typedef enum en_efm_int_sel
- {
- PgmErsErrInt = 0u, ///< The flash program / erase error interrupt.
- EndPgmInt = 1u, ///< The flash end of program interrupt.
- ColErrInt = 2u, ///< The flash read collided error interrupt.
- }en_efm_int_sel_t;
- /**
- *******************************************************************************
- ** \brief The bus state while flash program & erase.
- **
- ******************************************************************************/
- typedef enum en_efm_bus_sta
- {
- BusBusy = 0u, ///< The bus busy while flash program & erase.
- BusRelease = 1u, ///< The bus release while flash program & erase.
- }en_efm_bus_sta_t;
- /**
- *******************************************************************************
- ** \brief Structure of windows protect address.
- **
- ** \note None.
- **
- ******************************************************************************/
- typedef struct stc_efm_win_protect_addr
- {
- uint32_t StartAddr; ///< The protect start address.
- uint32_t EndAddr; ///< The protect end address.
- }stc_efm_win_protect_addr_t;
- /**
- *******************************************************************************
- ** \brief Structure of unique ID.
- **
- ** \note None.
- **
- ******************************************************************************/
- typedef struct stc_efm_unique_id
- {
- uint32_t uniqueID1; ///< unique ID 1.
- uint32_t uniqueID2; ///< unique ID 2.
- uint32_t uniqueID3; ///< unique ID 3.
- }stc_efm_unique_id_t;
- /*******************************************************************************
- * Global pre-processor symbols/macros ('#define')
- ******************************************************************************/
- /* Flach latency cycle (0~15) */
- #define EFM_LATENCY_0 (0ul)
- #define EFM_LATENCY_1 (1ul)
- #define EFM_LATENCY_2 (2ul)
- #define EFM_LATENCY_3 (3ul)
- #define EFM_LATENCY_4 (4ul)
- #define EFM_LATENCY_5 (5ul)
- #define EFM_LATENCY_6 (6ul)
- #define EFM_LATENCY_7 (7ul)
- #define EFM_LATENCY_8 (8ul)
- #define EFM_LATENCY_9 (9ul)
- #define EFM_LATENCY_10 (10ul)
- #define EFM_LATENCY_11 (11ul)
- #define EFM_LATENCY_12 (12ul)
- #define EFM_LATENCY_13 (13ul)
- #define EFM_LATENCY_14 (14ul)
- #define EFM_LATENCY_15 (15ul)
- /* Flash flag */
- #define EFM_FLAG_WRPERR (0x00000001ul)
- #define EFM_FLAG_PEPRTERR (0x00000002ul)
- #define EFM_FLAG_PGSZERR (0x00000004ul)
- #define EFM_FLAG_PGMISMTCH (0x00000008ul)
- #define EFM_FLAG_EOP (0x00000010ul)
- #define EFM_FLAG_COLERR (0x00000020ul)
- #define EFM_FLAG_RDY (0x00000100ul)
- /* Flash operate mode */
- #define EFM_MODE_READONLY (0ul)
- #define EFM_MODE_SINGLEPROGRAM (1ul)
- #define EFM_MODE_SINGLEPROGRAMRB (2ul)
- #define EFM_MODE_SEQUENCEPROGRAM (3ul)
- #define EFM_MODE_SECTORERASE (4ul)
- #define EFM_MODE_CHIPERASE (5ul)
- /*******************************************************************************
- * Global variable definitions ('extern')
- ******************************************************************************/
- /*******************************************************************************
- * Global function prototypes (definition in C source)
- ******************************************************************************/
- void EFM_Unlock(void);
- void EFM_Lock(void);
- void EFM_FlashCmd(en_functional_state_t enNewState);
- void EFM_SetLatency(uint32_t u32Latency);
- void EFM_InstructionCacheCmd(en_functional_state_t enNewState);
- void EFM_DataCacheRstCmd(en_functional_state_t enNewState);
- void EFM_SetReadMode(en_efm_read_md_t enReadMD);
- void EFM_ErasePgmCmd(en_functional_state_t enNewState);
- en_result_t EFM_SetErasePgmMode(uint32_t u32Mode);
- void EFM_InterruptCmd(en_efm_int_sel_t enInt, en_functional_state_t enNewState);
- en_flag_status_t EFM_GetFlagStatus(uint32_t u32flag);
- en_flag_status_t EFM_GetSwitchStatus(void);
- void EFM_ClearFlag(uint32_t u32flag);
- en_efm_flash_status_t EFM_GetStatus(void);
- void EFM_SetBusState(en_efm_bus_sta_t enState);
- void EFM_SetWinProtectAddr(stc_efm_win_protect_addr_t stcAddr);
- en_result_t EFM_SingleProgram(uint32_t u32Addr, uint32_t u32Data);
- en_result_t EFM_SingleProgramRB(uint32_t u32Addr, uint32_t u32Data);
- en_result_t EFM_SequenceProgram(uint32_t u32Addr, uint32_t u32Len, void *pBuf);
- en_result_t EFM_SectorErase(uint32_t u32Addr);
- en_result_t EFM_MassErase(uint32_t u32Addr);
- en_result_t EFM_OtpLock(uint32_t u32Addr);
- stc_efm_unique_id_t EFM_ReadUID(void);
- //@} // EfmGroup
- #ifdef __cplusplus
- }
- #endif
- #endif /* DDL_EFM_ENABLE */
- #endif /* __HC32F460_EFM_H__ */
- /*******************************************************************************
- * EOF (not truncated)
- ******************************************************************************/
|