HwA_Flagchip_FC7240/Inc/HwA_erm.h

120 lines
3.5 KiB
C

/**
* @file HwA_erm.h
* @author Flagchip
* @brief FC7xxx erm driver type definition and API
* @version 0.1.0
* @date 2024-01-14
*
* @copyright Copyright (c) 2024 Flagchip Semiconductors Co., Ltd.
*
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2024-01-14 qxw0100 N/A FC7240 Erm first version
******************************************************************************** */
#ifndef HWA_INCLUDE_HWA_ERM_H_
#define HWA_INCLUDE_HWA_ERM_H_
#include "device_header.h"
#define ERM_SR_MASK 0xCCCCCCCCu
/**
* @defgroup HwA_erm
* @ingroup HwA_erm
* @{
*/
/** @brief ERM configuration type */
typedef enum
{
ERM_NONE_CORRECTABLE = 1U, /*!< select Non-correctable interrupt report */
ERM_SINGLE_BIT = 2U /*!< select single correction interrupt report */
} ERM_InterruptType;
/** @brief ERM configuration type */
typedef enum
{
ERM_PFLASH0_ECC = 1U, /*!< PFlash0 ECC Error */
ERM_PFLASH1_ECC = 2U, /*!< PFlash1 ECC Error */
ERM_DFLASH_ECC = 3U, /*!< DFlash ECC error */
ERM_DMACFG0_ECC = 4U, /*!< DMACFG0 ECC Error */
ERM_ROM_ECC = 6U, /*!< ROM ECC Error */
ERM_SYSRAM0_ECC = 8U, /*!< SysRAM0 ECC ERROR */
ERM_SYSRAM1_ECC = 9U, /*!< SysRAM1 ECC ERROR */
ERM_CPU0ITCM_ECC = 11U, /*!< CPU0 ITCM ECC Error */
ERM_CPU0DTCM0_ECC = 12U, /*!< CPU0 DTCM0 ECC Error */
ERM_CPU0DTCM1_ECC = 13U, /*!< CPU0 DTCM1 ECC Error */
ERM_CPU0ICACHE_ECC = 14U, /*!< CPU0 ICACHE ECC Error */
ERM_CPU0DCACHE_ECC = 15U, /*!< CPU0 DCACHE ECC Error */
ERM_HSMDRAM_ECC = 26U, /*!< HSM DRAM ECC Error */
ERM_HSMIRAM_ECC = 27U, /*!< HSM IRAM ECC Error */
} ERM_ChannelType;
/**
* @brief get ERM configuration register 0~3
*
* @return ERM CRn value
*/
LOCAL_INLINE uint32_t ERM_HWA_Get_CRn(uint8_t idx)
{
uint32_t u32RegValue;
u32RegValue = *((volatile uint32_t *)(&(ERM->CR0) + (uint32_t)idx));
return u32RegValue;
}
/**
* @brief get ERM status register 0~3
*
* @return ERM SRn value
*/
LOCAL_INLINE uint32_t ERM_HWA_Get_SRn(uint8_t idx)
{
uint32_t u32RegValue;
u32RegValue = *((volatile uint32_t *)(&(ERM->SR0) + (uint32_t)idx));
return u32RegValue;
}
/**
* @brief get ERM error address register 0~25
*
* @return ERM error address register value
*/
LOCAL_INLINE uint32_t ERM_HWA_Get_EARn(uint8_t idx)
{
uint32_t u32RegValue;
u32RegValue = *((const volatile uint32_t *)(&(ERM->EAR0) + (uint32_t)idx * 0x10UL/4UL));
return u32RegValue;
}
/**
* @brief set erm configuration register
*
* @param idx index (0~3)
* @param u32RegValue access control value
*/
LOCAL_INLINE void ERM_HWA_Set_CRn(uint8_t idx, uint32_t u32RegValue)
{
*((volatile uint32_t *)(&(ERM->CR0) + (int32_t)idx)) = u32RegValue;
}
/**
* @brief set erm error address register
*
* @param idx index (0~3)
* @param u32RegValue access control value
*/
LOCAL_INLINE void ERM_HWA_Set_SRn(uint8_t idx, uint32_t u32RegValue)
{
*((volatile uint32_t *)(&(ERM->SR0) + (int32_t)idx)) = u32RegValue;
}
/** @}*/
#endif /* HWA_INCLUDE_HWA_ERM_H_ */