/** ****************************************************************************** * @file misc.h * @author HUGE-IC Application Team * @version V1.0.0 * @date 2021.01.14 * @brief This file contains all the PowerDomain firmware functions. ****************************************************************************** * @attention * *

© COPYRIGHT 2021 HUGE-IC

* * * Revision History * V1.0.0 2021.01.14 First Release, move from sysctrl * ****************************************************************************** */ #ifndef __MISC_H__ #define __MISC_H__ #include "typesdef.h" #ifdef __cplusplus extern "C" { #endif #ifdef VENUS_END /*******************************************************************/ /* Venus to be continue */ /*******************************************************************/ #endif /** * @} */ ///** @defgroup SYSMONITOR MACRO-DEF & Exported_Functions // * @{ // */ typedef struct { __IO uint32 CHx_LMT_L; __IO uint32 CHx_LMT_H; __IO uint32 CHx_ERR_ADR; // uint32 RESERVEDx; } SYS_MNT_CH_TypeDef; typedef struct { __IO uint32 CTRL; __IO uint32 PND; __IO uint32 CLR; __IO uint32 RD; __IO uint32 WR; __IO uint32 CPU_PC0; __IO uint32 CPU_PC1; __IO uint32 CPU_PC2; __IO uint32 CPU_PC3; SYS_MNT_CH_TypeDef SYS_MNT_CH; } SYS_MNT_TypeDef; #define SYSMNT ((SYS_MNT_TypeDef *) SYS_MNT_BASE) /** @addtogroup Template_Project * @{ */ #define LL_SYSMONITOR_CHN_EN(n) (BIT(n)) #define LL_SYSMONITOR_CHN_CAP_RANGE_INTER(n) (BIT(n+4)) #define LL_SYSMONITOR_CHN_CAP_RANGE_OUTER(n) (0) #define LL_SYSMONITOR_CAP_PC_EN (1UL << 6) #define LL_SYSMONITOR_INT_EN (1UL << 7) #define LL_SYSMONITOR_CH0_SEL(n) (((n) & 0x1F) << 8) #define LL_SYSMONITOR_CH0_SEL_MSK ((0x1F) << 8) #define LL_SYSMONITOR_CH0_CAP_READ ((1UL) << 18) #define LL_SYSMONITOR_CH0_CAP_WRITE ((1UL) << 19) #define LL_SYSMONITOR_CH0_CAP_MODE(n) ((((n) & 0x3)) << 18) #define LL_SYSMONITOR_CLEAR_REGISTER() do { SYSMNT->CLR = 1; } while(0) /** @addtogroup XXX * @{ */ typedef enum { LL_SYSMONITOR_CHN_LMAC_WAVE_TX = (0), LL_SYSMONITOR_CHN_LMAC_WAVE_RX = (1), LL_SYSMONITOR_CHN_LMAC_TX = (2), LL_SYSMONITOR_CHN_LMAC_RX = (3), LL_SYSMONITOR_CHN_SDIO = (4), LL_SYSMONITOR_CHN_USB20 = (5), LL_SYSMONITOR_CHN_USB11 = (6), LL_SYSMONITOR_CHN_GMAC_RX = (7), LL_SYSMONITOR_CHN_GMAC_TX = (8), LL_SYSMONITOR_CHN_CPU_I_CODE_BUS = (9), LL_SYSMONITOR_CHN_CPU_D_CODE_BUS = (10), LL_SYSMONITOR_CHN_CPU_SYSBUS_BUS = (11), } TYPE_ENUM_LL_SYSMONITOR_CH; /** @addtogroup XXX * @{ */ typedef enum { LL_SYSMONITOR_CAP_RANGE_INTER = (0), LL_SYSMONITOR_CAP_RANGE_OUTER = (1), } TYPE_ENUM_LL_SYSMONITOR_CAP_RANGE; /** @addtogroup XXX * @{ */ typedef enum { LL_SYSMONITOR_CAP_MODE_READ = (1), LL_SYSMONITOR_CAP_MODE_WRITE = (2), LL_SYSMONITOR_CAP_MODE_READ_OR_WRITE = (3), } TYPE_ENUM_LL_SYSMONITOR_CAP_MODE; typedef struct __ll_sysmonitor_cfg { /*! System monitor interrupt enable */ bool int_en; /*! System monitor sub channel : [0, 20] */ TYPE_ENUM_LL_SYSMONITOR_CH sub_chn; /*! capture mode */ TYPE_ENUM_LL_SYSMONITOR_CAP_MODE cap_mode; /*! capture range */ TYPE_ENUM_LL_SYSMONITOR_CAP_RANGE cap_range; /*! Chx low limited address */ uint32 chx_limit_low; /*! Chx high limited address */ uint32 chx_limit_high; } TYPE_SYSMONITOR_CFG; void sys_monitor_config(TYPE_SYSMONITOR_CFG *p_cfg); void sys_monitor_reset(void); /** * @} */ /** @defgroup EFUSE MACRO-DEF & Exported_Functions * @{ */ typedef struct { __IO uint32 EFUSE_CON; __IO uint32 EFUSE_TIME_CON0; __IO uint32 EFUSE_TIME_CON1; __IO uint32 EFUSE_TIME_CON2; __IO uint32 EFUSE_STATUS; __IO uint32 EFUSE_ADDR_CNT; __IO uint32 EFUSE_DATA; } EFUSE_TypeDef; #define EFUSE ((EFUSE_TypeDef *) EFUSE_BASE) /* efuse timing define */ #define LL_EFUSE_POWER_FREQ 100000 /* 10us */ #define LL_EFUSE_PROGRAM_FREQ 100000 /* 10us (9~11uS) */ #define LL_EFUSE_READ_FREQ 10000000 /* 100ns ( > 36ns) */ uint16 sysctrl_efuse_config_and_read(uint32 addr, uint8 *p_buf, uint16 len); void rf_para_efuse_check_valid(void); void sysctrl_efuse_mac_addr_calc(uint8 *addr_buf); void sysctrl_efuse_mac_addr_calc_uuid(uint8 *addr_buf); uint16 sysctrl_efuse_get_customer_id(void); uint32 sysctrl_efuse_get_smt_dat(void); int32 tsensor_meas(uint8 sensor_idx); /*******************************************************************/ /* RFADC */ /*******************************************************************/ typedef struct { __IO uint32 RFADCDIGCON; } RFADCDIG_TypeDef; #define RFADCDIG ((RFADCDIG_TypeDef *) RFADCDIG_BASE) #define RFADCDIGCON_ACS_ON_MSK BIT(0) #define RFADCDIGCON_ACS_RW_MSK BIT(1) #define RFADCDIGCON_ACS_ADDR_SHIFT 2 #define RFADCDIGCON_ACS_ADDR_MSK (0x1f< DMA kick) */ __STATIC_INLINE void sys_dcache_clean_range (uint32_t *addr, int32_t dsize) { if (((uint32)addr >= PSRAM_BASE) && ((uint32)addr < PSRAM_END_ADDR) && csi_is_cache_enable()) { ASSERT(!(((uint32)addr) & (BIT(CACHE_CIR_INV_ADDR_Pos)-1))); csi_dcache_clean_range(addr, dsize); } } /* usefor TCPIP CHKSUM */ __STATIC_INLINE void sys_dcache_clean_range_unaligned (uint32_t *addr, int32_t dsize) { if (((uint32)addr >= PSRAM_BASE) && ((uint32)addr < PSRAM_END_ADDR) && csi_is_cache_enable()) { csi_dcache_clean_range(addr, dsize); } } /** use when DMA destination is psram * 1、usage : ( this -> DMA) ; */ __STATIC_INLINE void sys_dcache_clean_invalid_range (uint32_t *addr, int32_t dsize) { if (((uint32)addr >= PSRAM_BASE) && ((uint32)addr < PSRAM_END_ADDR) && csi_is_cache_enable()) { //ASSERT(!(((uint32)addr) & (BIT(CACHE_CIR_INV_ADDR_Pos)-1))); /* data head */ if ((uint32_t)addr & 0xF) { csi_dcache_clean_invalid_range(addr, 16); } /* data tail */ if (((uint32_t)addr+dsize) & 0xF) { csi_dcache_clean_invalid_range((addr+dsize), 16); } /* data all */ csi_dcache_invalid_range(addr, dsize); } } /** use when DMA destination is psram * 1、usage : ( DMA done-> this) ; * 2、Precondition: dma buffer addr & size is 16byte aligned * 3、DMA buffer size is not checked */ __STATIC_INLINE void sys_dcache_invalid_range (uint32_t *addr, int32_t dsize) { if (((uint32)addr >= PSRAM_BASE) && ((uint32)addr < PSRAM_END_ADDR) && csi_is_cache_enable()) { //ASSERT(!(((uint32)addr) & (BIT(CACHE_CIR_INV_ADDR_Pos)-1))); csi_dcache_invalid_range(addr, dsize); } } #else #define sys_dcache_clean_range(addr, dsize) #define sys_dcache_clean_range_unaligned(addr, dsize) #define sys_dcache_clean_invalid_range(addr, dsize) #define sys_dcache_invalid_range(addr, dsize) #endif int32 sysctrl_is_chipdcn_compid(void); /* 速率:x Bps */ uint32_t sys_dma2ahb_bw_static(int32 printf_en); /* miss rate : 万分之x */ uint32_t sys_csi_cache_static(int32 printf_en); #ifdef __cplusplus } #endif #endif //__MISC_H__ /******************* (C) COPYRIGHT 2021 HUGE-IC *****END OF FILE****/