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 __SYSTICK_H__ 33 #define __SYSTICK_H__ 34 35 //***************************************************************************** 36 // 37 //! \addtogroup systick_api 38 //! @{ 39 // 40 //***************************************************************************** 41 42 //***************************************************************************** 43 // 44 // If building with a C++ compiler, make all of the definitions in this header 45 // have a C binding. 46 // 47 //***************************************************************************** 48 #ifdef __cplusplus 49 extern "C" 50 { 51 #endif 52 #include <stdint.h> 53 54 //***************************************************************************** 55 // 56 // Prototypes for the APIs. 57 // 58 //***************************************************************************** 59 60 //***************************************************************************** 61 // 62 //! Enables the SysTick counter. 63 //! 64 //! This function starts the SysTick counter. If an interrupt handler has been 65 //! registered, it is called when the SysTick counter rolls over. 66 //! 67 //! \note Calling this function causes the SysTick counter to (re)commence 68 //! counting from its current value. The counter is not automatically reloaded 69 //! with the period as specified in a previous call to SysTick_setPeriod(). If 70 //! an immediate reload is required, the \b NVIC_ST_CURRENT register must be 71 //! written to force the reload. Any write to this register clears the SysTick 72 //! counter to 0 and causes a reload with the supplied period on the next 73 //! clock. 74 //! 75 //! \return None. 76 // 77 //***************************************************************************** 78 extern void SysTick_enableModule(void); 79 80 //***************************************************************************** 81 // 82 //! Disables the SysTick counter. 83 //! 84 //! This function stops the SysTick counter. If an interrupt handler has been 85 //! registered, it is not called until SysTick is restarted. 86 //! 87 //! \return None. 88 // 89 //***************************************************************************** 90 extern void SysTick_disableModule(void); 91 92 //***************************************************************************** 93 // 94 //! Registers an interrupt handler for the SysTick interrupt. 95 //! 96 //! \param intHandler is a pointer to the function to be called when the 97 //! SysTick interrupt occurs. 98 //! 99 //! This function registers the handler to be called when a SysTick interrupt 100 //! occurs. 101 //! 102 //! \sa Interrupt_registerInterrupt() for important information about 103 //! registering interrupt handlers. 104 //! 105 //! \return None. 106 // 107 //***************************************************************************** 108 extern void SysTick_registerInterrupt(void (*intHandler)(void)); 109 110 //***************************************************************************** 111 // 112 //! Unregisters the interrupt handler for the SysTick interrupt. 113 //! 114 //! This function unregisters the handler to be called when a SysTick interrupt 115 //! occurs. 116 //! 117 //! \sa Interrupt_registerInterrupt() for important information about 118 //! registering interrupt handlers. 119 //! 120 //! \return None. 121 // 122 //***************************************************************************** 123 extern void SysTick_unregisterInterrupt(void); 124 125 //***************************************************************************** 126 // 127 //! Enables the SysTick interrupt. 128 //! 129 //! This function enables the SysTick interrupt, allowing it to be 130 //! reflected to the processor. 131 //! 132 //! \note The SysTick interrupt handler is not required to clear the SysTick 133 //! interrupt source because it is cleared automatically by the NVIC when the 134 //! interrupt handler is called. 135 //! 136 //! \return None. 137 // 138 //***************************************************************************** 139 extern void SysTick_enableInterrupt(void); 140 141 //***************************************************************************** 142 // 143 //! Disables the SysTick interrupt. 144 //! 145 //! This function disables the SysTick interrupt, preventing it from being 146 //! reflected to the processor. 147 //! 148 //! \return None. 149 // 150 //***************************************************************************** 151 extern void SysTick_disableInterrupt(void); 152 153 //***************************************************************************** 154 // 155 //! Sets the period of the SysTick counter. 156 //! 157 //! \param period is the number of clock ticks in each period of the SysTick 158 //! counter and must be between 1 and 16,777,216, inclusive. 159 //! 160 //! This function sets the rate at which the SysTick counter wraps, which 161 //! equates to the number of processor clocks between interrupts. 162 //! 163 //! \note Calling this function does not cause the SysTick counter to reload 164 //! immediately. If an immediate reload is required, the \b NVIC_ST_CURRENT 165 //! register must be written. Any write to this register clears the SysTick 166 //! counter to 0 and causes a reload with the \e period supplied here on 167 //! the next clock after SysTick is enabled. 168 //! 169 //! \return None. 170 // 171 //***************************************************************************** 172 extern void SysTick_setPeriod(uint32_t period); 173 174 //***************************************************************************** 175 // 176 //! Gets the period of the SysTick counter. 177 //! 178 //! This function returns the rate at which the SysTick counter wraps, which 179 //! equates to the number of processor clocks between interrupts. 180 //! 181 //! \return Returns the period of the SysTick counter. 182 // 183 //***************************************************************************** 184 extern uint32_t SysTick_getPeriod(void); 185 186 //***************************************************************************** 187 // 188 //! Gets the current value of the SysTick counter. 189 //! 190 //! This function returns the current value of the SysTick counter, which is 191 //! a value between the period - 1 and zero, inclusive. 192 //! 193 //! \return Returns the current value of the SysTick counter. 194 // 195 //***************************************************************************** 196 extern uint32_t SysTick_getValue(void); 197 198 //***************************************************************************** 199 // 200 // Mark the end of the C bindings section for C++ compilers. 201 // 202 //***************************************************************************** 203 #ifdef __cplusplus 204 } 205 #endif 206 207 //***************************************************************************** 208 // 209 // Close the Doxygen group. 210 //! @} 211 // 212 //***************************************************************************** 213 214 #endif // __SYSTICK_H__ 215