SAM4SD32 (SAM4S-EK2)
Loading...
Searching...
No Matches
interrupt_sam_nvic.h
Go to the documentation of this file.
1
33/*
34 * Support and FAQ: visit <a href="https://www.microchip.com/support/">Microchip Support</a>
35 */
36
37#ifndef UTILS_INTERRUPT_INTERRUPT_H
38#define UTILS_INTERRUPT_INTERRUPT_H
39
40#include <compiler.h>
41#include <parts.h>
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
52
58
77# define ISR(func) \
78 void func (void)
79
89# define irq_initialize_vectors() \
90 do { \
91 } while(0)
92
110# define irq_register_handler(int_num, int_prio) \
111 NVIC_ClearPendingIRQ( (IRQn_Type)int_num); \
112 NVIC_SetPriority( (IRQn_Type)int_num, int_prio); \
113 NVIC_EnableIRQ( (IRQn_Type)int_num); \
114
115
116
117# define cpu_irq_enable() \
118 do { \
119 g_interrupt_enabled = true; \
120 __DMB(); \
121 __enable_irq(); \
122 } while (0)
123# define cpu_irq_disable() \
124 do { \
125 __disable_irq(); \
126 __DMB(); \
127 g_interrupt_enabled = false; \
128 } while (0)
129
130typedef uint32_t irqflags_t;
131
132#if !defined(__DOXYGEN__)
133extern volatile bool g_interrupt_enabled;
134#endif
135
136#define cpu_irq_is_enabled() (__get_PRIMASK() == 0)
137
138static volatile uint32_t cpu_irq_critical_section_counter;
139static volatile bool cpu_irq_prev_interrupt_state;
140
141static inline irqflags_t cpu_irq_save(void)
142{
143 volatile irqflags_t flags = cpu_irq_is_enabled();
145 return flags;
146}
147
148static inline bool cpu_irq_is_enabled_flags(irqflags_t flags)
149{
150 return (flags);
151}
152
153static inline void cpu_irq_restore(irqflags_t flags)
154{
155 if (cpu_irq_is_enabled_flags(flags))
157}
158
159void cpu_irq_enter_critical(void);
160void cpu_irq_leave_critical(void);
161
166
167#define Enable_global_interrupt() cpu_irq_enable()
168#define Disable_global_interrupt() cpu_irq_disable()
169#define Is_global_interrupt_enabled() cpu_irq_is_enabled()
170
172
174
175#ifdef __cplusplus
176}
177#endif
178
179#endif /* UTILS_INTERRUPT_INTERRUPT_H */
void cpu_irq_enter_critical(void)
uint32_t irqflags_t
Type used for holding state of interrupt flag.
static volatile bool cpu_irq_prev_interrupt_state
#define cpu_irq_disable()
Disable interrupts globally.
static bool cpu_irq_is_enabled_flags(irqflags_t flags)
Check if interrupts are globally enabled in supplied flags.
static volatile uint32_t cpu_irq_critical_section_counter
static irqflags_t cpu_irq_save(void)
Get and clear the global interrupt flags.
void cpu_irq_leave_critical(void)
#define cpu_irq_is_enabled()
Check if interrupts are globally enabled.
#define cpu_irq_enable()
Enable interrupts globally.
static void cpu_irq_restore(irqflags_t flags)
Restore global interrupt flags.