PSOC E8XXGP Device Support Library

| PSOC E8XXGP Device Support Library

API Reference | Macros
SysFault (System Fault)
PDL API Reference

## General Description

The SysFault driver provides an API to configure the Fault reporting structure.

The functions and other declarations used in this driver are in cy_sysfault.h. You can include cy_pdl.h to get access to all functions and declarations in the PDL.

The Fault subsystem contains information about faults that occur in the system. The fault subsystem captures only faults and it does not take any action to correct it. The subsystem can cause a reset, give a pulse indication, or trigger another peripheral. This is a centralized fault report structure. The centralized nature allows for a system-wide consistent handling of faults, which simplifies software development as follows only a single fault interrupt handler is required. The fault report structure provides the fault source and additional fault-specific information from a single set of memory mapped input/output (MMIO) registers, no iterative search is required for the fault source and fault information. All pending faults are available from a single set of MMIO registers. Below is the block diagram.

Fault IP provides fault report structure. Fault report structures capture faults. The number of fault report structures is specified by a design time configuration parameter (FAULT_NR). There are two instances of fault structures, each fault report structure has a dedicated set of MMIO control and status registers and captures a single fault. A fault report structure provides the fault source and additional fault specific information from a single set of MMIO registers. The fault structures capture faults like MPU/SMPU/PPI protection violations, peripheral specific errors, memory controller specific errors. E.g., SRAM controller ECC errors, FLASH controller read while program and ECC errors, Processor tightly coupled memory (TCM) ECC errors.

System fault will be captured by fault report structures. A fault report structure provides the fault source and additional fault specific information from a single set of MMIO registers. The captured fault information includes:

- A validity bit field that indicates a fault is captured.
- A fault index that identifies the fault source.
- Additional fault information describing fault specifics.

# Configuration Considerations

Fault configuration includes clearing the existing fault status, enabling fault source, setting interrupt mask, and fault initialization. Below is the code snippet for the fault configuration.

/* Scenario: Configures the SysFault for recording faults. */
/* Fault config */
cy_stc_SysFault_t config =
{
.ResetEnable = false,
.OutputEnable = true,
.TriggerEnable = false,
};
/* Configure Interrupt for Fault structure */
cy_stc_sysint_t IRQ_cfg =
{
.intrSrc = ((NvicMux3_IRQn << CY_SYSINT_INTRSRC_MUXIRQ_SHIFT) | cpuss_interrupts_fault_0_IRQn), /* Bit 0-15 of intrSrc is used to store system interrupt value and bit 16-31 to store CPU IRQ value */
.intrPriority = 2UL
};
/*********************************************************************/
/***** Fault report settings *****/
/*********************************************************************/
Cy_SysFault_ClearStatus(FAULT_STRUCT0); // clear status
Cy_SysFault_SetMaskByIdx(FAULT_STRUCT0, CY_SYSFAULT_SRSS_MCWDT0); // enable Fault MCWDT #0
Cy_SysFault_SetInterruptMask(FAULT_STRUCT0);
cy_en_SysFault_status_t status = Cy_SysFault_Init(FAULT_STRUCT0, &config);
/*********************************************************************/
/***** Interrupt settings *****/
/*********************************************************************/
Cy_SysInt_Init(&IRQ_cfg, &irqFaultHandler);
NVIC_SetPriority((IRQn_Type) NvicMux3_IRQn, 2UL);
NVIC_EnableIRQ((IRQn_Type) NvicMux3_IRQn);
/* Triggers an interrupt via a software write.*/
Cy_SysFault_SetInterrupt(FAULT_STRUCT0);
cy_stc_SysFault_t::ResetEnable
bool ResetEnable
Enables the Reset request when it is True.
Definition: cy_sysfault.h:271
cy_stc_SysFault_t
Configuration structure for a Fault control register.
Definition: cy_sysfault.h:268
cy_en_SysFault_status_t
cy_en_SysFault_status_t
SysFault driver error codes.
Definition: cy_sysfault.h:162
Cy_SysFault_ClearStatus
void Cy_SysFault_ClearStatus(FAULT_STRUCT_Type *base)
Clears status register.
Definition: cy_sysfault.c:47
Cy_SysFault_SetInterruptMask
void Cy_SysFault_SetInterruptMask(FAULT_STRUCT_Type *base)
Sets an interrupt mask.
Definition: cy_sysfault.c:196
Cy_SysFault_Init
cy_en_SysFault_status_t Cy_SysFault_Init(FAULT_STRUCT_Type *base, cy_stc_SysFault_t *config)
Initializes the SysFault for recording faults.
Definition: cy_sysfault.c:31
Cy_SysFault_SetInterrupt
void Cy_SysFault_SetInterrupt(FAULT_STRUCT_Type *base)
Triggers an interrupt via a software write.
Definition: cy_sysfault.c:190
Cy_SysFault_SetMaskByIdx
void Cy_SysFault_SetMaskByIdx(FAULT_STRUCT_Type *base, cy_en_SysFault_source_t idx)
Enable the Fault to be captured.
Definition: cy_sysfault.c:112
cy_stc_sysint_t::intrSrc
IRQn_Type intrSrc
Interrupt source.
Definition: cy_sysint.h:229
cy_stc_sysint_t
Initialization configuration structure for a single interrupt channel.
Definition: cy_sysint.h:227
Cy_SysInt_Init
cy_en_sysint_status_t Cy_SysInt_Init(const cy_stc_sysint_t *config, cy_israddress userIsr)
Initializes the referenced interrupt by setting the priority and the interrupt vector.
Definition: cy_sysint_v2.c:80
CY_SYSINT_INTRSRC_MUXIRQ_SHIFT
#define CY_SYSINT_INTRSRC_MUXIRQ_SHIFT
Bit 0-11 indicate system interrupt and bit 12-15 will indicate the CPU IRQ.
Definition: cy_sysint.h:179

