| /* ---------------------------------------------------------------------------- | |
| * SAM Software Package License | |
| * ---------------------------------------------------------------------------- | |
| * Copyright (c) 2015, Atmel Corporation | |
| * | |
| * All rights reserved. | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions are met: | |
| * | |
| * - Redistributions of source code must retain the above copyright notice, | |
| * this list of conditions and the disclaimer below. | |
| * | |
| * Atmel's name may not be used to endorse or promote products derived from | |
| * this software without specific prior written permission. | |
| * | |
| * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR | |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE | |
| * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, | |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | |
| * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | |
| * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| * ---------------------------------------------------------------------------- | |
| */ | |
| /** | |
| * \file | |
| * | |
| * \par Purpose | |
| * | |
| * Methods and definitions for an internal timer. | |
| * | |
| * Defines a common and simpliest use of timer to generate delays using PIT | |
| * | |
| * \par Usage | |
| * | |
| * -# Configure the System Tick with timer_configure() when MCK changed | |
| * \note | |
| * Must be done before any invoke of timer_wait(), or timer_sleep() | |
| * -# Uses timer_wait to actively wait according to your timer resolution. | |
| * -# Uses timer_sleep to passively wait ccording to your timer resolution. | |
| * | |
| */ | |
| #ifndef TIMER_HEADER_ | |
| #define TIMER_HEADER_ | |
| /*---------------------------------------------------------------------------- | |
| * Headers | |
| *----------------------------------------------------------------------------*/ | |
| #include <stdint.h> | |
| struct _timeout | |
| { | |
| uint32_t start; | |
| uint32_t count; | |
| }; | |
| /*---------------------------------------------------------------------------- | |
| * Global functions | |
| *----------------------------------------------------------------------------*/ | |
| /** | |
| * \brief Configures the PIT & reset _timer. | |
| * Systick interrupt handler will generates 1ms interrupt and increase a | |
| * tickCount. | |
| * | |
| * \note PIT is enabled automatically in this function. | |
| * \warning This function also set PIT handler to aic which is | |
| * mandatory to make the timer API work | |
| * | |
| * \param resolution initialize PIT resolution (in nano seconds) | |
| */ | |
| extern uint32_t timer_configure(uint32_t resolution); | |
| /** | |
| * \brief Sync wait for count times resoltion | |
| */ | |
| extern void timer_wait(uint32_t count); | |
| /** | |
| * \brief Retrieve current timer resolution. | |
| * | |
| * \return Current timer resolution (0 if not already set) | |
| */ | |
| extern uint32_t timer_get_resolution(void); | |
| /** | |
| * \brief Sync sleep for count times resolution | |
| */ | |
| extern void timer_sleep(uint32_t count); | |
| /** | |
| * \brief Initialize a timeout | |
| */ | |
| extern void timer_start_timeout(struct _timeout* timeout, uint32_t count); | |
| /** | |
| * \brief Tells if the timeout as been reached | |
| */ | |
| extern uint8_t timer_timeout_reached(struct _timeout* timeout); | |
| /** | |
| * \brief Compute elapsed number of ticks between start and end with | |
| * taking overlaps into accounts | |
| * | |
| * \param start Start tick point. | |
| * \param end End tick point. | |
| */ | |
| extern uint32_t timer_get_interval(uint32_t start, uint32_t end); | |
| /** | |
| * \brief Returns the current number of ticks | |
| */ | |
| extern uint32_t timer_get_tick(void); | |
| #endif /* TIMER_HEADER_ */ |