Skip to content

hal: renesas: rz: Add external interrupt support for RZ/A, V series #117

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions drivers/rz/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,14 @@ zephyr_library_sources_ifdef(CONFIG_USE_RZ_FSP_RIIC_MASTER
zephyr_library_sources_ifdef(CONFIG_USE_RZ_FSP_GTM
fsp/src/${SOC_SERIES_PREFIX}/r_gtm/r_gtm.c)

if("${CONFIG_SOC_SERIES}" MATCHES "rzg.*")
if(CONFIG_DT_HAS_RENESAS_RZ_INTC_ENABLED)
zephyr_library_sources_ifdef(CONFIG_USE_RZ_FSP_EXT_IRQ
fsp/src/${SOC_SERIES_PREFIX}/r_intc_irq/r_intc_irq.c
fsp/src/${SOC_SERIES_PREFIX}/r_intc_irq/r_intc_irq.c)
zephyr_library_sources_ifdef(CONFIG_RENESAS_RZ_INTC_HAS_NMI
fsp/src/${SOC_SERIES_PREFIX}/r_intc_nmi/r_intc_nmi.c)
elseif("${CONFIG_SOC_SERIES}" MATCHES "rz[tn].*")
endif()

if(CONFIG_DT_HAS_RENESAS_RZ_ICU_ENABLED)
zephyr_library_sources_ifdef(CONFIG_USE_RZ_FSP_EXT_IRQ
fsp/src/${SOC_SERIES_PREFIX}/r_icu/r_icu.c)
endif()
Expand Down
82 changes: 82 additions & 0 deletions drivers/rz/fsp/inc/instances/rza/r_intc_irq.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
*
* SPDX-License-Identifier: BSD-3-Clause
*/

/*******************************************************************************************************************//**
* @addtogroup INTC_IRQ
* @{
**********************************************************************************************************************/

#ifndef R_INTC_IRQ_H
#define R_INTC_IRQ_H

/***********************************************************************************************************************
* Includes
**********************************************************************************************************************/
#include "bsp_api.h"
#include "r_external_irq_api.h"

/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
FSP_HEADER

/***********************************************************************************************************************
* Macro definitions
**********************************************************************************************************************/

/*********************************************************************************************************************
* Typedef definitions
*********************************************************************************************************************/

/** INTC_IRQ private control block. DO NOT MODIFY. Initialization occurs when R_INTC_IRQ_ExternalIrqOpen is called. */
typedef struct st_intc_irq_instance_ctrl
{
uint32_t open; ///< Used to determine if channel control block is in use
IRQn_Type irq; ///< Interrupt number
uint8_t channel; ///< Channel

#if BSP_TZ_SECURE_BUILD
external_irq_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory.
#endif
void (* p_callback)(external_irq_callback_args_t * p_args); // Pointer to callback that is called when an edge is detected on the external irq pin.

/** Placeholder for user data. Passed to the user callback in ::external_irq_callback_args_t. */
void const * p_context;
} intc_irq_instance_ctrl_t;

/**********************************************************************************************************************
* Exported global variables
**********************************************************************************************************************/

/** @cond INC_HEADER_DEFS_SEC */
/** Filled in Interface API structure for this Instance. */
extern const external_irq_api_t g_external_irq_on_intc_irq;

/** @endcond */

/***********************************************************************************************************************
* Public APIs
**********************************************************************************************************************/
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);

/*******************************************************************************************************************//**
* @} (end defgroup INTC_IRQ)
**********************************************************************************************************************/

/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
FSP_FOOTER

#endif // R_INTC_IRQ_H
82 changes: 82 additions & 0 deletions drivers/rz/fsp/inc/instances/rza/r_intc_nmi.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
*
* SPDX-License-Identifier: BSD-3-Clause
*/

/*******************************************************************************************************************//**
* @addtogroup INTC_NMI
* @{
**********************************************************************************************************************/

#ifndef R_INTC_NMI_H
#define R_INTC_NMI_H

/***********************************************************************************************************************
* Includes
**********************************************************************************************************************/
#include "bsp_api.h"
#include "r_external_irq_api.h"

