1 /* 2 * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/ 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the 14 * 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 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 * 32 */ 33 //***************************************************************************** 34 // 35 // interrupt.h 36 // 37 // Prototypes for the NVIC Interrupt Controller Driver. 38 // 39 //***************************************************************************** 40 41 #ifndef __INTERRUPT_H__ 42 #define __INTERRUPT_H__ 43 44 //***************************************************************************** 45 // 46 // If building with a C++ compiler, make all of the definitions in this header 47 // have a C binding. 48 // 49 //***************************************************************************** 50 #ifdef __cplusplus 51 extern "C" 52 { 53 #endif 54 55 //***************************************************************************** 56 // 57 // A union that describes the entries of the vector table. The union is needed 58 // since the first entry is the stack pointer and the remainder are function 59 // pointers. 60 // 61 //***************************************************************************** 62 typedef union 63 { 64 void (*pfnHandler)(void); 65 unsigned long ulPtr; 66 } 67 uVectorEntry; 68 69 70 //***************************************************************************** 71 // 72 // Macro to generate an interrupt priority mask based on the number of bits 73 // of priority supported by the hardware. 74 // 75 //***************************************************************************** 76 #define INT_PRIORITY_MASK ((0xFF << (8 - NUM_PRIORITY_BITS)) & 0xFF) 77 78 //***************************************************************************** 79 // Interrupt priority levels 80 //***************************************************************************** 81 #define INT_PRIORITY_LVL_0 0x00 82 #define INT_PRIORITY_LVL_1 0x20 83 #define INT_PRIORITY_LVL_2 0x40 84 #define INT_PRIORITY_LVL_3 0x60 85 #define INT_PRIORITY_LVL_4 0x80 86 #define INT_PRIORITY_LVL_5 0xA0 87 #define INT_PRIORITY_LVL_6 0xC0 88 #define INT_PRIORITY_LVL_7 0xE0 89 90 //***************************************************************************** 91 // 92 // Prototypes for the APIs. 93 // 94 //***************************************************************************** 95 extern tBoolean IntMasterEnable(void); 96 extern tBoolean IntMasterDisable(void); 97 extern void IntVTableBaseSet(unsigned long ulVtableBase); 98 extern void IntRegister(unsigned long ulInterrupt, void (*pfnHandler)(void)); 99 extern void IntUnregister(unsigned long ulInterrupt); 100 extern void IntPriorityGroupingSet(unsigned long ulBits); 101 extern unsigned long IntPriorityGroupingGet(void); 102 extern void IntPrioritySet(unsigned long ulInterrupt, 103 unsigned char ucPriority); 104 extern long IntPriorityGet(unsigned long ulInterrupt); 105 extern void IntEnable(unsigned long ulInterrupt); 106 extern void IntDisable(unsigned long ulInterrupt); 107 extern void IntPendSet(unsigned long ulInterrupt); 108 extern void IntPendClear(unsigned long ulInterrupt); 109 extern void IntPriorityMaskSet(unsigned long ulPriorityMask); 110 extern unsigned long IntPriorityMaskGet(void); 111 112 //***************************************************************************** 113 // 114 // Mark the end of the C bindings section for C++ compilers. 115 // 116 //***************************************************************************** 117 #ifdef __cplusplus 118 } 119 #endif 120 121 #endif // __INTERRUPT_H__ 122