1.1.3 EC Interrupt Aggregator

The EC Interrupt Aggregator works in conjunction with the processor’s interrupt interface to handle hardware interrupts and exceptions.

All interrupts are routed to the ARM processor through the ARM Nested Vectored Interrupt Controller (NVIC). All interrupt sources are aggregated into the GIRQx Source registers. If the interrupt source is active and the interrupt is enabled, the corresponding Result bit is set. In many cases, the Result bit for an individual interrupt source is tied directly to the NVIC. These interrupts are knows as Direct Interrupts. In addition, all GIRQx can also generate an interrupt to the NVIC when any of the enabled interrupts in its group is asserted. The NVIC vectors for the aggregated GIRQ interrupts are known as Aggregate Interrupts. Firmware should not enable the group GIRQ NVIC interrupt at the same time individual direct interrupts for members of the group are enabled. If both are enabled, the processor will receive two interrupts for an event, one from the GIRQ and one from the direct interrupt.

Library Interface

ECIA library provides the following interfaces:

Functions

Name Description
void ECIA_Initialize(void) Initializes the ECIA module based on the MCC configuration
void ECIA_GIRQBlockDisable(ECIA_GIRQ_BLOCK_NUM block) Disables the given GIRQ block
void ECIA_GIRQBlockDisableAll(void) Disables the interrupt generation from all the GIRQ blocks
void ECIA_GIRQBlockEnable(ECIA_GIRQ_BLOCK_NUM block) Enables the given GIRQ block
uint32_t ECIA_GIRQBlockStatusGet(ECIA_GIRQ_BLOCK_NUM block) Reports the status of the group GIRQ interrupt assertion to the NVIC
bool ECIA_GIRQIsInterruptEnabled(ECIA_INT_SOURCE int_src) Returns the status of the given interrupt source
uint8_t ECIA_GIRQResultGet(ECIA_INT_SOURCE int_src) Returns the status of the given interrupt source
void ECIA_GIRQSourceClear(ECIA_INT_SOURCE int_src) Clears the given interrupt source
void ECIA_GIRQSourceClearAll(void) Clears all interrupt sources in all the ECIA blocks
void ECIA_GIRQSourceDisable(ECIA_INT_SOURCE int_src) Disables the given interrupt source
void ECIA_GIRQSourceDisableAll(void) Disables all interrupt sources in all the ECIA blocks
void ECIA_GIRQSourceEnable(ECIA_INT_SOURCE int_src) Enables the given interrupt source
void ECIA_InterruptDisable(ECIA_INT_SOURCE int_src) Disables the given interrupt source
void ECIA_InterruptEnable(ECIA_INT_SOURCE int_src) Enables interrupt at both ECIA and NVIC level for the given interrupt source

Data types and constants

Name Type Description
ECIA_GIRQ_BLOCK_NUM Enum This enum is used to to specify the GIRQ block unmber in various ECIA block control APIs
ECIA_INT_SOURCE Enum This enum is used to to specify the interrupt source in various ECIA APIs
GIRQ_AGG_INT_NUM_GET Macro This macro returns the aggregate NVIC interrupt number from the given interrupt source
GIRQ_DIR_INT_NUM_GET Macro This macro returns the direct NVIC interrupt number from the given interrupt source
IS_INT_SRC_AGG_OR_DIR Macro This macro returns the 0 if the given interrupt source is of aggregate type and returns 1 if th interrupt source is of direct type