123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- //*****************************************************************************
- //
- // am_hal_stimer.h
- //! @file
- //!
- //! @brief Functions for accessing and configuring the STIMER.
- //!
- //! @addtogroup stimer2 Counter/Timer (STIMER)
- //! @ingroup apollo2hal
- //! @{
- //
- //*****************************************************************************
- //*****************************************************************************
- //
- // Copyright (c) 2017, Ambiq Micro
- // All rights reserved.
- //
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions are met:
- //
- // 1. Redistributions of source code must retain the above copyright notice,
- // this list of conditions and the following disclaimer.
- //
- // 2. 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.
- //
- // 3. Neither the name of the copyright holder 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.
- //
- // This is part of revision 1.2.11 of the AmbiqSuite Development Package.
- //
- //*****************************************************************************
- #ifndef AM_HAL_STIMER_H
- #define AM_HAL_STIMER_H
- //
- // Compute address of a given COMPARE or CAPTURE register.
- // Note - For Apollo2, the parameter n should be 0 (as only 1 stimer module
- // exists) and the parameter r should be 0-7 (compare) or 0-3 (capture).
- //
- #define AM_REG_STIMER_COMPARE(n, r) (AM_REG_CTIMERn(n) + \
- AM_REG_CTIMER_SCMPR0_O + (r * 4))
- #define AM_REG_STIMER_CAPTURE(n, r) (AM_REG_CTIMERn(n) + \
- AM_REG_CTIMER_SCAPT0_O + (r * 4))
- //*****************************************************************************
- //
- //! @name Interrupt Status Bits
- //! @brief Interrupt Status Bits for enable/disble use
- //!
- //! These macros may be used to set and clear interrupt bits
- //! @{
- //
- //*****************************************************************************
- #define AM_HAL_STIMER_INT_COMPAREA AM_REG_CTIMER_STMINTSTAT_COMPAREA_M
- #define AM_HAL_STIMER_INT_COMPAREB AM_REG_CTIMER_STMINTSTAT_COMPAREB_M
- #define AM_HAL_STIMER_INT_COMPAREC AM_REG_CTIMER_STMINTSTAT_COMPAREC_M
- #define AM_HAL_STIMER_INT_COMPARED AM_REG_CTIMER_STMINTSTAT_COMPARED_M
- #define AM_HAL_STIMER_INT_COMPAREE AM_REG_CTIMER_STMINTSTAT_COMPAREE_M
- #define AM_HAL_STIMER_INT_COMPAREF AM_REG_CTIMER_STMINTSTAT_COMPAREF_M
- #define AM_HAL_STIMER_INT_COMPAREG AM_REG_CTIMER_STMINTSTAT_COMPAREG_M
- #define AM_HAL_STIMER_INT_COMPAREH AM_REG_CTIMER_STMINTSTAT_COMPAREH_M
- #define AM_HAL_STIMER_INT_OVERFLOW AM_REG_CTIMER_STMINTSTAT_OVERFLOW_M
- #define AM_HAL_STIMER_INT_CAPTUREA AM_REG_CTIMER_STMINTSTAT_CAPTUREA_M
- #define AM_HAL_STIMER_INT_CAPTUREB AM_REG_CTIMER_STMINTSTAT_CAPTUREB_M
- #define AM_HAL_STIMER_INT_CAPTUREC AM_REG_CTIMER_STMINTSTAT_CAPTUREC_M
- #define AM_HAL_STIMER_INT_CAPTURED AM_REG_CTIMER_STMINTSTAT_CAPTURED_M
- //! @}
- //*****************************************************************************
- //
- //! @name STimer Configuration Bits
- //! @brief Interrupt Status Bits for enable/disble use
- //!
- //! These macros may be used to set and clear interrupt bits
- //! @{
- //
- //*****************************************************************************
- #define AM_HAL_STIMER_CFG_THAW \
- AM_REG_CTIMER_STCFG_FREEZE_THAW
- #define AM_HAL_STIMER_CFG_FREEZE \
- AM_REG_CTIMER_STCFG_FREEZE_FREEZE
- #define AM_HAL_STIMER_CFG_RUN \
- AM_REG_CTIMER_STCFG_CLEAR_RUN
- #define AM_HAL_STIMER_CFG_CLEAR \
- AM_REG_CTIMER_STCFG_CLEAR_CLEAR
- #define AM_HAL_STIMER_CFG_COMPARE_A_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_A_EN_ENABLE
- #define AM_HAL_STIMER_CFG_COMPARE_B_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_B_EN_ENABLE
- #define AM_HAL_STIMER_CFG_COMPARE_C_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_C_EN_ENABLE
- #define AM_HAL_STIMER_CFG_COMPARE_D_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_D_EN_ENABLE
- #define AM_HAL_STIMER_CFG_COMPARE_E_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_E_EN_ENABLE
- #define AM_HAL_STIMER_CFG_COMPARE_F_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_F_EN_ENABLE
- #define AM_HAL_STIMER_CFG_COMPARE_G_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_G_EN_ENABLE
- #define AM_HAL_STIMER_CFG_COMPARE_H_ENABLE \
- AM_REG_CTIMER_STCFG_COMPARE_H_EN_ENABLE
- //! @}
- //*****************************************************************************
- //
- //! @name Clock Configuration options
- //! @brief STimer Configuration register options.
- //!
- //! These options are to be used with the am_hal_stimer_config() function.
- //! @{
- //
- //*****************************************************************************
- #define AM_HAL_STIMER_NO_CLK \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_NOCLK)
- #define AM_HAL_STIMER_HFRC_3MHZ \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_HFRC_DIV16)
- #define AM_HAL_STIMER_HFRC_187_5KHZ \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_HFRC_DIV256)
- #define AM_HAL_STIMER_XTAL_32KHZ \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_XTAL_DIV1)
- #define AM_HAL_STIMER_XTAL_16KHZ \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_XTAL_DIV2)
- #define AM_HAL_STIMER_XTAL_1KHZ \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_XTAL_DIV32)
- #define AM_HAL_STIMER_LFRC_1KHZ \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_LFRC_DIV1)
- #define AM_HAL_STIMER_HFRC_CTIMER0A \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_CTIMER0A)
- #define AM_HAL_STIMER_HFRC_CTIMER0B \
- AM_REG_CTIMER_STCFG_CLKSEL(AM_REG_CTIMER_STCFG_CLKSEL_CTIMER0B)
- //! @}
- //*****************************************************************************
- //
- //! @name Capture Control Register options.
- //! @brief Configuration options for capture control register.
- //!
- //! These options are to be used with the am_hal_stimer_capture_control_set
- //! function.
- //! @{
- //
- //*****************************************************************************
- #define AM_HAL_STIMER_CAPTURE_A_ENABLE \
- AM_REG_CTIMER_CAPTURE_CONTROL_CAPTURE_A_ENABLE
- #define AM_HAL_STIMER_CAPTURE_B_ENABLE \
- AM_REG_CTIMER_CAPTURE_CONTROL_CAPTURE_B_ENABLE
- #define AM_HAL_STIMER_CAPTURE_C_ENABLE \
- AM_REG_CTIMER_CAPTURE_CONTROL_CAPTURE_C_ENABLE
- #define AM_HAL_STIMER_CAPTURE_D_ENABLE \
- AM_REG_CTIMER_CAPTURE_CONTROL_CAPTURE_D_ENABLE
- //! @}
- //*****************************************************************************
- //
- //
- //
- //*****************************************************************************
- //*****************************************************************************
- //
- // Stimer configuration structure
- //
- //*****************************************************************************
- typedef struct
- {
- //
- //! Configuration options for the STIMER
- //
- uint32_t ui32STimerConfig;
- }
- am_hal_stimer_config_t;
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- //*****************************************************************************
- //
- // External function definitions
- //
- //*****************************************************************************
- extern uint32_t am_hal_stimer_config(uint32_t ui32STimerConfig);
- extern uint32_t am_hal_stimer_counter_get(void);
- extern void am_hal_stimer_counter_clear(void);
- extern void am_hal_stimer_compare_delta_set(uint32_t ui32CmprInstance,
- uint32_t ui32Delta);
- extern uint32_t am_hal_stimer_compare_get(uint32_t ui32CmprInstance);
- extern void am_hal_stimer_capture_start(uint32_t ui32CaptureNum,
- uint32_t ui32GPIONumber,
- bool bPolarity);
- extern void am_hal_stimer_capture_stop(uint32_t ui32CaptureNum);
- extern uint32_t am_hal_stimer_capture_get(uint32_t ui32CaptureNum);
- extern void am_hal_stimer_int_enable(uint32_t ui32Interrupt);
- extern uint32_t am_hal_stimer_int_enable_get(void);
- extern void am_hal_stimer_int_disable(uint32_t ui32Interrupt);
- extern void am_hal_stimer_int_set(uint32_t ui32Interrupt);
- extern void am_hal_stimer_int_clear(uint32_t ui32Interrupt);
- extern uint32_t am_hal_stimer_int_status_get(bool bEnabledOnly);
- #ifdef __cplusplus
- }
- #endif
- #endif // AM_HAL_STIMER_H
- //*****************************************************************************
- //
- // End Doxygen group.
- //! @}
- //
- //*****************************************************************************
|