1*5fd0122aSMatthias Ringwald /* --COPYRIGHT--,BSD 2*5fd0122aSMatthias Ringwald * Copyright (c) 2017, Texas Instruments Incorporated 3*5fd0122aSMatthias Ringwald * All rights reserved. 4*5fd0122aSMatthias Ringwald * 5*5fd0122aSMatthias Ringwald * Redistribution and use in source and binary forms, with or without 6*5fd0122aSMatthias Ringwald * modification, are permitted provided that the following conditions 7*5fd0122aSMatthias Ringwald * are met: 8*5fd0122aSMatthias Ringwald * 9*5fd0122aSMatthias Ringwald * * Redistributions of source code must retain the above copyright 10*5fd0122aSMatthias Ringwald * notice, this list of conditions and the following disclaimer. 11*5fd0122aSMatthias Ringwald * 12*5fd0122aSMatthias Ringwald * * Redistributions in binary form must reproduce the above copyright 13*5fd0122aSMatthias Ringwald * notice, this list of conditions and the following disclaimer in the 14*5fd0122aSMatthias Ringwald * documentation and/or other materials provided with the distribution. 15*5fd0122aSMatthias Ringwald * 16*5fd0122aSMatthias Ringwald * * Neither the name of Texas Instruments Incorporated nor the names of 17*5fd0122aSMatthias Ringwald * its contributors may be used to endorse or promote products derived 18*5fd0122aSMatthias Ringwald * from this software without specific prior written permission. 19*5fd0122aSMatthias Ringwald * 20*5fd0122aSMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21*5fd0122aSMatthias Ringwald * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22*5fd0122aSMatthias Ringwald * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23*5fd0122aSMatthias Ringwald * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24*5fd0122aSMatthias Ringwald * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25*5fd0122aSMatthias Ringwald * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26*5fd0122aSMatthias Ringwald * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 27*5fd0122aSMatthias Ringwald * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28*5fd0122aSMatthias Ringwald * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 29*5fd0122aSMatthias Ringwald * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30*5fd0122aSMatthias Ringwald * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31*5fd0122aSMatthias Ringwald * --/COPYRIGHT--*/ 32*5fd0122aSMatthias Ringwald #ifndef __SYSTICK_H__ 33*5fd0122aSMatthias Ringwald #define __SYSTICK_H__ 34*5fd0122aSMatthias Ringwald 35*5fd0122aSMatthias Ringwald //***************************************************************************** 36*5fd0122aSMatthias Ringwald // 37*5fd0122aSMatthias Ringwald //! \addtogroup systick_api 38*5fd0122aSMatthias Ringwald //! @{ 39*5fd0122aSMatthias Ringwald // 40*5fd0122aSMatthias Ringwald //***************************************************************************** 41*5fd0122aSMatthias Ringwald 42*5fd0122aSMatthias Ringwald //***************************************************************************** 43*5fd0122aSMatthias Ringwald // 44*5fd0122aSMatthias Ringwald // If building with a C++ compiler, make all of the definitions in this header 45*5fd0122aSMatthias Ringwald // have a C binding. 46*5fd0122aSMatthias Ringwald // 47*5fd0122aSMatthias Ringwald //***************************************************************************** 48*5fd0122aSMatthias Ringwald #ifdef __cplusplus 49*5fd0122aSMatthias Ringwald extern "C" 50*5fd0122aSMatthias Ringwald { 51*5fd0122aSMatthias Ringwald #endif 52*5fd0122aSMatthias Ringwald #include <stdint.h> 53*5fd0122aSMatthias Ringwald 54*5fd0122aSMatthias Ringwald //***************************************************************************** 55*5fd0122aSMatthias Ringwald // 56*5fd0122aSMatthias Ringwald // Prototypes for the APIs. 57*5fd0122aSMatthias Ringwald // 58*5fd0122aSMatthias Ringwald //***************************************************************************** 59*5fd0122aSMatthias Ringwald 60*5fd0122aSMatthias Ringwald //***************************************************************************** 61*5fd0122aSMatthias Ringwald // 62*5fd0122aSMatthias Ringwald //! Enables the SysTick counter. 63*5fd0122aSMatthias Ringwald //! 64*5fd0122aSMatthias Ringwald //! This function starts the SysTick counter. If an interrupt handler has been 65*5fd0122aSMatthias Ringwald //! registered, it is called when the SysTick counter rolls over. 66*5fd0122aSMatthias Ringwald //! 67*5fd0122aSMatthias Ringwald //! \note Calling this function causes the SysTick counter to (re)commence 68*5fd0122aSMatthias Ringwald //! counting from its current value. The counter is not automatically reloaded 69*5fd0122aSMatthias Ringwald //! with the period as specified in a previous call to SysTick_setPeriod(). If 70*5fd0122aSMatthias Ringwald //! an immediate reload is required, the \b NVIC_ST_CURRENT register must be 71*5fd0122aSMatthias Ringwald //! written to force the reload. Any write to this register clears the SysTick 72*5fd0122aSMatthias Ringwald //! counter to 0 and causes a reload with the supplied period on the next 73*5fd0122aSMatthias Ringwald //! clock. 74*5fd0122aSMatthias Ringwald //! 75*5fd0122aSMatthias Ringwald //! \return None. 76*5fd0122aSMatthias Ringwald // 77*5fd0122aSMatthias Ringwald //***************************************************************************** 78*5fd0122aSMatthias Ringwald extern void SysTick_enableModule(void); 79*5fd0122aSMatthias Ringwald 80*5fd0122aSMatthias Ringwald //***************************************************************************** 81*5fd0122aSMatthias Ringwald // 82*5fd0122aSMatthias Ringwald //! Disables the SysTick counter. 83*5fd0122aSMatthias Ringwald //! 84*5fd0122aSMatthias Ringwald //! This function stops the SysTick counter. If an interrupt handler has been 85*5fd0122aSMatthias Ringwald //! registered, it is not called until SysTick is restarted. 86*5fd0122aSMatthias Ringwald //! 87*5fd0122aSMatthias Ringwald //! \return None. 88*5fd0122aSMatthias Ringwald // 89*5fd0122aSMatthias Ringwald //***************************************************************************** 90*5fd0122aSMatthias Ringwald extern void SysTick_disableModule(void); 91*5fd0122aSMatthias Ringwald 92*5fd0122aSMatthias Ringwald //***************************************************************************** 93*5fd0122aSMatthias Ringwald // 94*5fd0122aSMatthias Ringwald //! Registers an interrupt handler for the SysTick interrupt. 95*5fd0122aSMatthias Ringwald //! 96*5fd0122aSMatthias Ringwald //! \param intHandler is a pointer to the function to be called when the 97*5fd0122aSMatthias Ringwald //! SysTick interrupt occurs. 98*5fd0122aSMatthias Ringwald //! 99*5fd0122aSMatthias Ringwald //! This function registers the handler to be called when a SysTick interrupt 100*5fd0122aSMatthias Ringwald //! occurs. 101*5fd0122aSMatthias Ringwald //! 102*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about 103*5fd0122aSMatthias Ringwald //! registering interrupt handlers. 104*5fd0122aSMatthias Ringwald //! 105*5fd0122aSMatthias Ringwald //! \return None. 106*5fd0122aSMatthias Ringwald // 107*5fd0122aSMatthias Ringwald //***************************************************************************** 108*5fd0122aSMatthias Ringwald extern void SysTick_registerInterrupt(void (*intHandler)(void)); 109*5fd0122aSMatthias Ringwald 110*5fd0122aSMatthias Ringwald //***************************************************************************** 111*5fd0122aSMatthias Ringwald // 112*5fd0122aSMatthias Ringwald //! Unregisters the interrupt handler for the SysTick interrupt. 113*5fd0122aSMatthias Ringwald //! 114*5fd0122aSMatthias Ringwald //! This function unregisters the handler to be called when a SysTick interrupt 115*5fd0122aSMatthias Ringwald //! occurs. 116*5fd0122aSMatthias Ringwald //! 117*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about 118*5fd0122aSMatthias Ringwald //! registering interrupt handlers. 119*5fd0122aSMatthias Ringwald //! 120*5fd0122aSMatthias Ringwald //! \return None. 121*5fd0122aSMatthias Ringwald // 122*5fd0122aSMatthias Ringwald //***************************************************************************** 123*5fd0122aSMatthias Ringwald extern void SysTick_unregisterInterrupt(void); 124*5fd0122aSMatthias Ringwald 125*5fd0122aSMatthias Ringwald //***************************************************************************** 126*5fd0122aSMatthias Ringwald // 127*5fd0122aSMatthias Ringwald //! Enables the SysTick interrupt. 128*5fd0122aSMatthias Ringwald //! 129*5fd0122aSMatthias Ringwald //! This function enables the SysTick interrupt, allowing it to be 130*5fd0122aSMatthias Ringwald //! reflected to the processor. 131*5fd0122aSMatthias Ringwald //! 132*5fd0122aSMatthias Ringwald //! \note The SysTick interrupt handler is not required to clear the SysTick 133*5fd0122aSMatthias Ringwald //! interrupt source because it is cleared automatically by the NVIC when the 134*5fd0122aSMatthias Ringwald //! interrupt handler is called. 135*5fd0122aSMatthias Ringwald //! 136*5fd0122aSMatthias Ringwald //! \return None. 137*5fd0122aSMatthias Ringwald // 138*5fd0122aSMatthias Ringwald //***************************************************************************** 139*5fd0122aSMatthias Ringwald extern void SysTick_enableInterrupt(void); 140*5fd0122aSMatthias Ringwald 141*5fd0122aSMatthias Ringwald //***************************************************************************** 142*5fd0122aSMatthias Ringwald // 143*5fd0122aSMatthias Ringwald //! Disables the SysTick interrupt. 144*5fd0122aSMatthias Ringwald //! 145*5fd0122aSMatthias Ringwald //! This function disables the SysTick interrupt, preventing it from being 146*5fd0122aSMatthias Ringwald //! reflected to the processor. 147*5fd0122aSMatthias Ringwald //! 148*5fd0122aSMatthias Ringwald //! \return None. 149*5fd0122aSMatthias Ringwald // 150*5fd0122aSMatthias Ringwald //***************************************************************************** 151*5fd0122aSMatthias Ringwald extern void SysTick_disableInterrupt(void); 152*5fd0122aSMatthias Ringwald 153*5fd0122aSMatthias Ringwald //***************************************************************************** 154*5fd0122aSMatthias Ringwald // 155*5fd0122aSMatthias Ringwald //! Sets the period of the SysTick counter. 156*5fd0122aSMatthias Ringwald //! 157*5fd0122aSMatthias Ringwald //! \param period is the number of clock ticks in each period of the SysTick 158*5fd0122aSMatthias Ringwald //! counter and must be between 1 and 16,777,216, inclusive. 159*5fd0122aSMatthias Ringwald //! 160*5fd0122aSMatthias Ringwald //! This function sets the rate at which the SysTick counter wraps, which 161*5fd0122aSMatthias Ringwald //! equates to the number of processor clocks between interrupts. 162*5fd0122aSMatthias Ringwald //! 163*5fd0122aSMatthias Ringwald //! \note Calling this function does not cause the SysTick counter to reload 164*5fd0122aSMatthias Ringwald //! immediately. If an immediate reload is required, the \b NVIC_ST_CURRENT 165*5fd0122aSMatthias Ringwald //! register must be written. Any write to this register clears the SysTick 166*5fd0122aSMatthias Ringwald //! counter to 0 and causes a reload with the \e period supplied here on 167*5fd0122aSMatthias Ringwald //! the next clock after SysTick is enabled. 168*5fd0122aSMatthias Ringwald //! 169*5fd0122aSMatthias Ringwald //! \return None. 170*5fd0122aSMatthias Ringwald // 171*5fd0122aSMatthias Ringwald //***************************************************************************** 172*5fd0122aSMatthias Ringwald extern void SysTick_setPeriod(uint32_t period); 173*5fd0122aSMatthias Ringwald 174*5fd0122aSMatthias Ringwald //***************************************************************************** 175*5fd0122aSMatthias Ringwald // 176*5fd0122aSMatthias Ringwald //! Gets the period of the SysTick counter. 177*5fd0122aSMatthias Ringwald //! 178*5fd0122aSMatthias Ringwald //! This function returns the rate at which the SysTick counter wraps, which 179*5fd0122aSMatthias Ringwald //! equates to the number of processor clocks between interrupts. 180*5fd0122aSMatthias Ringwald //! 181*5fd0122aSMatthias Ringwald //! \return Returns the period of the SysTick counter. 182*5fd0122aSMatthias Ringwald // 183*5fd0122aSMatthias Ringwald //***************************************************************************** 184*5fd0122aSMatthias Ringwald extern uint32_t SysTick_getPeriod(void); 185*5fd0122aSMatthias Ringwald 186*5fd0122aSMatthias Ringwald //***************************************************************************** 187*5fd0122aSMatthias Ringwald // 188*5fd0122aSMatthias Ringwald //! Gets the current value of the SysTick counter. 189*5fd0122aSMatthias Ringwald //! 190*5fd0122aSMatthias Ringwald //! This function returns the current value of the SysTick counter, which is 191*5fd0122aSMatthias Ringwald //! a value between the period - 1 and zero, inclusive. 192*5fd0122aSMatthias Ringwald //! 193*5fd0122aSMatthias Ringwald //! \return Returns the current value of the SysTick counter. 194*5fd0122aSMatthias Ringwald // 195*5fd0122aSMatthias Ringwald //***************************************************************************** 196*5fd0122aSMatthias Ringwald extern uint32_t SysTick_getValue(void); 197*5fd0122aSMatthias Ringwald 198*5fd0122aSMatthias Ringwald //***************************************************************************** 199*5fd0122aSMatthias Ringwald // 200*5fd0122aSMatthias Ringwald // Mark the end of the C bindings section for C++ compilers. 201*5fd0122aSMatthias Ringwald // 202*5fd0122aSMatthias Ringwald //***************************************************************************** 203*5fd0122aSMatthias Ringwald #ifdef __cplusplus 204*5fd0122aSMatthias Ringwald } 205*5fd0122aSMatthias Ringwald #endif 206*5fd0122aSMatthias Ringwald 207*5fd0122aSMatthias Ringwald //***************************************************************************** 208*5fd0122aSMatthias Ringwald // 209*5fd0122aSMatthias Ringwald // Close the Doxygen group. 210*5fd0122aSMatthias Ringwald //! @} 211*5fd0122aSMatthias Ringwald // 212*5fd0122aSMatthias Ringwald //***************************************************************************** 213*5fd0122aSMatthias Ringwald 214*5fd0122aSMatthias Ringwald #endif // __SYSTICK_H__ 215