123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /*
- * Copyright (c) 2011-2012, Freescale Semiconductor, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * o Redistributions of source code must retain the above copyright notice, this list
- * of conditions and the following disclaimer.
- *
- * o Redistributions in binary form must reproduce the above copyright notice, this
- * list of conditions and the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
- */
- //! @addtogroup diag_epit
- //! @{
- /*!
- * @file epit.h
- * @brief EPIT driver public interface.
- */
- #ifndef __EPIT_H__
- #define __EPIT_H__
- #include "imx_timer.h"
- #include "sdk.h"
- ////////////////////////////////////////////////////////////////////////////////
- // Definitions
- ////////////////////////////////////////////////////////////////////////////////
- //! @brief Free running reload mode.
- //!
- //! When the counter reaches zero it rolls over to 0xFFFF_FFFF.
- #define FREE_RUNNING 0
- //! @brief Set and forget reload mode.
- //!
- //! When the counter reaches zero it reloads from the modulus register.
- #define SET_AND_FORGET 1
- //! @brief Pass to epit_counter_enable() to enable interrupts.
- #define IRQ_MODE 1
- //! @brief Get the irq id of RPIT by instance number.
- //! @param x I2C instance number, from 1 through 2.
- #define EPIT_IRQS(x) ( (x) == HW_EPIT1 ? IMX_INT_EPIT1 : (x) == HW_EPIT2 ? IMX_INT_EPIT2 : 0xFFFFFFFF)
- ////////////////////////////////////////////////////////////////////////////////
- // API
- ////////////////////////////////////////////////////////////////////////////////
- #if defined(__cplusplus)
- extern "C" {
- #endif
- /*!
- * @brief Initialize the EPIT timer.
- *
- * @param instance the EPIT instance number.
- * @param clock_src Source clock of the counter: CLKSRC_OFF, CLKSRC_IPG_CLK,
- * CLKSRC_PER_CLK, CLKSRC_CKIL.
- * @param prescaler Prescaler of source clock from 1 to 4096.
- * @param reload_mode Counter reload mode: FREE_RUNNING or SET_AND_FORGET.
- * @param load_val Load value from where the counter start.
- * @param low_power_mode Low power during which the timer is enabled:
- * WAIT_MODE_EN and/or STOP_MODE_EN.
- */
- void epit_init(uint32_t instance, uint32_t clock_src, uint32_t prescaler,
- uint32_t reload_mode, uint32_t load_val, uint32_t low_power_mode);
- /*!
- * @brief Setup EPIT interrupt.
- *
- * It enables or disables the related HW module interrupt, and attached the related sub-routine
- * into the vector table.
- *
- * @param instance the EPIT instance number.
- * @param irq_subroutine the EPIT interrupt interrupt routine.
- * @param enableIt True to enable the interrupt, false to disable.
- */
- void epit_setup_interrupt(uint32_t instance, void (*irq_subroutine)(void), bool enableIt);
- /*!
- * @brief Enable the EPIT module.
- *
- * Used typically when the epit_init is done, and other interrupt related settings are ready.
- *
- * In interrupt mode, when the interrupt fires you should call epit_get_compare_event() to
- * clear the compare flag.
- *
- * @param instance the EPIT instance number.
- * @param load_val Load value from where the counter starts.
- * @param irq_mode Interrupt mode: IRQ_MODE or POLLING_MODE.
- */
- void epit_counter_enable(uint32_t instance, uint32_t load_val, uint32_t irq_mode);
- /*!
- * @brief Disable the counter.
- *
- * It saves energy when not used.
- *
- * @param instance the EPIT instance number.
- */
- void epit_counter_disable(uint32_t instance);
- /*!
- * @brief Get the output compare status flag and clear it if set.
- *
- * This function can typically be used for polling method, but
- * is also used to clear the status compare flag in IRQ mode.
- *
- * @param instance the EPIT instance number.
- * @return Value of the compare event flag.
- */
- uint32_t epit_get_compare_event(uint32_t instance);
- /*!
- * @brief Set the output compare register.
- *
- *
- * @param instance the EPIT instance number.
- * @param Value of the compare register.
- */
- void epit_set_compare_event(uint32_t instance, uint32_t compare_val);
- /*!
- * @brief Get the counter value.
- *
- *
- * @param instance the EPIT instance number.
- * @return Value of the counter register.
- */
- uint32_t epit_get_counter_value(uint32_t instance);
- /*!
- * @brief Reload the counter with a known value.
- *
- * @param instance the EPIT instance number.
- * @param load_val Value loaded into the timer counter.
- */
- void epit_reload_counter(uint32_t instance, uint32_t load_val);
- #if defined(__cplusplus)
- }
- #endif
- //! @}
- #endif //__EPIT_H__
- ////////////////////////////////////////////////////////////////////////////////
- // EOF
- ////////////////////////////////////////////////////////////////////////////////
|