RZ/A Flexible Software Package Documentation  Release v3.3.0

 
External IRQ (r_intc_irq)

Functions

fsp_err_t R_INTC_IRQ_ExternalIrqOpen (external_irq_ctrl_t *const p_api_ctrl, external_irq_cfg_t const *const p_cfg)
 
fsp_err_t R_INTC_IRQ_ExternalIrqEnable (external_irq_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_INTC_IRQ_ExternalIrqDisable (external_irq_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_INTC_IRQ_ExternalIrqCallbackSet (external_irq_ctrl_t *const p_api_ctrl, void(*p_callback)(external_irq_callback_args_t *), void const *const p_context, external_irq_callback_args_t *const p_callback_memory)
 
fsp_err_t R_INTC_IRQ_ExternalIrqClose (external_irq_ctrl_t *const p_api_ctrl)
 

Detailed Description

Driver for the INTC_IRQ peripheral on RZ MPUs. This module implements the External IRQ Interface.

Overview

The Interrupt Controller controls which event signals are linked to the GIC module. The R_INTC_IRQ software module only implements the External IRQ Interface. The 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

Configuration

Build Time Configurations for r_intc_irq

The following build time configurations are defined in fsp_cfg/r_intc_irq_cfg.h:

ConfigurationOptionsDefaultDescription
Parameter Checking
  • Default (BSP)
  • Enabled
  • Disabled
Default (BSP) If selected code for parameter checking is included in the build.

Configurations for Input > External IRQ Driver on r_intc_irq

This module can be added to the Stacks tab via New Stack > Input > External IRQ Driver on r_intc_irq.

ConfigurationOptionsDefaultDescription
NameName must be a valid C symbolg_external_irq0 Module name.
ChannelValue must be a non-negative integer0 Specify the hardware channel.
TriggerMCU Specific OptionsSelect the signal edge or state that triggers an interrupt.
CallbackName must be a valid C symbolNULL 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 PriorityValue must be an integer between 0 and 3124 Select the PIN interrupt priority(0-31). Note: If you specify the lowest priority (i.e.,31), no interrupt will occur.

Clock Configuration

The INTC_IRQ peripheral module doesn't require any specific clock settings.

Pin Configuration

The pin for the external interrupt channel must be configured as an input with IRQ Input Enabled.

Limitation

Pin configuration does not show conflicts when same IRQ is used by multiple pins.

Usage Notes

Examples

Basic Example

This is a basic example of minimal use of the INTC_IRQ in an application.

#define INTC_IRQN_PIN BSP_IO_PORT_00_PIN_03
#define INTC_IRQN 1
/* Called from r_intc_irq_isr */
void external_irq_callback (external_irq_callback_args_t * p_args)
{
(void) p_args;
g_external_irq_complete = 1;
}
void simple_example ()
{
/* Example Configuration */
external_irq_cfg_t g_external_irq_cfg =
{
.channel = INTC_IRQN,
.filter_enable = false,
.clock_source_div = EXTERNAL_IRQ_CLOCK_SOURCE_DIV_1,
.p_callback = external_irq_callback,
.p_context = 0,
.ipl = 24,
.irq = GPIO_IRQ1_IRQn,
};
/* Configure the external interrupt. */
fsp_err_t err = R_INTC_IRQ_ExternalIrqOpen(&g_external_irq_ctrl, &g_external_irq_cfg);
assert(FSP_SUCCESS == err);
/* Enable the external interrupt. */
err = R_INTC_IRQ_ExternalIrqEnable(&g_external_irq_ctrl);
assert(FSP_SUCCESS == err);
while (0 == g_external_irq_complete)
{
/* Wait for interrupt. */
}
}

Data Structures

struct  intc_irq_instance_ctrl_t
 

Data Structure Documentation

◆ intc_irq_instance_ctrl_t

struct intc_irq_instance_ctrl_t

INTC_IRQ private control block. DO NOT MODIFY. Initialization occurs when R_INTC_IRQ_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
 

Field Documentation

◆ p_context

void const* intc_irq_instance_ctrl_t::p_context

Placeholder for user data. Passed to the user callback in external_irq_callback_args_t.

Function Documentation

◆ R_INTC_IRQ_ExternalIrqOpen()

fsp_err_t R_INTC_IRQ_ExternalIrqOpen ( external_irq_ctrl_t *const  p_api_ctrl,
external_irq_cfg_t const *const  p_cfg 
)

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_SUCCESSOpen successful.
FSP_ERR_ASSERTIONOne of the following is invalid:
  • p_ctrl or p_cfg is NULL
FSP_ERR_ALREADY_OPENThe channel specified has already been opened. No configurations were changed. Call the associated Close function to reconfigure the channel.
FSP_ERR_IP_CHANNEL_NOT_PRESENTThe channel requested in p_cfg is not available on the device selected in r_bsp_cfg.h.
FSP_ERR_UNSUPPORTEDAn input argument is not supported by selected mode.
Note
This function is reentrant for different channels. It is not reentrant for the same channel.

◆ R_INTC_IRQ_ExternalIrqEnable()

fsp_err_t R_INTC_IRQ_ExternalIrqEnable ( external_irq_ctrl_t *const  p_api_ctrl)

Enable external interrupt for specified channel. Implements external_irq_api_t::enable.

Return values
FSP_SUCCESSInterrupt Enabled successfully.
FSP_ERR_ASSERTIONThe p_ctrl parameter was null.
FSP_ERR_NOT_OPENThe channel is not opened.
FSP_ERR_IRQ_BSP_DISABLEDRequested IRQ is not defined in this system.

◆ R_INTC_IRQ_ExternalIrqDisable()

fsp_err_t R_INTC_IRQ_ExternalIrqDisable ( external_irq_ctrl_t *const  p_api_ctrl)

Disable external interrupt for specified channel. Implements external_irq_api_t::disable.

Return values
FSP_SUCCESSInterrupt disabled successfully.
FSP_ERR_ASSERTIONThe p_ctrl parameter was null.
FSP_ERR_NOT_OPENThe channel is not opened.
FSP_ERR_IRQ_BSP_DISABLEDRequested IRQ is not defined in this system.

◆ R_INTC_IRQ_ExternalIrqCallbackSet()

fsp_err_t R_INTC_IRQ_ExternalIrqCallbackSet ( external_irq_ctrl_t *const  p_api_ctrl,
void(*)(external_irq_callback_args_t *)  p_callback,
void const *const  p_context,
external_irq_callback_args_t *const  p_callback_memory 
)

Updates the user callback and has option of providing memory for callback structure. Implements external_irq_api_t::callbackSet.

Return values
FSP_SUCCESSCallback updated successfully.
FSP_ERR_ASSERTIONA required pointer is NULL.
FSP_ERR_NOT_OPENThe control block has not been opened.
FSP_ERR_NO_CALLBACK_MEMORYp_callback is non-secure and p_callback_memory is either secure or NULL.

◆ R_INTC_IRQ_ExternalIrqClose()

fsp_err_t R_INTC_IRQ_ExternalIrqClose ( external_irq_ctrl_t *const  p_api_ctrl)

Close the external interrupt channel. Implements external_irq_api_t::close.

Return values
FSP_SUCCESSSuccessfully closed.
FSP_ERR_ASSERTIONThe parameter p_ctrl is NULL.
FSP_ERR_NOT_OPENThe channel is not opened.