Once the configured fault occurs, the interrupt handler will be triggered where the fault information can be captured. Below is the code snippet that can be part of a interrupt handler.

/* Scenario: Handle the faults generated and get the fault data. */
/* Returns the status of the interrupt for the fault structure */
uint32_t intrSource = Cy_SysFault_GetInterruptStatus(FAULT_STRUCT0);
/* Returns the interrupt mask. */
uint32_t intrMskStatus =Cy_SysFault_GetInterruptMask(FAULT_STRUCT0);
/* Returns whether masked interrupt and triggered the interrupt are same. */
uint32_t intrMskdStatus = Cy_SysFault_GetInterruptStatusMasked(FAULT_STRUCT0);
cy_en_SysFault_source_t status = Cy_SysFault_GetErrorSource(FAULT_STRUCT0);
if(status != CY_SYSFAULT_NO_FAULT)
{
if(status == CY_SYSFAULT_SRSS_MCWDT0) // MCWDT0 fault
{
Cy_SysFault_GetFaultData(FAULT_STRUCT0, CY_SYSFAULT_DATA0); //Get fault data
}
}
/* Clears an interrupt mask.*/
Cy_SysFault_ClearInterruptMask(FAULT_STRUCT0);
/* Clear Interrupt flag */
Cy_SysFault_ClearInterrupt(FAULT_STRUCT0);
CY_SYSFAULT_DATA0
@ CY_SYSFAULT_DATA0
Used to get the Fault data for DATA0 register.
Definition: cy_sysfault.h:182
Cy_SysFault_GetFaultData
uint32_t Cy_SysFault_GetFaultData(FAULT_STRUCT_Type *base, cy_en_SysFault_Data_t dataSet)
Returns the Fault information for the provided dataSet.
Definition: cy_sysfault.c:69
Cy_SysFault_GetInterruptStatusMasked
uint32_t Cy_SysFault_GetInterruptStatusMasked(FAULT_STRUCT_Type *base)
Returns whether masked interrupt triggered the interrupt.
Definition: cy_sysfault.c:212
Cy_SysFault_ClearInterrupt
void Cy_SysFault_ClearInterrupt(FAULT_STRUCT_Type *base)
Clears Active Interrupt Source.
Definition: cy_sysfault.c:184
Cy_SysFault_GetErrorSource
cy_en_SysFault_source_t Cy_SysFault_GetErrorSource(FAULT_STRUCT_Type *base)
Returns the source of error for the Fault.
Definition: cy_sysfault.c:53
Cy_SysFault_GetInterruptMask
uint32_t Cy_SysFault_GetInterruptMask(FAULT_STRUCT_Type *base)
Returns the interrupt mask.
Definition: cy_sysfault.c:206
Cy_SysFault_GetInterruptStatus
uint32_t Cy_SysFault_GetInterruptStatus(FAULT_STRUCT_Type *base)
Returns the status of the interrupt.
Definition: cy_sysfault.c:178
Cy_SysFault_ClearInterruptMask
void Cy_SysFault_ClearInterruptMask(FAULT_STRUCT_Type *base)
Clears an interrupt mask.
Definition: cy_sysfault.c:201

# More Information

For more information on the System Fault, refer to the technical reference manual (TRM).

## API Reference
| Macros
| Enums
| Data Structures
| Functions

## Macros
#define | cy_en_SysFault_source_t en_sysfault_source_t
#define | CY_SYSFAULT_NO_FAULT (((uint8_t)M33SYSCPUSS_RRAMC_MMIO_PC_LOCK_FAULT) + 1U)