interrupt.h
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 #ifndef __INTERRUPT_H__
33 #define __INTERRUPT_H__
34 
35 //*****************************************************************************
36 //
39 //
40 //*****************************************************************************
41 
42 
43 //*****************************************************************************
44 //
45 // If building with a C++ compiler, make all of the definitions in this header
46 // have a C binding.
47 //
48 //*****************************************************************************
49 #ifdef __cplusplus
50 extern "C"
51 {
52 #endif
53 
54 #include <stdint.h>
55 #include <stdbool.h>
56 #include <ti/devices/msp432p4xx/inc/msp.h>
57 
58 /******************************************************************************
59 * NVIC interrupts *
60 ******************************************************************************/
61 /* System exceptions */
62 #define FAULT_NMI ( 2) /* NMI fault */
63 #define FAULT_HARD ( 3) /* Hard fault */
64 #define FAULT_MPU ( 4) /* MPU fault */
65 #define FAULT_BUS ( 5) /* Bus fault */
66 #define FAULT_USAGE ( 6) /* Usage fault */
67 #define FAULT_SVCALL (11) /* SVCall */
68 #define FAULT_DEBUG (12) /* Debug monitor */
69 #define FAULT_PENDSV (14) /* PendSV */
70 #define FAULT_SYSTICK (15) /* System Tick */
71 
72 /* External interrupts */
73 #define INT_PSS (16) /* PSS IRQ */
74 #define INT_CS (17) /* CS IRQ */
75 #define INT_PCM (18) /* PCM IRQ */
76 #define INT_WDT_A (19) /* WDT_A IRQ */
77 #define INT_FPU (20) /* FPU IRQ */
78 #define INT_FLCTL (21) /* FLCTL IRQ */
79 #define INT_COMP_E0 (22) /* COMP_E0 IRQ */
80 #define INT_COMP_E1 (23) /* COMP_E1 IRQ */
81 #define INT_TA0_0 (24) /* TA0_0 IRQ */
82 #define INT_TA0_N (25) /* TA0_N IRQ */
83 #define INT_TA1_0 (26) /* TA1_0 IRQ */
84 #define INT_TA1_N (27) /* TA1_N IRQ */
85 #define INT_TA2_0 (28) /* TA2_0 IRQ */
86 #define INT_TA2_N (29) /* TA2_N IRQ */
87 #define INT_TA3_0 (30) /* TA3_0 IRQ */
88 #define INT_TA3_N (31) /* TA3_N IRQ */
89 #define INT_EUSCIA0 (32) /* EUSCIA0 IRQ */
90 #define INT_EUSCIA1 (33) /* EUSCIA1 IRQ */
91 #define INT_EUSCIA2 (34) /* EUSCIA2 IRQ */
92 #define INT_EUSCIA3 (35) /* EUSCIA3 IRQ */
93 #define INT_EUSCIB0 (36) /* EUSCIB0 IRQ */
94 #define INT_EUSCIB1 (37) /* EUSCIB1 IRQ */
95 #define INT_EUSCIB2 (38) /* EUSCIB2 IRQ */
96 #define INT_EUSCIB3 (39) /* EUSCIB3 IRQ */
97 #define INT_ADC14 (40) /* ADC14 IRQ */
98 #define INT_T32_INT1 (41) /* T32_INT1 IRQ */
99 #define INT_T32_INT2 (42) /* T32_INT2 IRQ */
100 #define INT_T32_INTC (43) /* T32_INTC IRQ */
101 #define INT_AES256 (44) /* AES256 IRQ */
102 #define INT_RTC_C (45) /* RTC_C IRQ */
103 #define INT_DMA_ERR (46) /* DMA_ERR IRQ */
104 #define INT_DMA_INT3 (47) /* DMA_INT3 IRQ */
105 #define INT_DMA_INT2 (48) /* DMA_INT2 IRQ */
106 #define INT_DMA_INT1 (49) /* DMA_INT1 IRQ */
107 #define INT_DMA_INT0 (50) /* DMA_INT0 IRQ */
108 #define INT_PORT1 (51) /* PORT1 IRQ */
109 #define INT_PORT2 (52) /* PORT2 IRQ */
110 #define INT_PORT3 (53) /* PORT3 IRQ */
111 #define INT_PORT4 (54) /* PORT4 IRQ */
112 #define INT_PORT5 (55) /* PORT5 IRQ */
113 #define INT_PORT6 (56) /* PORT6 IRQ */
114 #define INT_LCD_F (57) /* PORT6 IRQ */
115 
116 #define NUM_INTERRUPTS (57)
117 //*****************************************************************************
118 //
119 // Macro to generate an interrupt priority mask based on the number of bits
120 // of priority supported by the hardware.
121 //
122 //*****************************************************************************
123 #define INT_PRIORITY_MASK ((0xFF << (8 - NUM_PRIORITY_BITS)) & 0xFF)
124 #define NUM_PRIORITY 8
125 
126 #define NVIC_APINT_PRIGROUP_M 0x00000700 // Interrupt Priority Grouping
127 #define NVIC_APINT_PRIGROUP_7_1 0x00000000 // Priority group 7.1 split
128 #define NVIC_APINT_PRIGROUP_6_2 0x00000100 // Priority group 6.2 split
129 #define NVIC_APINT_PRIGROUP_5_3 0x00000200 // Priority group 5.3 split
130 #define NVIC_APINT_PRIGROUP_4_4 0x00000300 // Priority group 4.4 split
131 #define NVIC_APINT_PRIGROUP_3_5 0x00000400 // Priority group 3.5 split
132 #define NVIC_APINT_PRIGROUP_2_6 0x00000500 // Priority group 2.6 split
133 #define NVIC_APINT_PRIGROUP_1_7 0x00000600 // Priority group 1.7 split
134 #define NVIC_APINT_PRIGROUP_0_8 0x00000700 // Priority group 0.8 split
135 #define NVIC_SYS_PRI1_R 0xE000ED18 // System Handler Priority 1
136 #define NVIC_SYS_PRI2_R 0xE000ED1C // System Handler Priority 2
137 #define NVIC_SYS_PRI3_R 0xE000ED20 // System Handler Priority 3
138 #define NVIC_PRI0_R 0xE000E400 // Interrupt 0-3 Priority
139 #define NVIC_PRI1_R 0xE000E404 // Interrupt 4-7 Priority
140 #define NVIC_PRI2_R 0xE000E408 // Interrupt 8-11 Priority
141 #define NVIC_PRI3_R 0xE000E40C // Interrupt 12-15 Priority
142 #define NVIC_PRI4_R 0xE000E410 // Interrupt 16-19 Priority
143 #define NVIC_PRI5_R 0xE000E414 // Interrupt 20-23 Priority
144 #define NVIC_PRI6_R 0xE000E418 // Interrupt 24-27 Priority
145 #define NVIC_PRI7_R 0xE000E41C // Interrupt 28-31 Priority
146 #define NVIC_PRI8_R 0xE000E420 // Interrupt 32-35 Priority
147 #define NVIC_PRI9_R 0xE000E424 // Interrupt 36-39 Priority
148 #define NVIC_PRI10_R 0xE000E428 // Interrupt 40-43 Priority
149 #define NVIC_PRI11_R 0xE000E42C // Interrupt 44-47 Priority
150 #define NVIC_PRI12_R 0xE000E430 // Interrupt 48-51 Priority
151 #define NVIC_PRI13_R 0xE000E434 // Interrupt 52-55 Priority
152 #define NVIC_PRI14_R 0xE000E438 // Interrupt 56-59 Priority
153 #define NVIC_PRI15_R 0xE000E43C // Interrupt 60-63 Priority
154 #define NVIC_EN0_R 0xE000E100 // Interrupt 0-31 Set Enable
155 #define NVIC_EN1_R 0xE000E104 // Interrupt 32-54 Set Enable
156 #define NVIC_DIS0_R 0xE000E180 // Interrupt 0-31 Clear Enable
157 #define NVIC_DIS1_R 0xE000E184 // Interrupt 32-54 Clear Enable
158 #define NVIC_PEND0_R 0xE000E200 // Interrupt 0-31 Set Pending
159 #define NVIC_PEND1_R 0xE000E204 // Interrupt 32-54 Set Pending
160 #define NVIC_UNPEND0_R 0xE000E280 // Interrupt 0-31 Clear Pending
161 #define NVIC_UNPEND1_R 0xE000E284 // Interrupt 32-54 Clear Pending
162 //*****************************************************************************
163 //
164 // Prototypes for the APIs.
165 //
166 //*****************************************************************************
167 
168 //*****************************************************************************
169 //
178 //
179 //*****************************************************************************
180 extern bool Interrupt_enableMaster(void);
181 
182 //*****************************************************************************
183 //
193 //
194 //*****************************************************************************
195 extern bool Interrupt_disableMaster(void);
196 
197 //*****************************************************************************
198 //
223 //
224 //*****************************************************************************
225 extern void Interrupt_registerInterrupt(uint32_t interruptNumber,
226  void (*intHandler)(void));
227 
228 //*****************************************************************************
229 //
245 //
246 //*****************************************************************************
247 extern void Interrupt_unregisterInterrupt(uint32_t interruptNumber);
248 
249 //*****************************************************************************
250 //
263 //
264 //*****************************************************************************
265 extern void Interrupt_setPriorityGrouping(uint32_t bits);
266 
267 //*****************************************************************************
268 //
275 //
276 //*****************************************************************************
277 extern uint32_t Interrupt_getPriorityGrouping(void);
278 
279 //*****************************************************************************
280 //
300 //
301 //*****************************************************************************
302 extern void Interrupt_setPriority(uint32_t interruptNumber, uint8_t priority);
303 
304 //*****************************************************************************
305 //
318 //
319 //*****************************************************************************
320 extern uint8_t Interrupt_getPriority(uint32_t interruptNumber);
321 
322 //*****************************************************************************
323 //
387 //
388 //*****************************************************************************
389 extern void Interrupt_enableInterrupt(uint32_t interruptNumber);
390 
391 //*****************************************************************************
392 //
405 //
406 //*****************************************************************************
407 extern void Interrupt_disableInterrupt(uint32_t interruptNumber);
408 
409 //*****************************************************************************
410 //
422 //
423 //*****************************************************************************
424 extern bool Interrupt_isEnabled(uint32_t interruptNumber);
425 
426 //*****************************************************************************
427 //
444 //
445 //*****************************************************************************
446 extern void Interrupt_pendInterrupt(uint32_t interruptNumber);
447 
448 //*****************************************************************************
449 //
463 //
464 //*****************************************************************************
465 extern void Interrupt_unpendInterrupt(uint32_t interruptNumber);
466 
467 //*****************************************************************************
468 //
488 //
489 //*****************************************************************************
490 extern void Interrupt_setPriorityMask(uint8_t priorityMask);
491 
492 //*****************************************************************************
493 //
510 //
511 //*****************************************************************************
512 extern uint8_t Interrupt_getPriorityMask(void);
513 
514 //*****************************************************************************
515 //
523 //
524 //*****************************************************************************
525 extern void Interrupt_setVectorTableAddress(uint32_t addr);
526 
527 //*****************************************************************************
528 //
532 //
533 //*****************************************************************************
534 extern uint32_t Interrupt_getVectorTableAddress(void);
535 
536 //*****************************************************************************
537 //
543 //
544 //*****************************************************************************
545 extern void Interrupt_enableSleepOnIsrExit(void);
546 
547 //*****************************************************************************
548 //
552 //
553 //*****************************************************************************
554 extern void Interrupt_disableSleepOnIsrExit(void);
555 
556 //*****************************************************************************
557 //
558 // Mark the end of the C bindings section for C++ compilers.
559 //
560 //*****************************************************************************
561 #ifdef __cplusplus
562 }
563 #endif
564 
565 //*****************************************************************************
566 //
567 // Close the Doxygen group.
569 //
570 //*****************************************************************************
571 
572 #endif // __INTERRUPT_H__
bool Interrupt_enableMaster(void)
void Interrupt_setVectorTableAddress(uint32_t addr)
Definition: interrupt.c:522
void Interrupt_enableSleepOnIsrExit(void)
Definition: interrupt.c:532
void Interrupt_disableSleepOnIsrExit(void)
Definition: interrupt.c:537
void Interrupt_enableInterrupt(uint32_t interruptNumber)
Definition: interrupt.c:302
uint32_t Interrupt_getVectorTableAddress(void)
Definition: interrupt.c:527
void Interrupt_unpendInterrupt(uint32_t interruptNumber)
Definition: interrupt.c:480
uint8_t Interrupt_getPriorityMask(void)
Definition: interrupt.c:517
bool Interrupt_disableMaster(void)
Definition: interrupt.c:157
void Interrupt_registerInterrupt(uint32_t interruptNumber, void(*intHandler)(void))
Definition: interrupt.c:165
bool Interrupt_isEnabled(uint32_t interruptNumber)
Definition: interrupt.c:390
void Interrupt_setPriorityMask(uint8_t priorityMask)
Definition: interrupt.c:512
void Interrupt_setPriority(uint32_t interruptNumber, uint8_t priority)
Definition: interrupt.c:270
void Interrupt_pendInterrupt(uint32_t interruptNumber)
Definition: interrupt.c:442
void Interrupt_disableInterrupt(uint32_t interruptNumber)
Definition: interrupt.c:346
uint8_t Interrupt_getPriority(uint32_t interruptNumber)
Definition: interrupt.c:288
uint32_t Interrupt_getPriorityGrouping(void)
Definition: interrupt.c:241
void Interrupt_setPriorityGrouping(uint32_t bits)
Definition: interrupt.c:221
void Interrupt_unregisterInterrupt(uint32_t interruptNumber)
Definition: interrupt.c:208

Copyright 2019, Texas Instruments Incorporated