/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
FSP_HEADER

/***********************************************************************************************************************
* Macro definitions
**********************************************************************************************************************/

/*********************************************************************************************************************
* Typedef definitions
*********************************************************************************************************************/

/** INTC_NMI private control block. DO NOT MODIFY. Initialization occurs when R_INTC_NMI_ExternalIrqOpen is called. */
typedef struct st_intc_nmi_instance_ctrl
{
uint32_t open; ///< Used to determine if channel control block is in use
IRQn_Type irq; ///< Interrupt number
uint8_t channel; ///< Channel

#if BSP_TZ_SECURE_BUILD
external_irq_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory.
#endif
void (* p_callback)(external_irq_callback_args_t * p_args); // Pointer to callback that is called when an edge is detected on the external irq pin.

/** Placeholder for user data. Passed to the user callback in ::external_irq_callback_args_t. */
void const * p_context;
} intc_nmi_instance_ctrl_t;

/**********************************************************************************************************************
* Exported global variables
**********************************************************************************************************************/

/** @cond INC_HEADER_DEFS_SEC */
/** Filled in Interface API structure for this Instance. */
extern const external_irq_api_t g_external_irq_on_intc_nmi;

/** @endcond */

/***********************************************************************************************************************
* Public APIs
**********************************************************************************************************************/
fsp_err_t R_INTC_NMI_ExternalIrqOpen(external_irq_ctrl_t * const p_api_ctrl, external_irq_cfg_t const * const p_cfg);

fsp_err_t R_INTC_NMI_ExternalIrqEnable(external_irq_ctrl_t * const p_api_ctrl);

fsp_err_t R_INTC_NMI_ExternalIrqDisable(external_irq_ctrl_t * const p_api_ctrl);

fsp_err_t R_INTC_NMI_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_NMI_ExternalIrqClose(external_irq_ctrl_t * const p_api_ctrl);

/*******************************************************************************************************************//**
* @} (end defgroup INTC_NMI)
**********************************************************************************************************************/

/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
FSP_FOOTER

#endif // R_INTC_NMI_H
82 changes: 82 additions & 0 deletions drivers/rz/fsp/inc/instances/rzv/r_intc_irq.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
*
* SPDX-License-Identifier: BSD-3-Clause
*/

/*******************************************************************************************************************//**
* @addtogroup INTC_IRQ
* @{
**********************************************************************************************************************/

#ifndef R_INTC_IRQ_H
#define R_INTC_IRQ_H

/***********************************************************************************************************************
* Includes
**********************************************************************************************************************/
#include "bsp_api.h"
#include "r_external_irq_api.h"

/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
FSP_HEADER

/***********************************************************************************************************************
* Macro definitions
**********************************************************************************************************************/

/*********************************************************************************************************************
* Typedef definitions
*********************************************************************************************************************/

/** INTC_IRQ private control block. DO NOT MODIFY. Initialization occurs when R_INTC_IRQ_ExternalIrqOpen is called. */
typedef struct st_intc_irq_instance_ctrl
{
uint32_t open; ///< Used to determine if channel control block is in use
IRQn_Type irq; ///< NVIC interrupt number
uint8_t channel; ///< Channel

#if BSP_TZ_SECURE_BUILD
external_irq_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory.
#endif
void (* p_callback)(external_irq_callback_args_t * p_args); // Pointer to callback that is called when an edge is detected on the external irq pin.

/** Placeholder for user data. Passed to the user callback in ::external_irq_callback_args_t. */
void const * p_context;
} intc_irq_instance_ctrl_t;

/**********************************************************************************************************************
* Exported global variables
**********************************************************************************************************************/

/** @cond INC_HEADER_DEFS_SEC */
/** Filled in Interface API structure for this Instance. */
extern const external_irq_api_t g_external_irq_on_intc_irq;

/** @endcond */

/***********************************************************************************************************************
* Public APIs
**********************************************************************************************************************/
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);

/*******************************************************************************************************************//**
* @} (end defgroup INTC_IRQ)
**********************************************************************************************************************/

/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
FSP_FOOTER

#endif // R_INTC_IRQ_H
Loading