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