/******************************************************************************
*  Filename:       timer.h
*  Revised:        2015-11-03 09:54:47 +0100 (Tue, 03 Nov 2015)
*  Revision:       44933
*
*  Copyright (c) 2015 - 2016, Texas Instruments Incorporated
*  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 ORGANIZATION 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 peripheral_group
//! @{
//! \addtogroup timer_api
//! @{
//
//****************************************************************************

#ifndef __GPT_H__
#define __GPT_H__

//*****************************************************************************
//
// If building with a C++ compiler, make all of the definitions in this header
// have a C binding.
//
//*****************************************************************************
#ifdef __cplusplus
extern "C"
{
#endif

#include <stdbool.h>
#include <stdint.h>
#include <inc/hw_ints.h>
#include <inc/hw_types.h>
#include <inc/hw_memmap.h>
#include <inc/hw_gpt.h>
#include <driverlib/interrupt.h>
#include <driverlib/debug.h>

//*****************************************************************************
//
// Support for DriverLib in ROM:
// This section renames all functions that are not "static inline", so that
// calling these functions will default to implementation in flash. At the end
// of this file a second renaming will change the defaults to implementation in
// ROM for available functions.
//
// To force use of the implementation in flash, e.g. for debugging:
// - Globally: Define DRIVERLIB_NOROM at project level
// - Per function: Use prefix "NOROM_" when calling the function
//
//*****************************************************************************
#if !defined(DOXYGEN)
    #define TimerConfigure                  NOROM_TimerConfigure
    #define TimerLevelControl               NOROM_TimerLevelControl
    #define TimerStallControl               NOROM_TimerStallControl
    #define TimerWaitOnTriggerControl       NOROM_TimerWaitOnTriggerControl
    #define TimerIntRegister                NOROM_TimerIntRegister
    #define TimerIntUnregister              NOROM_TimerIntUnregister
    #define TimerMatchUpdateMode            NOROM_TimerMatchUpdateMode
    #define TimerIntervalLoadMode           NOROM_TimerIntervalLoadMode
#endif

//*****************************************************************************
//
// Values that can be passed to TimerConfigure as the ui32Config parameter.
//
//*****************************************************************************
#define TIMER_CFG_ONE_SHOT        0x00000021  // Full-width one-shot timer
#define TIMER_CFG_ONE_SHOT_UP     0x00000031  // Full-width one-shot up-count timer
#define TIMER_CFG_PERIODIC        0x00000022  // Full-width periodic timer
#define TIMER_CFG_PERIODIC_UP     0x00000032  // Full-width periodic up-count timer
#define TIMER_CFG_SPLIT_PAIR      0x04000000  // Two half-width timers
#define TIMER_CFG_A_ONE_SHOT      0x00000021  // Timer A one-shot timer
#define TIMER_CFG_A_ONE_SHOT_UP   0x00000031  // Timer A one-shot up-count timer
#define TIMER_CFG_A_PERIODIC      0x00000022  // Timer A periodic timer
#define TIMER_CFG_A_PERIODIC_UP   0x00000032  // Timer A periodic up-count timer
#define TIMER_CFG_A_CAP_COUNT     0x00000003  // Timer A event counter
#define TIMER_CFG_A_CAP_COUNT_UP  0x00000013  // Timer A event up-counter
#define TIMER_CFG_A_CAP_TIME      0x00000007  // Timer A event timer
#define TIMER_CFG_A_CAP_TIME_UP   0x00000017  // Timer A event up-count timer
#define TIMER_CFG_A_PWM           0x0000000A  // Timer A PWM output
#define TIMER_CFG_B_ONE_SHOT      0x00002100  // Timer B one-shot timer
#define TIMER_CFG_B_ONE_SHOT_UP   0x00003100  // Timer B one-shot up-count timer
#define TIMER_CFG_B_PERIODIC      0x00002200  // Timer B periodic timer
#define TIMER_CFG_B_PERIODIC_UP   0x00003200  // Timer B periodic up-count timer
#define TIMER_CFG_B_CAP_COUNT     0x00000300  // Timer B event counter
#define TIMER_CFG_B_CAP_COUNT_UP  0x00001300  // Timer B event up-counter
#define TIMER_CFG_B_CAP_TIME      0x00000700  // Timer B event timer
#define TIMER_CFG_B_CAP_TIME_UP   0x00001700  // Timer B event up-count timer
#define TIMER_CFG_B_PWM           0x00000A00  // Timer B PWM output

//*****************************************************************************
//
// Values that can be passed to TimerIntEnable, TimerIntDisable, and
// TimerIntClear as the ui32IntFlags parameter, and returned from
// TimerIntStatus.
//
//*****************************************************************************
#define TIMER_TIMB_DMA            0x00002000  // TimerB DMA Done interrupt
#define TIMER_TIMB_MATCH          0x00000800  // TimerB match interrupt
#define TIMER_CAPB_EVENT          0x00000400  // CaptureB event interrupt
#define TIMER_CAPB_MATCH          0x00000200  // CaptureB match interrupt
#define TIMER_TIMB_TIMEOUT        0x00000100  // TimerB time out interrupt
#define TIMER_TIMA_DMA            0x00000020  // TimerA DMA Done interrupt
#define TIMER_TIMA_MATCH          0x00000010  // TimerA match interrupt
#define TIMER_CAPA_EVENT          0x00000004  // CaptureA event interrupt
#define TIMER_CAPA_MATCH          0x00000002  // CaptureA match interrupt
#define TIMER_TIMA_TIMEOUT        0x00000001  // TimerA time out interrupt

//*****************************************************************************
//
// Values that can be passed to TimerControlEvent as the ui32Event parameter.
//
//*****************************************************************************
#define TIMER_EVENT_POS_EDGE      0x00000000  // Count positive edges
#define TIMER_EVENT_NEG_EDGE      0x00000404  // Count negative edges
#define TIMER_EVENT_BOTH_EDGES    0x00000C0C  // Count both edges

//*****************************************************************************
//
// Values that can be passed to most of the timer APIs as the ui32Timer
// parameter.
//
//*****************************************************************************
#define TIMER_A                   0x000000FF  // Timer A
#define TIMER_B                   0x0000FF00  // Timer B
#define TIMER_BOTH                0x0000FFFF  // Timer Both

//*****************************************************************************
//
// Values that can be passed to GPTSynchronize as the ui32Timers parameter
//
//*****************************************************************************
#define TIMER_0A_SYNC             0x00000001  // Synchronize Timer 0A
#define TIMER_0B_SYNC             0x00000002  // Synchronize Timer 0B
#define TIMER_1A_SYNC             0x00000004  // Synchronize Timer 1A
#define TIMER_1B_SYNC             0x00000008  // Synchronize Timer 1B
#define TIMER_2A_SYNC             0x00000010  // Synchronize Timer 2A
#define TIMER_2B_SYNC             0x00000020  // Synchronize Timer 2B
#define TIMER_3A_SYNC             0x00000040  // Synchronize Timer 3A
#define TIMER_3B_SYNC             0x00000080  // Synchronize Timer 3B

//*****************************************************************************
//
// Values that can be passed to TimerMatchUpdateMode
//
//*****************************************************************************
#define TIMER_MATCHUPDATE_NEXTCYCLE  0x00000000 // Apply match register on next cycle
#define TIMER_MATCHUPDATE_TIMEOUT    0x00000001 // Apply match register on next timeout

//*****************************************************************************
//
// Values that can be passed to TimerIntervalLoad
//
//*****************************************************************************
#define TIMER_INTERVALLOAD_NEXTCYCLE  0x00000000 // Load TxR register with the value in the TxILR register on the next clock cycle
#define TIMER_INTERVALLOAD_TIMEOUT    0x00000001 // Load TxR register with the value in the TxILR register on next timeout

//*****************************************************************************
//
// API Functions and prototypes
//
//*****************************************************************************

#ifdef DRIVERLIB_DEBUG
//*****************************************************************************
//
//! \internal
//!
//! \brief Checks a timer base address.
//!
//! This function determines if a timer module base address is valid.
//!
//! \param ui32Base is the base address of the timer module.
//!
//! \return Returns \c true if the base address is valid and \c false
//! otherwise.
//
//*****************************************************************************
static bool
TimerBaseValid(uint32_t ui32Base)
{
    return((ui32Base == GPT0_BASE) || (ui32Base == GPT1_BASE) ||
           (ui32Base == GPT2_BASE) || (ui32Base == GPT3_BASE));
}
#endif

//*****************************************************************************
//
//! \brief Enables the timer(s).
//!
//! This function enables operation of the timer module. The timer must be
//! configured before it is enabled.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to enable. Must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerEnable(uint32_t ui32Base, uint32_t ui32Timer)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));

    //
    // Enable the timer(s) module.
    //
    HWREG(ui32Base + GPT_O_CTL) |= ui32Timer & (GPT_CTL_TAEN | GPT_CTL_TBEN);
}

//*****************************************************************************
//
//! \brief Disables the timer(s).
//!
//! This function disables operation of the timer module.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to disable. Must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerDisable(uint32_t ui32Base, uint32_t ui32Timer)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));

    //
    // Disable the timer module.
    //
    HWREG(ui32Base + GPT_O_CTL) &= ~(ui32Timer &
                                     (GPT_CTL_TAEN | GPT_CTL_TBEN));
}

//*****************************************************************************
//
//! \brief Configures the timer(s).
//!
//! This function configures the operating mode of the timer(s). The timer
//! module is disabled before being configured and is left in the disabled
//! state.
//!
//! The timers are comprised of two 16-bit timers that can
//! operate independently or be concatenated to form a 32-bit timer.
//!
//! \note If the timers are used independently the length of timer can be
//! extended to 24 bit by use of an 8 bit prescale register set using
//! \ref TimerPrescaleSet().
//!
//! When configuring for full-width timer \c ui32Config is set
//! as one of the following values:
//! - \ref TIMER_CFG_ONE_SHOT    : Full-width one-shot timer.
//! - \ref TIMER_CFG_ONE_SHOT_UP : Full-width one-shot timer that counts up
//!   instead of down.
//! - \ref TIMER_CFG_PERIODIC    : Full-width periodic timer.
//! - \ref TIMER_CFG_PERIODIC_UP : Full-width periodic timer that counts up
//!   instead of down.
//!
//! When configuring for a pair of half-width timers, each timer is separately
//! configured. The timers are configured by setting \c ui32Config to
//! the bitwise OR of one of each of the following three:
//! - Use half-width timers:
//!   - \ref TIMER_CFG_SPLIT_PAIR
//! - Timer A:
//!   - \ref TIMER_CFG_A_ONE_SHOT     : Half-width one-shot timer
//!   - \ref TIMER_CFG_A_ONE_SHOT_UP  : Half-width one-shot timer that counts up
//!     instead of down.
//!   - \ref TIMER_CFG_A_PERIODIC     : Half-width periodic timer
//!   - \ref TIMER_CFG_A_PERIODIC_UP  : Half-width periodic timer that counts up
//!     instead of down.
//!   - \ref TIMER_CFG_A_CAP_COUNT    : Half-width edge count capture
//!   - \ref TIMER_CFG_A_CAP_COUNT_UP : Half-width edge count capture that counts
//!     up instead of down.
//!   - \ref TIMER_CFG_A_CAP_TIME     : Half-width edge time capture
//!   - \ref TIMER_CFG_A_CAP_TIME_UP  : Half-width edge time capture that counts up
//!     instead of down.
//!   - \ref TIMER_CFG_A_PWM          : Half-width PWM output
//! - Timer B:
//!   - Same as Timer A but using TIMER_CFG_B_* instead.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Config is the configuration for the timer.
//!
//! \return None
//
//*****************************************************************************
extern void TimerConfigure(uint32_t ui32Base, uint32_t ui32Config);

//*****************************************************************************
//
//! \brief Controls the output level.
//!
//! This function configures the PWM output level for the specified timer.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to adjust. Must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param bInvert specifies the output level.
//! - \c true  : Timer's output is active low.
//! - \c false : Timer's output is active high.
//!
//! \return None
//
//*****************************************************************************
extern void TimerLevelControl(uint32_t ui32Base, uint32_t ui32Timer,
                              bool bInvert);

//*****************************************************************************
//
//! \brief Controls the event type.
//!
//! This function configures the signal edge(s) that triggers the timer when
//! in capture mode.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to be adjusted; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param ui32Event specifies the type of event; must be one of:
//! - \ref TIMER_EVENT_POS_EDGE
//! - \ref TIMER_EVENT_NEG_EDGE
//! - \ref TIMER_EVENT_BOTH_EDGES
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerEventControl(uint32_t ui32Base, uint32_t ui32Timer, uint32_t ui32Event)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));

    //
    // Set the event type.
    //
    ui32Timer &= GPT_CTL_TAEVENT_M | GPT_CTL_TBEVENT_M;
    HWREG(ui32Base + GPT_O_CTL) = ((HWREG(ui32Base + GPT_O_CTL) & ~ui32Timer) |
                                   (ui32Event & ui32Timer));
}

//*****************************************************************************
//
//! \brief Controls the stall handling.
//!
//! This function controls the stall response for the specified timer. If the
//! \e bStall parameter is \b true, then the timer stops counting if the
//! processor enters debug mode; otherwise the timer keeps running while in
//! debug mode.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to be adjusted; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param bStall specifies the response to a stall signal.
//! - \c true  : Timer stops counting if the processor enters debug mode.
//! - \c false : Timer keeps running if the processor enters debug mode.
//!
//! \return None
//
//*****************************************************************************
extern void TimerStallControl(uint32_t ui32Base, uint32_t ui32Timer,
                              bool bStall);

//*****************************************************************************
//
//! \brief Controls the wait on trigger handling.
//!
//! This function controls whether or not a timer waits for a trigger input to
//! start counting. When enabled, the previous timer in the trigger chain must
//! count to its timeout in order for this timer to start counting. Refer to
//! the part's data sheet for a description of the trigger chain.
//!
//! \note This function should not be used for Timer 0A or Wide Timer 0A.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to be adjusted; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param bWait specifies if the timer should wait for a trigger input.
//! - \c true  : Wait for trigger.
//! - \c false : Do not wait for trigger.
//!
//! \return None
//
//*****************************************************************************
extern void TimerWaitOnTriggerControl(uint32_t ui32Base, uint32_t ui32Timer,
                                      bool bWait);

//*****************************************************************************
//
//! \brief Set the timer prescale value.
//!
//! This function configures the value of the timer clock prescaler. The
//! prescaler is only operational when in half-width mode and is used to extend
//! the range of the half-width timer modes.
//!
//! When in one-shot or periodic down count modes, \b ui32Value defines the
//! prescaler for the timer counter. When acting as a true prescaler, the
//! prescaler counts down to 0 before the value in timer registers are incremented.
//!
//! In all other individual/split modes, \b ui32Value is a linear extension of
//! the upper range of the timer counter, holding bits 23:16 in the 16-bit modes
//! of the 16/32-bit timer.
//!
//! \note Because the prescaler counts down to 0 the timer division ratio equals
//! \b ui32Value + 1. E.g. a prescale value of 15 divides the timer rate by 16.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to adjust; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param ui32Value is the timer prescale value which must be between 0 and 255
//! (both included).
//! - 0   : Timer division ratio = 1 (disable prescaling).
//! - 1   : Timer division ratio = 2.
//! - ...
//! - 255 : Timer division ratio = 256.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerPrescaleSet(uint32_t ui32Base, uint32_t ui32Timer, uint32_t ui32Value)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));
    ASSERT(ui32Value < 256);

    //
    // Set the timer A prescaler if requested.
    //
    if(ui32Timer & TIMER_A)
    {
        HWREG(ui32Base + GPT_O_TAPR) = ui32Value;
    }

    //
    // Set the timer B prescaler if requested.
    //
    if(ui32Timer & TIMER_B)
    {
        HWREG(ui32Base + GPT_O_TBPR) = ui32Value;
    }
}

//*****************************************************************************
//
//! \brief Get the timer prescale value.
//!
//! This function gets the value of the timer clock prescaler. The
//! prescaler is only operational when in half-width mode and is used to extend
//! the range of the half-width timer modes.
//!
//! When in one-shot or periodic down count modes, \b ui32Value defines the
//! prescaler for the timer counter. When acting as a true prescaler, the
//! prescaler counts down to 0 before the value in timer registers are incremented.
//!
//! In all other individual/split modes, \b ui32Value is a linear extension of
//! the upper range of the timer counter, holding bits 23:16 in the 16-bit modes
//! of the 16/32-bit timer.
//!
//! \note Because the prescaler counts down to 0 the timer division ratio equals
//! \b ui32Value + 1. E.g. a prescale value of 15 divides the timer rate by 16.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//!
//! \return Returns the value of the timer prescaler.
//
//*****************************************************************************
__STATIC_INLINE uint32_t
TimerPrescaleGet(uint32_t ui32Base, uint32_t ui32Timer)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));

    //
    // Return the appropriate prescale value.
    //
    return((ui32Timer == TIMER_A) ? HWREG(ui32Base + GPT_O_TAPR) :
           HWREG(ui32Base + GPT_O_TBPR));
}

//*****************************************************************************
//
//! \brief Set the timer prescale match value.
//!
//! This function configures the value of the input clock prescaler match
//! value. When in a half-width mode that uses the counter match and the
//! prescaler, the prescale match effectively extends the range of the match.
//! The prescaler provides the least significant bits when counting down in
//! periodic and one-shot modes; in all other modes, the prescaler provides the
//! most significant bits.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to adjust; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param ui32Value is the timer prescale match value which must be between 0
//! and 255 (both included).
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerPrescaleMatchSet(uint32_t ui32Base, uint32_t ui32Timer, uint32_t ui32Value)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));
    ASSERT(ui32Value < 256);

    //
    // Set the timer A prescale match if requested.
    //
    if(ui32Timer & TIMER_A)
    {
        HWREG(ui32Base + GPT_O_TAPMR) = ui32Value;
    }

    //
    // Set the timer B prescale match if requested.
    //
    if(ui32Timer & TIMER_B)
    {
        HWREG(ui32Base + GPT_O_TBPMR) = ui32Value;
    }
}

//*****************************************************************************
//
//! \brief Get the timer prescale match value.
//!
//! This function gets the value of the input clock prescaler match value.
//! When in a half-width mode that uses the counter match and prescaler, the
//! prescale match effectively extends the range of the match. The prescaler
//! provides the least significant bits when counting down in periodic and
//! one-shot modes; in all other modes, the prescaler provides the most
//! significant bits.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//!
//! \return Returns the value of the timer prescale match.
//
//*****************************************************************************
__STATIC_INLINE uint32_t
TimerPrescaleMatchGet(uint32_t ui32Base, uint32_t ui32Timer)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B));

    //
    // Return the appropriate prescale match value.
    //
    return((ui32Timer == TIMER_A) ? HWREG(ui32Base + GPT_O_TAPMR) :
           HWREG(ui32Base + GPT_O_TBPMR));
}

//*****************************************************************************
//
//! \brief Sets the timer load value.
//!
//! This function configures the timer load value; if the timer is running then
//! the value is immediately loaded into the timer.
//!
//! \note This function can be used for both full- and half-width modes of
//! 16/32-bit timers.
//!
//! \note Only \ref TIMER_A should be used when the timer is configured for
//! full-width operation.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to adjust; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param ui32Value is the load value.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerLoadSet(uint32_t ui32Base, uint32_t ui32Timer, uint32_t ui32Value)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));

    //
    // Set the timer A load value if requested.
    //
    if(ui32Timer & TIMER_A)
    {
        HWREG(ui32Base + GPT_O_TAILR) = ui32Value;
    }

    //
    // Set the timer B load value if requested.
    //
    if(ui32Timer & TIMER_B)
    {
        HWREG(ui32Base + GPT_O_TBILR) = ui32Value;
    }
}

//*****************************************************************************
//
//! \brief Gets the timer load value.
//!
//! This function gets the currently programmed interval load value for the
//! specified timer.
//!
//! \note This function can be used for both full- and half-width modes of
//! 16/32-bit timers.
//!
//! \note Only \ref TIMER_A should be used when the timer is configured for
//! full-width operation.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//!
//! \return Returns the load value for the timer
//
//*****************************************************************************
__STATIC_INLINE uint32_t
TimerLoadGet(uint32_t ui32Base, uint32_t ui32Timer)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B));

    //
    // Return the appropriate load value.
    //
    return((ui32Timer == TIMER_A) ? HWREG(ui32Base + GPT_O_TAILR) :
           HWREG(ui32Base + GPT_O_TBILR));
}

//*****************************************************************************
//
//! \brief Gets the current timer value.
//!
//! This function reads the current value of the specified timer.
//!
//! \note This function can be used for both full- and half-width modes of
//! 16/32-bit timers.
//!
//! \note Only \ref TIMER_A should be used when the timer is configured for
//! full-width operation.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//!
//! \return Returns the current value of the timer.
//
//*****************************************************************************
__STATIC_INLINE uint32_t
TimerValueGet(uint32_t ui32Base, uint32_t ui32Timer)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B));

    //
    // Return the appropriate timer value.
    //
    return((ui32Timer == TIMER_A) ? HWREG(ui32Base + GPT_O_TAR) :
           HWREG(ui32Base + GPT_O_TBR));
}

//*****************************************************************************
//
//! \brief Sets the timer match value.
//!
//! This function configures the match value for a timer. This value is used
//! in capture count mode to determine when to interrupt the processor and in
//! PWM mode to determine the duty cycle of the output signal. Match interrupts
//! can also be generated in periodic and one-shot modes when the value of the
//! counter matches this register.
//!
//! \note This function can be used for both full- and half-width modes of
//! 16/32-bit timers.
//!
//! \note Only \ref TIMER_A should be used when the timer is configured for
//! full-width operation.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to adjust; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param ui32Value is the match value.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerMatchSet(uint32_t ui32Base, uint32_t ui32Timer, uint32_t ui32Value)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B) ||
           (ui32Timer == TIMER_BOTH));

    //
    // Set the timer A match value if requested.
    //
    if(ui32Timer & TIMER_A)
    {
        HWREG(ui32Base + GPT_O_TAMATCHR) = ui32Value;
    }

    //
    // Set the timer B match value if requested.
    //
    if(ui32Timer & TIMER_B)
    {
        HWREG(ui32Base + GPT_O_TBMATCHR) = ui32Value;
    }
}

//*****************************************************************************
//
//! \brief Gets the timer match value.
//!
//! This function gets the match value for the specified timer.
//!
//! \note This function can be used for both full- and half-width modes of
//! 16/32-bit timers.
//!
//! \note Only \ref TIMER_A should be used when the timer is configured for
//! full-width operation.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//!
//! \return Returns the match value for the timer
//
//*****************************************************************************
__STATIC_INLINE uint32_t
TimerMatchGet(uint32_t ui32Base, uint32_t ui32Timer)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));
    ASSERT((ui32Timer == TIMER_A) || (ui32Timer == TIMER_B));

    //
    // Return the appropriate match value.
    //
    return((ui32Timer == TIMER_A) ? HWREG(ui32Base + GPT_O_TAMATCHR) :
           HWREG(ui32Base + GPT_O_TBMATCHR));
}

//*****************************************************************************
//
//! \brief Registers an interrupt handler for the timer interrupt.
//!
//! This function registers the handler to be called when a timer interrupt
//! occurs. In addition, this function enables the global interrupt in the
//! interrupt controller; specific timer interrupts must be enabled via
//! \ref TimerIntEnable(). It is the interrupt handler's responsibility to clear
//! the interrupt source via \ref TimerIntClear().
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s); must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param pfnHandler is a pointer to the function to be called when the timer
//! interrupt occurs.
//!
//! \return None
//!
//! \sa \ref IntRegister() for important information about registering interrupt
//! handlers.
//
//*****************************************************************************
extern void TimerIntRegister(uint32_t ui32Base, uint32_t ui32Timer,
                             void (*pfnHandler)(void));

//*****************************************************************************
//
//! \brief Unregisters an interrupt handler for the timer interrupt.
//!
//! This function unregisters the handler to be called when a timer interrupt
//! occurs. This function also masks off the interrupt in the interrupt
//! controller so that the interrupt handler is no longer called.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s); must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//!
//! \return None
//!
//! \sa \ref IntRegister() for important information about registering interrupt
//! handlers.
//
//*****************************************************************************
extern void TimerIntUnregister(uint32_t ui32Base, uint32_t ui32Timer);

//*****************************************************************************
//
//! \brief Enables individual timer interrupt sources.
//!
//! This function enables the indicated timer interrupt sources. Only the
//! sources that are enabled can be reflected to the processor interrupt;
//! disabled sources have no effect on the processor.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32IntFlags is the bit mask of the interrupt sources to be enabled.
//! The parameter must be the bitwise OR of any combination of
//! the following:
//! - \ref TIMER_CAPB_EVENT    : Capture B event interrupt.
//! - \ref TIMER_CAPB_MATCH    : Capture B match interrupt.
//! - \ref TIMER_TIMB_TIMEOUT  : Timer B timeout interrupt.
//! - \ref TIMER_CAPA_EVENT    : Capture A event interrupt.
//! - \ref TIMER_CAPA_MATCH    : Capture A match interrupt.
//! - \ref TIMER_TIMA_TIMEOUT  : Timer A timeout interrupt.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));

    //
    // Enable the specified interrupts.
    //
    HWREG(ui32Base + GPT_O_IMR) |= ui32IntFlags;
}

//*****************************************************************************
//
//! \brief Disables individual timer interrupt sources.
//!
//! This function disables the indicated timer interrupt sources. Only the
//! sources that are enabled can be reflected to the processor interrupt;
//! disabled sources have no effect on the processor.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32IntFlags is the bit mask of the interrupt sources to be disabled.
//! The parameter must be the bitwise OR of any combination of
//! the following:
//! - \ref TIMER_CAPB_EVENT    : Capture B event interrupt.
//! - \ref TIMER_CAPB_MATCH    : Capture B match interrupt.
//! - \ref TIMER_TIMB_TIMEOUT  : Timer B timeout interrupt.
//! - \ref TIMER_CAPA_EVENT    : Capture A event interrupt.
//! - \ref TIMER_CAPA_MATCH    : Capture A match interrupt.
//! - \ref TIMER_TIMA_TIMEOUT  : Timer A timeout interrupt.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));

    //
    // Disable the specified interrupts.
    //
    HWREG(ui32Base + GPT_O_IMR) &= ~(ui32IntFlags);
}

//*****************************************************************************
//
//! \brief Gets the current interrupt status.
//!
//! This function returns the interrupt status for the timer module. Either
//! the raw interrupt status or the status of interrupts that are allowed to
//! reflect to the processor can be returned.
//!
//! \param ui32Base is the base address of the timer module.
//! \param bMasked selects either raw or masked interrupt status:
//! - \c true  : Masked interrupt.
//! - \c false : Raw interrupt.
//!
//! \return The current interrupt status, enumerated as a bit field of values:
//! - \ref TIMER_CAPB_EVENT    : Capture B event interrupt.
//! - \ref TIMER_CAPB_MATCH    : Capture B match interrupt.
//! - \ref TIMER_TIMB_TIMEOUT  : Timer B timeout interrupt.
//! - \ref TIMER_CAPA_EVENT    : Capture A event interrupt.
//! - \ref TIMER_CAPA_MATCH    : Capture A match interrupt.
//! - \ref TIMER_TIMA_TIMEOUT  : Timer A timeout interrupt.
//
//*****************************************************************************
__STATIC_INLINE uint32_t
TimerIntStatus(uint32_t ui32Base, bool bMasked)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));

    //
    // Return either the interrupt status or the raw interrupt status as
    // requested.
    //
    return(bMasked ? HWREG(ui32Base + GPT_O_MIS) :
           HWREG(ui32Base + GPT_O_RIS));
}

//*****************************************************************************
//
//! \brief Clears timer interrupt sources.
//!
//! The specified timer interrupt sources are cleared, so that they no longer
//! assert. This function must be called in the interrupt handler to keep the
//! interrupt from being triggered again immediately upon exit.
//!
//! \note Due to write buffers and synchronizers in the system it may take several
//! clock cycles from a register write clearing an event in a module and until the
//! event is actually cleared in the NVIC of the system CPU. It is recommended to
//! clear the event source early in the interrupt service routine (ISR) to allow
//! the event clear to propagate to the NVIC before returning from the ISR.
//! At the same time, an early event clear allows new events of the same type to be
//! pended instead of ignored if the event is cleared later in the ISR.
//! It is the responsibility of the programmer to make sure that enough time has passed
//! before returning from the ISR to avoid false re-triggering of the cleared event.
//! A simple, although not necessarily optimal, way of clearing an event before
//! returning from the ISR is:
//! -# Write to clear event (interrupt source). (buffered write)
//! -# Dummy read from the event source module. (making sure the write has propagated)
//! -# Wait two system CPU clock cycles (user code or two NOPs). (allowing cleared event to propagate through any synchronizers)
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32IntFlags is a bit mask of the interrupt sources to be cleared.
//! The parameter must be the bitwise OR of any combination of
//! the following:
//! - \ref TIMER_CAPB_EVENT    : Capture B event interrupt.
//! - \ref TIMER_CAPB_MATCH    : Capture B match interrupt.
//! - \ref TIMER_TIMB_TIMEOUT  : Timer B timeout interrupt.
//! - \ref TIMER_CAPA_EVENT    : Capture A event interrupt.
//! - \ref TIMER_CAPA_MATCH    : Capture A match interrupt.
//! - \ref TIMER_TIMA_TIMEOUT  : Timer A timeout interrupt.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerIntClear(uint32_t ui32Base, uint32_t ui32IntFlags)
{
    //
    // Check the arguments.
    //
    ASSERT(TimerBaseValid(ui32Base));

    //
    // Clear the requested interrupt sources.
    //
    HWREG(ui32Base + GPT_O_ICLR) = ui32IntFlags;
}

//*****************************************************************************
//
//! \brief Synchronizes the counters in a set of timers.
//!
//! This function synchronizes the counters in a specified set of timers.
//! When a timer is running in half-width mode, each half can be included or
//! excluded in the synchronization event. When a timer is running in
//! full-width mode, only the A timer can be synchronized (specifying the B
//! timer has no effect).
//!
//! \param ui32Base is the base address of the timer module. This parameter must
//! be the base address of Timer0 (in other words, \b GPT0_BASE).
//! \param ui32Timers is the set of timers to synchronize.
//! The parameter is the bitwise OR of any of the following:
//! - \ref TIMER_0A_SYNC
//! - \ref TIMER_0B_SYNC
//! - \ref TIMER_1A_SYNC
//! - \ref TIMER_1B_SYNC
//! - \ref TIMER_2A_SYNC
//! - \ref TIMER_2B_SYNC
//! - \ref TIMER_3A_SYNC
//! - \ref TIMER_3B_SYNC
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerSynchronize(uint32_t ui32Base, uint32_t ui32Timers)
{
    //
    // Check the arguments.
    //
    ASSERT(ui32Base == GPT0_BASE);

    //
    // Synchronize the specified timers.
    //
    HWREG(ui32Base + GPT_O_SYNC) = ui32Timers;
}

//*****************************************************************************
//
//! \brief Enables AND'ing of the CCP outputs from Timer A and Timer B.
//!
//! \param ui32Base is the base address of the timer module.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerCcpCombineEnable(uint32_t ui32Base)
{
    // Check the arguments
    ASSERT(TimerBaseValid(ui32Base));

    // Set the bit
    HWREG(ui32Base + GPT_O_ANDCCP) |= GPT_ANDCCP_CCP_AND_EN;
}

//*****************************************************************************
//
//! \brief Disables AND'ing of the CCP outputs from Timer A and Timer B.
//!
//! \param ui32Base is the base address of the timer module.
//!
//! \return None
//
//*****************************************************************************
__STATIC_INLINE void
TimerCcpCombineDisable(uint32_t ui32Base)
{
    // Check the arguments
    ASSERT(TimerBaseValid(ui32Base));

    // Clear the bit
    HWREG(ui32Base + GPT_O_ANDCCP) &= ~(GPT_ANDCCP_CCP_AND_EN);
}

//*****************************************************************************
//
//! \brief Sets the Match Register Update mode.
//!
//! This function controls when the Match Register value and Prescale Register value
//! are applied after writing these registers while a timer is enabled.
//!
//! \note If the timer is disabled when setting the update mode the Match Register
//! and Prescale Register values are applied immediately when enabling the timer.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to configure; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param ui32Mode sets the mode:
//! - \ref TIMER_MATCHUPDATE_NEXTCYCLE : Apply Match Register and Prescale Register on next clock
//!        cycle after writing any of these registers.
//! - \ref TIMER_MATCHUPDATE_TIMEOUT   : Apply Match Register and Prescale Register on next timeout
//!        after writing any of these registers.
//!
//! \return None
//
//*****************************************************************************
extern void TimerMatchUpdateMode(uint32_t ui32Base, uint32_t ui32Timer, uint32_t ui32Mode);

//*****************************************************************************
//
//! \brief Sets the Interval Load mode.
//!
//! This function controls when the Timer Register and Prescale Snap-shot (if used)
//! are updated.
//!
//! Timer Register (TAR/TBR) is updated when Interval Load Register (TAILR/TBILR) is written
//! and the Prescale Snap-shot (TAPS/TBPS) is updated when Prescale Register (TAPR/TBPR) is
//! written depending on the mode of operation.
//!
//! \param ui32Base is the base address of the timer module.
//! \param ui32Timer specifies the timer(s) to configure; must be one of:
//! - \ref TIMER_A
//! - \ref TIMER_B
//! - \ref TIMER_BOTH
//! \param ui32Mode sets the mode:
//! - \ref TIMER_INTERVALLOAD_NEXTCYCLE : Update Timer Register and Prescale Snap-shot on next clock
//!        cycle after writing Interval Load Register or Prescale Register, respectively.
//! - \ref TIMER_INTERVALLOAD_TIMEOUT   : Update Timer Register and Prescale Snap-shot on next timeout
//!        after writing Interval Load Register or Prescale Register, respectively.
//!
//! \return None
//
//*****************************************************************************
extern void TimerIntervalLoadMode(uint32_t ui32Base, uint32_t ui32Timer, uint32_t ui32Mode);

//*****************************************************************************
//
// Support for DriverLib in ROM:
// Redirect to implementation in ROM when available.
//
//*****************************************************************************
#if !defined(DRIVERLIB_NOROM) && !defined(DOXYGEN)
    #include <driverlib/rom.h>
    #ifdef ROM_TimerConfigure
        #undef  TimerConfigure
        #define TimerConfigure                  ROM_TimerConfigure
    #endif
    #ifdef ROM_TimerLevelControl
        #undef  TimerLevelControl
        #define TimerLevelControl               ROM_TimerLevelControl
    #endif
    #ifdef ROM_TimerStallControl
        #undef  TimerStallControl
        #define TimerStallControl               ROM_TimerStallControl
    #endif
    #ifdef ROM_TimerWaitOnTriggerControl
        #undef  TimerWaitOnTriggerControl
        #define TimerWaitOnTriggerControl       ROM_TimerWaitOnTriggerControl
    #endif
    #ifdef ROM_TimerIntRegister
        #undef  TimerIntRegister
        #define TimerIntRegister                ROM_TimerIntRegister
    #endif
    #ifdef ROM_TimerIntUnregister
        #undef  TimerIntUnregister
        #define TimerIntUnregister              ROM_TimerIntUnregister
    #endif
    #ifdef ROM_TimerMatchUpdateMode
        #undef  TimerMatchUpdateMode
        #define TimerMatchUpdateMode            ROM_TimerMatchUpdateMode
    #endif
    #ifdef ROM_TimerIntervalLoadMode
        #undef  TimerIntervalLoadMode
        #define TimerIntervalLoadMode           ROM_TimerIntervalLoadMode
    #endif
#endif

//*****************************************************************************
//
// Mark the end of the C bindings section for C++ compilers.
//
//*****************************************************************************
#ifdef __cplusplus
}
#endif

#endif // __GPT_H__

//*****************************************************************************
//
//! Close the Doxygen group.
//! @}
//! @}
//
//*****************************************************************************
