PeripheralDriver_Flagchip_F.../Inc/module_driver_erm.h

176 lines
5.3 KiB
C

/**
* @file module_driver_erm.h
* @author Flagchip0100
* @brief ERM Module driver type definition and API
* @version 2.0.0
* @date 2024-08-20
*
* SDK Version: 2.6.0
*
* @copyright Copyright 2020-2024 Flagchip Semiconductors Co., Ltd.
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2023-12-15 Flagchip052 N/A First version for FC7300
* 2.0.0 2024-10-12 Flagchip052 N/A Change version and release
******************************************************************************** */
#ifndef _DRIVER_MODULE_DRIVER_ERM_H_
#define _DRIVER_MODULE_DRIVER_ERM_H_
#include "HwA_erm.h"
#if (ERM_INSTANCE_COUNT > 0U)
#if defined(__cplusplus)
extern "C" {
#endif
/**
* @addtogroup module_driver_erm
* @{
*/
/*******************************************************************************
* Definitions
******************************************************************************/
/**
* @name ERM API Service IDs
* @{
*/
#define ERM_INIT_ID 0x00U
#define ERM_DEINIT_ID 0x01U
#define ERM_COMMONIRQHANDLER_ID 0x02U
/**@}*/
/**
* @name ERM Dev Error Code
* @brief Error Code of calling ERM apis
* @{
*/
#define ERM_E_PARAM_NULLPTR 0x01U
#define ERM_E_PARAM_INSTANCE 0x02U
/**@}*/
/**
* @brief ERM error interrupt define.
* @{
*/
#define ERM_NON_CORRECTABLE_IRQ 1U /**< select Non-correctable interrupt report */
#define ERM_SINGLE_CORRECTION_IRQ 2U /**< select single correction interrupt report */
/**@}*/
/**
* @brief ERM Instance type.
*
*/
typedef enum
{
ERM_INSTANCE_0 = 0U,
} ERM_InstanceType;
/**
* @brief ERM operation return values.
*
*/
typedef enum
{
ERM_STATUS_SUCCESS = 0U, /**< The ERM status success */
ERM_STATUS_FAIL = 1U, /**< The ERM status fail */
} ERM_StatusType;
/**
* @brief The structure of the ERM processing handle
*
*/
typedef struct _ERM_HandleType
{
ERM_InstanceType eInstance; /**< CMU instance*/
uint8_t _aligned[3U];
struct
{
void (*pErrorCallback[ERM_EAR_REG_COUNT])(struct _ERM_HandleType *pHandle, uint8_t u8ErrorType, uint32_t u32Addr);
} tSettings;
} ERM_HandleType;
/**
* @brief The structure of the ERM Init configuration
*
*/
typedef struct
{
uint8_t u8Channel; /**< ERM channel No, See ERM Channel define */
uint8_t u8IntType; /**< ERM Interrupt type, See ERM error interrupt define */
uint8_t u8ErmEnable; /**< Enable/Disable Erm channel interrupt */
uint8_t _aligned[1U];
} ERM_CfgType;
/*******************************************************************************
* API
******************************************************************************/
/**
* @brief Initializes the Error Reporting Module (ERM) for the specified instance
*
* This function initializes the ERM module with the provided configuration structure.
* It performs parameter validation, sets up the control register based on the configuration,
* and clears the status. If an error occurs or the handle is invalid, an error report will
* be generated, and the function will return a failure status.
*
* @param pHandle Pointer to an ERM handle structure containing the instance information
* @param pInitCfg Pointer to an ERM configuration structure with desired settings
*
* @return Status of the initialization operation
* - ERM_STATUS_SUCCESS: Initialization successful
* - ERM_STATUS_FAIL: Initialization failed due to an error
*
* @note Error reporting is enabled when `ERM_DEV_ERROR_REPORT` is set to `STD_ON`.
*/
ERM_StatusType ERM_Init(ERM_HandleType *const pHandle, const ERM_CfgType *const pInitCfg);
/**
* @brief Deinitializes the ERM module.
*
* This function deinitializes the specified ERM module instance by clearing its control and status registers.
*
* @param pHandle Pointer to the ERM handle structure.
*
* @return ERM_StatusType Indicates the status of the operation (ERM_STATUS_SUCCESS or ERM_STATUS_FAIL).
*
* @note If the handle pointer is NULL or the instance index is out of range, a device error will be reported, and the function returns ERM_STATUS_FAIL.
*/
ERM_StatusType ERM_DeInit(ERM_HandleType *const pHandle);
/**
* @brief Handles common Error Reporting Module (ERM) interrupts and invokes error callbacks
*
* This function serves as the common interrupt handler for the ERM, checking for errors in various channels
* (CTCM, DTCM, PFLASH, optionally DFLASH, and DMA) and invoking the error callback function when an error
* is detected. It also clears the status flags after processing the interrupts.
*
* @param pHandle Pointer to an ERM handle structure containing the instance information and error callback
*
* @note This function is designed to be used within an interrupt context.
* @note Support for DFLASH depends on the compile-time configuration `ERM_DFLASH_SUPPORT`.
*/
void ERM_CommonIRQHandler(ERM_HandleType *const pHandle);
/** @} */ /* module_driver_erm */
#if defined(__cplusplus)
}
#endif
#endif /* (ERM_INSTANCE_COUNT > 0U) */
#endif /* _DRIVER_MODULE_DRIVER_ERM_H_ */