123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- /***********************************************************************************************************************
- * DISCLAIMER
- * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No
- * other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
- * applicable laws, including copyright laws.
- * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
- * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM
- * EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES
- * SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS
- * SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
- * this software. By using this software, you agree to the additional terms and conditions found by accessing the
- * following link:
- * http://www.renesas.com/disclaimer
- *
- * Copyright (C) 2016 Renesas Electronics Corporation. All rights reserved.
- ***********************************************************************************************************************/
- /***********************************************************************************************************************
- * File Name : mcu_interrupts.h
- * Description : This module allows for callbacks to be registered for certain interrupts.
- ***********************************************************************************************************************/
- /**********************************************************************************************************************
- * History : DD.MM.YYYY Version Description
- * : 01.10.2016 1.00 First Release
- * : 15.05.2017 2.00 Added the following enumeration constant.
- * - BSP_INT_SRC_EXRAM
- * - BSP_INT_SRC_BL1_RIIC1_TEI1
- * - BSP_INT_SRC_BL1_RIIC1_EEI1
- * - BSP_INT_SRC_AL1_GLCDC_VPOS
- * - BSP_INT_SRC_AL1_GLCDC_GR1UF
- * - BSP_INT_SRC_AL1_GLCDC_GR2UF
- * - BSP_INT_SRC_AL1_DRW2D_DRW_IRQ
- ***********************************************************************************************************************/
- /***********************************************************************************************************************
- Macro definitions
- ***********************************************************************************************************************/
- /***********************************************************************************************************************
- Typedef definitions
- ***********************************************************************************************************************/
- /* Available return codes. */
- typedef enum
- {
- BSP_INT_SUCCESS = 0,
- BSP_INT_ERR_NO_REGISTERED_CALLBACK, //There is not a registered callback for this interrupt source
- BSP_INT_ERR_INVALID_ARG, //Illegal argument input
- BSP_INT_ERR_UNSUPPORTED, //Operation is not supported by this API
- BSP_INT_ERR_GROUP_STILL_ENABLED //Not all group interrupts were disabled so group interrupt was not disabled
- } bsp_int_err_t;
- /* Available interrupts to register a callback for. */
- typedef enum
- {
- BSP_INT_SRC_EXC_SUPERVISOR_INSTR = 0, //Occurs when privileged instruction is executed in User Mode
- BSP_INT_SRC_EXC_UNDEFINED_INSTR, //Occurs when MCU encounters an unknown instruction
- BSP_INT_SRC_EXC_NMI_PIN, //NMI Pin interrupt
- BSP_INT_SRC_EXC_FPU, //FPU exception
- BSP_INT_SRC_EXC_ACCESS, //Access exception
- BSP_INT_SRC_OSC_STOP_DETECT, //Oscillation stop is detected
- BSP_INT_SRC_WDT_ERROR, //WDT underflow/refresh error has occurred
- BSP_INT_SRC_IWDT_ERROR, //IWDT underflow/refresh error has occurred
- BSP_INT_SRC_LVD1, //Voltage monitoring 1 interrupt
- BSP_INT_SRC_LVD2, //Voltage monitoring 2 interrupt
- BSP_INT_SRC_UNDEFINED_INTERRUPT, //Interrupt has triggered for a vector that user did not write a handler for
- BSP_INT_SRC_BUS_ERROR, //Bus error: illegal address access or timeout
- BSP_INT_SRC_RAM, //RAM error interrupt
- BSP_INT_SRC_EXRAM, //EXRAM error interrupt
- /* BE0 Group Interrupts are all CAN and therefore will be taken care of by the CAN module. */
- /* BL0 Group Interrupts. */
- BSP_INT_SRC_BL0_SCI0_TEI0,
- BSP_INT_SRC_BL0_SCI0_ERI0,
- BSP_INT_SRC_BL0_SCI1_TEI1,
- BSP_INT_SRC_BL0_SCI1_ERI1,
- BSP_INT_SRC_BL0_SCI2_TEI2,
- BSP_INT_SRC_BL0_SCI2_ERI2,
- BSP_INT_SRC_BL0_SCI3_TEI3,
- BSP_INT_SRC_BL0_SCI3_ERI3,
- BSP_INT_SRC_BL0_SCI4_TEI4,
- BSP_INT_SRC_BL0_SCI4_ERI4,
- BSP_INT_SRC_BL0_SCI5_TEI5,
- BSP_INT_SRC_BL0_SCI5_ERI5,
- BSP_INT_SRC_BL0_SCI6_TEI6,
- BSP_INT_SRC_BL0_SCI6_ERI6,
- BSP_INT_SRC_BL0_SCI7_TEI7,
- BSP_INT_SRC_BL0_SCI7_ERI7,
- BSP_INT_SRC_BL0_SCI12_TEI12,
- BSP_INT_SRC_BL0_SCI12_ERI12,
- BSP_INT_SRC_BL0_SCI12_SCIX0,
- BSP_INT_SRC_BL0_SCI12_SCIX1,
- BSP_INT_SRC_BL0_SCI12_SCIX2,
- BSP_INT_SRC_BL0_SCI12_SCIX3,
- BSP_INT_SRC_BL0_QSPI_QSPSSLI,
- BSP_INT_SRC_BL0_CAC_FERRI,
- BSP_INT_SRC_BL0_CAC_MENDI,
- BSP_INT_SRC_BL0_CAC_OVFI,
- BSP_INT_SRC_BL0_DOC_DOPCI,
- BSP_INT_SRC_BL0_PDC_PCFEI,
- BSP_INT_SRC_BL0_PDC_PCERI,
- /* BL1 Group Interrupts. */
- BSP_INT_SRC_BL1_SDHI_CDETI,
- BSP_INT_SRC_BL1_SDHI_CACI,
- BSP_INT_SRC_BL1_SDHI_SDACI,
- BSP_INT_SRC_BL1_MMCIF_CDETIO,
- BSP_INT_SRC_BL1_MMCIF_ERRIO,
- BSP_INT_SRC_BL1_MMCIF_ACCIO,
- BSP_INT_SRC_BL1_POE3_OEI1,
- BSP_INT_SRC_BL1_POE3_OEI2,
- BSP_INT_SRC_BL1_POE3_OEI3,
- BSP_INT_SRC_BL1_POE3_OEI4,
- BSP_INT_SRC_BL1_RIIC0_TEI0,
- BSP_INT_SRC_BL1_RIIC0_EEI0,
- BSP_INT_SRC_BL1_RIIC2_TEI2,
- BSP_INT_SRC_BL1_RIIC2_EEI2,
- BSP_INT_SRC_BL1_S12AD0_S12CMPAI,
- BSP_INT_SRC_BL1_S12AD0_S12CMPBI,
- BSP_INT_SRC_BL1_S12AD1_S12CMPAI1,
- BSP_INT_SRC_BL1_S12AD1_S12CMPBI1,
- BSP_INT_SRC_BL1_SCI8_TEI8,
- BSP_INT_SRC_BL1_SCI8_ERI8,
- BSP_INT_SRC_BL1_SCI9_TEI9,
- BSP_INT_SRC_BL1_SCI9_ERI9,
- BSP_INT_SRC_BL1_RIIC1_TEI1,
- BSP_INT_SRC_BL1_RIIC1_EEI1,
- /* BL2 Group Interrupts. */
- BSP_INT_SRC_BL2_SDSI_SDIOI,
- /* AL0 Group Interrupts. */
- BSP_INT_SRC_AL0_SCI10_TEI10,
- BSP_INT_SRC_AL0_SCI10_ERI10,
- BSP_INT_SRC_AL0_SCI11_TEI11,
- BSP_INT_SRC_AL0_SCI11_ERI11,
- BSP_INT_SRC_AL0_RSPI0_SPII0,
- BSP_INT_SRC_AL0_RSPI0_SPEI0,
- BSP_INT_SRC_AL0_RSPI1_SPII1,
- BSP_INT_SRC_AL0_RSPI1_SPEI1,
- BSP_INT_SRC_AL0_RSPI2_SPII2,
- BSP_INT_SRC_AL0_RSPI2_SPEI2,
- /* AL1 Group Interrupts. */
- BSP_INT_SRC_AL1_EDMAC0_EINT0,
- BSP_INT_SRC_AL1_GLCDC_VPOS,
- BSP_INT_SRC_AL1_GLCDC_GR1UF,
- BSP_INT_SRC_AL1_GLCDC_GR2UF,
- BSP_INT_SRC_AL1_DRW2D_DRW_IRQ,
- BSP_INT_SRC_TOTAL_ITEMS //DO NOT MODIFY! This is used for sizing the interrupt callback array.
- } bsp_int_src_t;
- /* Available commands for R_BSP_InterruptControl() function. */
- typedef enum
- {
- BSP_INT_CMD_CALL_CALLBACK = 0, //Calls registered callback function if one exists
- BSP_INT_CMD_INTERRUPT_ENABLE, //Enables a given interrupt (Available for NMI pin, FPU, and Bus Error)
- BSP_INT_CMD_INTERRUPT_DISABLE, //Disables a given interrupt (Available for FPU, and Bus Error)
- BSP_INT_CMD_GROUP_INTERRUPT_ENABLE, //Enables a group interrupt when a group interrupt source is given. The
- //pdata argument should give the IPL to be used using the bsp_int_ctrl_t
- //type. If a group interrupt is enabled multiple times with different IPL
- //levels it will use the highest given IPL.
- BSP_INT_CMD_GROUP_INTERRUPT_DISABLE, //Disables a group interrupt when a group interrupt source is given.
- //This will only disable a group interrupt when all interrupt
- //sources for that group are already disabled.
- } bsp_int_cmd_t;
- /* Type to be used for pdata argument in Control function. */
- typedef union
- {
- uint32_t ipl; //Used when enabling an interrupt to set that interrupt's priority level
- } bsp_int_ctrl_t;
- /* Easy to use typedef for callback functions. */
- typedef void (*bsp_int_cb_t)(void *);
- /* This structure is the common one that is passed as the 'void *' argument to callback functions when an
- * exception occurs.
- */
- typedef struct
- {
- bsp_int_src_t vector; //Which vector caused this interrupt
- } bsp_int_cb_args_t;
- /***********************************************************************************************************************
- Exported global variables
- ***********************************************************************************************************************/
- /***********************************************************************************************************************
- Exported global functions (to be accessed by other files)
- ***********************************************************************************************************************/
- bsp_int_err_t R_BSP_InterruptWrite(bsp_int_src_t vector, bsp_int_cb_t callback);
- bsp_int_err_t R_BSP_InterruptRead(bsp_int_src_t vector, bsp_int_cb_t * callback);
- bsp_int_err_t R_BSP_InterruptControl(bsp_int_src_t vector, bsp_int_cmd_t cmd, void * pdata);
- void bsp_interrupt_open(void); //r_bsp internal function. DO NOT CALL.
|