Driver for the ICU peripheral on RZ microprocessor. This module implements the External IRQ Interface.
Overview
The Interrupt Controller Unit (ICU) controls which event signals are linked to the GIC and DMAC modules. The R_ICU software module only implements the External IRQ Interface. The external_irq interface is for configuring interrupts to fire when a trigger condition is detected on an external IRQ pin.
- Note
- Multiple instances are used when more than one external interrupt is needed. Configure each instance with different channels and properties as needed for the specific interrupt.
Features
- Supports configuring interrupts for IRQ pins on the target MCUs
- Enabling and disabling interrupt generation.
- Configuring interrupt trigger on rising edge, falling edge, both edges, or low level signal.
- Enabling and disabling the IRQ noise filter.
- Supports configuring a user callback function, which will be invoked by the HAL module when an external pin interrupt is generated.
Configuration
Build Time Configurations for r_icu
The following build time configurations are defined in fsp_cfg/r_icu_cfg.h:
Configuration | Options | Default | Description |
Parameter Checking |
-
Default (BSP)
-
Enabled
-
Disabled
| Default (BSP) | If selected code for parameter checking is included in the build. |
Multiplex Interrupt |
| Disabled | Enable multiplex interrupt for a single driver. |
Configurations for Input > External IRQ (r_icu)
This module can be added to the Stacks tab via New Stack > Input > External IRQ (r_icu).
Configuration | Options | Default | Description |
Name | Name must be a valid C symbol | g_external_irq0 | Module name. |
Channel | Value must be an integer between 0 and 15 | 0 | Specify the hardware channel. |
Trigger |
-
Falling
-
Rising
-
Both Edges
-
Low Level
| Falling | Select the signal edge or state that triggers an interrupt. |
Digital Filtering |
| Disabled | Select if the digital noise filter should be enabled. |
Digital Filtering Sample Clock (Only valid when Digital Filtering is Enabled) |
-
PCLK / 1
-
PCLK / 8
-
PCLK / 32
-
PCLK / 64
| PCLK / 1 | Select the clock divider for the digital noise filter. |
Callback | Name must be a valid C symbol | NULL | A user callback function can be provided here. If this callback function is provided, it is called from the interrupt service routine (ISR) each time the IRQn triggers |
Pin Interrupt Priority | MCU Specific Options | | Select the PIN interrupt priority. |
Clock Configuration
The ICU peripheral module doesn't require any specific clock settings.
- Note
- The digital filter uses PCLKM as the clock source for sampling the IRQ pin.
Pin Configuration
The pin for the external interrupt channel must be configured as an input with IRQ Input Enabled.
Usage Notes
Digital Filter
The digital filter is used to reject trigger conditions that are too short. The trigger condition must be longer than three periods of the filter clock. The filter clock frequency is determined by PCLKM and the external_irq_pclk_div_t setting.
MIN_PULSE_WIDTH = EXTERNAL_IRQ_PCLKM_DIV / PCLKM_FREQUENCY * 3
DMAC
When using an External IRQ pin to trigger a DMAC transfer, the External IRQ pin must be opened before the transfer instance is opened.
Examples
Basic Example
This is a basic example of minimal use of the ICU in an application.
#define ICU_IRQN 2
#define VECTOR_NUMBER_IRQ2 ((IRQn_Type) 8)
{
(void) p_args;
g_external_irq_complete = 1;
}
void simple_example ()
{
{
.filter_enable = false,
.p_callback = external_irq_callback,
.p_context = 0,
.ipl = 0,
.irq = VECTOR_NUMBER_IRQ2,
};
handle_error(err);
handle_error(err);
while (0 == g_external_irq_complete)
{
}
}
◆ icu_instance_ctrl_t
struct icu_instance_ctrl_t |
ICU private control block. DO NOT MODIFY. Initialization occurs when R_ICU_ExternalIrqOpen is called.
Data Fields |
uint32_t | open |
| Used to determine if channel control block is in use.
|
|
IRQn_Type | irq |
| Interrupt number.
|
|
uint8_t | channel |
| Channel.
|
|
void const * | p_context |
|
◆ p_context
void const* icu_instance_ctrl_t::p_context |
◆ R_ICU_ExternalIrqOpen()
Configure an IRQ input pin for use with the external interrupt interface. Implements external_irq_api_t::open.
The Open function is responsible for preparing an external IRQ pin for operation.
- Return values
-
FSP_SUCCESS | Open successful. |
FSP_ERR_ASSERTION | One of the following is invalid:
- p_instance_ctrl or p_cfg is NULL
|
FSP_ERR_ALREADY_OPEN | The channel specified has already been opened. No configurations were changed. Call the associated Close function to reconfigure the channel. |
FSP_ERR_IP_CHANNEL_NOT_PRESENT | The channel requested in p_cfg is not available on the device selected in r_bsp_cfg.h. |
FSP_ERR_INVALID_ARGUMENT | p_cfg->p_callback is not NULL, but ISR is not enabled. ISR must be enabled to use callback function. |
- Note
- This function is reentrant for different channels. It is not reentrant for the same channel.
◆ R_ICU_ExternalIrqEnable()
Enable external interrupt for specified channel. Implements external_irq_api_t::enable.
- Return values
-
FSP_SUCCESS | Interrupt Enabled successfully. |
FSP_ERR_ASSERTION | The p_instance_ctrl parameter was null. |
FSP_ERR_NOT_OPEN | The channel is not opened. |
FSP_ERR_IRQ_BSP_DISABLED | Requested IRQ is not defined in this system |
◆ R_ICU_ExternalIrqDisable()
Disable external interrupt for specified channel. Implements external_irq_api_t::disable.
- Return values
-
FSP_SUCCESS | Interrupt disabled successfully. |
FSP_ERR_ASSERTION | The p_instance_ctrl parameter was null. |
FSP_ERR_NOT_OPEN | The channel is not opened. |
FSP_ERR_IRQ_BSP_DISABLED | Requested IRQ is not defined in this system |
◆ R_ICU_ExternalIrqCallbackSet()
Updates the user callback and has option of providing memory for callback structure. Implements external_irq_api_t::callbackSet
- Return values
-
FSP_SUCCESS | Callback updated successfully. |
FSP_ERR_ASSERTION | A required pointer is NULL. |
FSP_ERR_NOT_OPEN | The control block has not been opened. |
◆ R_ICU_ExternalIrqClose()
Close the external interrupt channel. Implements external_irq_api_t::close.
- Return values
-
FSP_SUCCESS | Successfully closed. |
FSP_ERR_ASSERTION | The parameter p_instance_ctrl is NULL. |
FSP_ERR_NOT_OPEN | The channel is not opened. |