S32 SDK
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 
66 typedef void (* isr_t)(void);
67 
68 /*******************************************************************************
69  * Default interrupt handler - implemented in startup.s
70  ******************************************************************************/
72 void DefaultISR(void);
73 
74 /*******************************************************************************
75  * API
76  ******************************************************************************/
77 
78 #if defined(__cplusplus)
79 extern "C" {
80 #endif /* __cplusplus*/
81 
84 
99 void INT_SYS_InstallHandler(IRQn_Type irqNumber,
100  const isr_t newHandler,
101  isr_t* const oldHandler);
102 
110 void INT_SYS_EnableIRQ(IRQn_Type irqNumber);
111 
119 void INT_SYS_DisableIRQ(IRQn_Type irqNumber);
120 
127 void INT_SYS_EnableIRQGlobal(void);
128 
135 void INT_SYS_DisableIRQGlobal(void);
136 
144 void INT_SYS_SetPriority(IRQn_Type irqNumber, uint8_t priority);
145 
153 uint8_t INT_SYS_GetPriority(IRQn_Type irqNumber);
154 
155 #if FEATURE_INTERRUPT_HAS_PENDING_STATE
156 
164 void INT_SYS_ClearPending(IRQn_Type irqNumber);
165 
173 void INT_SYS_SetPending(IRQn_Type irqNumber);
174 
184 uint32_t INT_SYS_GetPending(IRQn_Type irqNumber);
185 
186 #endif /* FEATURE_INTERRUPT_HAS_PENDING_STATE */
187 
188 #if FEATURE_INTERRUPT_HAS_ACTIVE_STATE
189 
197 uint32_t INT_SYS_GetActive(IRQn_Type irqNumber);
198 
199 #endif /* FEATURE_INTERRUPT_HAS_ACTIVE_STATE */
200 
201 #if FEATURE_INTERRUPT_HAS_SOFTWARE_IRQ
202 
210 void INT_SYS_SetSoftwareIRQRequest(IRQn_Type irqNumber);
211 
219 void INT_SYS_ClearSoftwareIRQRequest(IRQn_Type irqNumber);
220 
221 #endif /* FEATURE_INTERRUPT_HAS_SOFTWARE_IRQ */
222 
223 
224 #if FEATURE_MSCM_HAS_CPU_INTERRUPT_ROUTER
225 
234 void INT_SYS_GenerateDirectedCpuInterrupt(IRQn_Type irqNumber, interrupt_manager_cpu_targets_t cpu_target);
235 
236 #endif /* FEATURE_MSCM_HAS_CPU_INTERRUPT_ROUTER */
237 
240 #if defined(__cplusplus)
241 }
242 #endif /* __cplusplus*/
243 
246 #endif /* INTERRUPT_MANAGER_H */
247 /*******************************************************************************
248  * EOF
249  ******************************************************************************/
void DefaultISR(void)
Default ISR.
void INT_SYS_DisableIRQ(IRQn_Type irqNumber)
Disables an interrupt for a given IRQ number.
void INT_SYS_DisableIRQGlobal(void)
Disable system interrupt.
void INT_SYS_SetPriority(IRQn_Type irqNumber, uint8_t priority)
Set Interrupt Priority.
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.
IRQn_Type
Defines the Interrupt Numbers definitions.
Definition: S32K142.h:192
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.