Initial commit, code based on LPC1224 support and LPC812-MAX CMSIS-DAP interface...
[lpc11u3x] / include / core / systick.h
1 /****************************************************************************
2  *   core/systick.h
3  *
4  * System tick timer control
5  *
6  * Copyright 2012 Nathael Pajani <nathael.pajani@ed3l.fr>
7  *
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  *************************************************************************** */
24 #ifndef CORE_SYSTICK_H
25 #define CORE_SYSTICK_H
27 #include <stdint.h>
29 /***************************************************************************** */
30 /*               System Tick Timer                                             */
31 /***************************************************************************** */
33 /* Start the system tick timer
34  * Starting the systick timer also resets the internal tick counters.
35  * If you need a value that goes beyond one start/stop cycle and accross resets,
36  *    then it's up to you to keep track of this using systick_get_tick_count() and/or
37  *    systick_get_clock_cycles().
38  */
39 void systick_start(void);
41 /* Stop the system tick timer */
42 void systick_stop(void);
44 /* Reset the system tick timer, making it count down from the reload value again
45  * Reseting the systick timer also resets the internal tick counters.
46  * If you need a value that goes beyond one start/stop cycle and accross resets,
47  *    then it's up to you to keep track of this using systick_get_tick_count() and/or
48  *    systick_get_clock_cycles().
49  */
50 void systick_reset(void);
52 /* Get system tick timer current value (counts at get_main_clock() !)
53  * systick_get_timer_val returns a value between 0 and systick_get_timer_reload_val()
54  */
55 uint32_t systick_get_timer_val(void);
57 /* Get system tick timer reload value */
58 uint32_t systick_get_timer_reload_val(void);
60 /* Check if systick is running (return 1) or not (return 0) */
61 uint32_t is_systick_running(void);
63 /* Get the system tick period in ms
64  * A vaue of 0 means the system tick timer has not been configured.
65  * Note : calls to msleep() or usleep() will configure the system tick timer
66  *        with a value of 1ms if it was not configured yet.
67  */
68 uint32_t systick_get_tick_ms_period(void);
70 /* Get the number of system ticks ... since last wrapping of the counter, which
71  * is about 50 days with a 1ms system tick. */
72 uint32_t systick_get_tick_count(void);
74 /* Get the number of clock cycles ... since last wrapping of the counter. */
75 uint32_t systick_get_clock_cycles(void);
77 /* Power up the system tick timer.
78  * ms is the interval between system tick timer interrupts. If set to 0, the default
79  *     value is used, which should provide a 1ms period.
80  */
81 void systick_timer_on(uint32_t ms);
83 /* Removes the main clock from the selected timer block */
84 void systick_timer_off(void);
86 /* Register a callback to be called every 'period' system ticks.
87  * returns the callback number if registration was OK.
88  * returns negative value on error.
89  * The callback will get the "global_wrapping_system_ticks" as argument, which wraps every 50 days
90  *   or so with a 1ms tick
91  */
92 #define MAX_SYSTICK_CALLBACKS  4
93 int add_systick_callback(void (*callback) (uint32_t), uint16_t period);
94 /* Remove a registered callback, given the callback address used to register it. */
95 int remove_systick_callback(void (*callback) (uint32_t));
99 /* This function can be used when you are absolutly certain that systick timer is running, and when
100  * you need to sleep less than 1000us (1ms)
101  */
102 void usleep_short(uint32_t us);
105 #endif /* CORE_SYSTEM_H */