interrupt_manager.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 - 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
7  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
9  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
10  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
11  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
12  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
13  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
14  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
15  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
16  * THE POSSIBILITY OF SUCH DAMAGE.
17  */
18 #if !defined(INTERRUPT_MANAGER_H)
19 #define INTERRUPT_MANAGER_H
20 
21 #include "device_registers.h"
22 
23 
46 /*******************************************************************************
47  * Definitions
48  ******************************************************************************/
49 
50 #if FEATURE_MSCM_HAS_CPU_INTERRUPT_ROUTER
51 
53 typedef enum
54 {
55  INTERRUPT_MANAGER_TARGET_SELF = -2,
56  INTERRUPT_MANAGER_TARGET_OTHERS = -1,
57  INTERRUPT_MANAGER_TARGET_NONE = 0,
58  INTERRUPT_MANAGER_TARGET_CP0 = 1,
59  INTERRUPT_MANAGER_TARGET_CP1 = 2,
60  INTERRUPT_MANAGER_TARGET_CP0_CP1 = 3
61 } interrupt_manager_cpu_targets_t;
62 
63 #endif /* FEATURE_MSCM_HAS_CPU_INTERRUPT_ROUTER */
64 
65 #if FEATURE_INTERRUPT_MULTICORE_SUPPORT
66 
70 typedef enum
71 {
72  INTERRUPT_CORE_DISABLED = 0U,
73  INTERRUPT_CORE_ENABLED = 1U
74 } interrupt_core_enable_t;
75 
76 #endif /* FEATURE_INTERRUPT_MULTICORE_SUPPORT */
77 
79 typedef void (* isr_t)(void);
80 
81 /*******************************************************************************
82  * Default interrupt handler - implemented in startup.s
83  ******************************************************************************/
85 void DefaultISR(void);
86 
87 /*******************************************************************************
88  * API
89  ******************************************************************************/
90 
91 #if defined(__cplusplus)
92 extern "C" {
93 #endif /* __cplusplus*/
94 
97 
112 void INT_SYS_InstallHandler(IRQn_Type irqNumber,
113  const isr_t newHandler,
114  isr_t* const oldHandler);
115 
123 void INT_SYS_EnableIRQ(IRQn_Type irqNumber);
124 
132 void INT_SYS_DisableIRQ(IRQn_Type irqNumber);
133 
140 void INT_SYS_EnableIRQGlobal(void);
141 
148 void INT_SYS_DisableIRQGlobal(void);
149 
157 void INT_SYS_SetPriority(IRQn_Type irqNumber, uint8_t priority);
158 
166 uint8_t INT_SYS_GetPriority(IRQn_Type irqNumber);
167 
168 #if FEATURE_INTERRUPT_HAS_PENDING_STATE
169 
177 void INT_SYS_ClearPending(IRQn_Type irqNumber);
178 
186 void INT_SYS_SetPending(IRQn_Type irqNumber);
187 
197 uint32_t INT_SYS_GetPending(IRQn_Type irqNumber);
198 
199 #endif /* FEATURE_INTERRUPT_HAS_PENDING_STATE */
200 
201 #if FEATURE_INTERRUPT_HAS_ACTIVE_STATE
202 
210 uint32_t INT_SYS_GetActive(IRQn_Type irqNumber);
211 
212 #endif /* FEATURE_INTERRUPT_HAS_ACTIVE_STATE */
213 
214 #if FEATURE_INTERRUPT_HAS_SOFTWARE_IRQ
215 
223 void INT_SYS_SetSoftwareIRQRequest(IRQn_Type irqNumber);
224 
232 void INT_SYS_ClearSoftwareIRQRequest(IRQn_Type irqNumber);
233 
234 #endif /* FEATURE_INTERRUPT_HAS_SOFTWARE_IRQ */
235 
236 
237 #if FEATURE_INTERRUPT_MULTICORE_SUPPORT
238 
249 void INT_SYS_EnableIRQ_MC(IRQn_Type irqNumber, const uint8_t *coresIds, uint8_t coresCnt);
250 
265 void INT_SYS_GetCoresForIRQ(IRQn_Type irqNumber, interrupt_core_enable_t *cores);
266 
277 void INT_SYS_DisableIRQ_MC(IRQn_Type irqNumber, const uint8_t *coresIds, uint8_t coresCnt);
278 
287 void INT_SYS_DisableIRQ_MC_All(IRQn_Type irqNumber);
288 
289 #endif /* FEATURE_INTERRUPT_MULTICORE_SUPPORT */
290 
291 
292 #if FEATURE_MSCM_HAS_CPU_INTERRUPT_ROUTER
293 
302 void INT_SYS_GenerateDirectedCpuInterrupt(IRQn_Type irqNumber, interrupt_manager_cpu_targets_t cpu_target);
303 
304 #endif /* FEATURE_MSCM_HAS_CPU_INTERRUPT_ROUTER */
305 
308 #if defined(__cplusplus)
309 }
310 #endif /* __cplusplus*/
311 
314 #endif /* INTERRUPT_MANAGER_H */
315 /*******************************************************************************
316  * EOF
317  ******************************************************************************/
void INT_SYS_SetPending(IRQn_Type irqNumber)
Set Pending Interrupt.
void DefaultISR(void)
Default ISR.
uint32_t INT_SYS_GetPending(IRQn_Type irqNumber)
Get Pending Interrupt.
void INT_SYS_DisableIRQ(IRQn_Type irqNumber)
Disables an interrupt for a given IRQ number.
void INT_SYS_DisableIRQGlobal(void)
Disable system interrupt.
IRQn_Type
Defines the Interrupt Numbers definitions.
Definition: S32K118.h:188
void INT_SYS_SetPriority(IRQn_Type irqNumber, uint8_t priority)
Set Interrupt Priority.
void INT_SYS_ClearPending(IRQn_Type irqNumber)
Clear Pending Interrupt.
void INT_SYS_EnableIRQGlobal(void)
Enables system interrupt.
uint8_t INT_SYS_GetPriority(IRQn_Type irqNumber)
Get Interrupt Priority.
void INT_SYS_EnableIRQ(IRQn_Type irqNumber)
Enables an interrupt for a given IRQ number.
void(* isr_t)(void)
Interrupt handler type.
void INT_SYS_InstallHandler(IRQn_Type irqNumber, const isr_t newHandler, isr_t *const oldHandler)
Installs an interrupt handler routine for a given IRQ number.