Timer driver interface for CC32XX devices.
This driver implements half and full width general purpose timers for the CC32XX device. For CC32XX devices, the system clock is 80 MHz and a 16-bit timer has an 8-bit prescaler. The desired period may not always be achieved due to hardware limitations, such as the aforementioned. The timer resolution is limited to 12.5ns due to the 80 MHz clock. A timer period no greater than 209,714us can be achieved when operating in 16-bit mode. Similarly, a period no greater than 53,687,090us can be achieved when operating in 32-bit mode. The same time constraints apply to the 16-bit timer when attempting to use a frequency less than 5 Hertz. For additional details, refer to the device's technical reference manual.
The timer always operates in count down mode. When using a half width timer, an 8-bit prescaler will be implemented by the driver if necessary. If the timer is operating in Timer_FREE_RUNNING, the timer will count down from the specified period to 0 before restarting.
When using a half width timer, Timer_getCount() will return the value of the counter in bits 15:0 and bits 23:16 will contain the current free-running value of the prescaler. Bits 31:24 are always 0. When using a full width timer, Timer_getCount() will return the the value of the 32-bit timer.
Timer_ONESHOT_CALLBACK is non-blocking. After Timer_start() is called, the calling thread will continue execution. When the timer interrupt is triggered, the specified callback function will be called. The timer will not generate another interrupt unless Timer_start() is called again. Calling Timer_stop() or Timer_close() after Timer_start() but, before the timer interrupt, will prevent the specified callback from ever being invoked.
Timer_ONESHOT_BLOCKING is a blocking call. A semaphore is used to block the calling thead's execution until the timer generates an interrupt. If Timer_stop() is called, the calling thread will become unblocked immediately. The behavior of the timer in this mode is similar to a sleep function.
Timer_CONTINUOUS_CALLBACK is non-blocking. After Timer_start() is called, the calling thread will continue execution. When the timer interrupt is treiggered, the specified callback function will be called. The timer is automatically restarted and will continue to periodically generate interrupts until Timer_stop() is called.
Timer_FREE_RUNNING is non-blocking. After Timer_start() is called, the calling thread will continue execution. The timer will not generate an interrupt in this mode. The timer will count down from the specified period until it reaches 0. The timer will automatically reload the period and start over. The timer will continue running until Timer_stop() is called.
Each general purpose timer block contains two timers, Timer A and Timer B, that can be configured to operate independently; or concatenated to operate as one 32-bit timer. This behavior is managed through a set of resource allocation APIs. For example, the TimerCC32XX_allocateTimerResource API will allocate a timer for exclusive use. Any attempt to allocate this resource in the future will result in a false value being returned from the allocation API. To free a timer resource, the TimerCC32XX_freeTimerResource is used. The application is not responsible for calling these allocation APIs directly.
#include <stdbool.h>
#include <stdint.h>
#include <ti/drivers/Timer.h>
#include <ti/drivers/Power.h>
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/dpl/SemaphoreP.h>
Go to the source code of this file.
Data Structures | |
struct | TimerCC32XX_HWAttrs_ |
TimerCC32XX Hardware Attributes. More... | |
struct | TimerCC32XX_Object_ |
TimerCC32XX_Object. More... | |
Typedefs | |
typedef enum TimerCC32XX_SubTimer_ | TimerCC32XX_SubTimer |
typedef struct TimerCC32XX_HWAttrs_ | TimerCC32XX_HWAttrs |
TimerCC32XX Hardware Attributes. More... | |
typedef struct TimerCC32XX_Object_ | TimerCC32XX_Object |
TimerCC32XX_Object. More... | |
Enumerations | |
enum | TimerCC32XX_SubTimer_ { TimerCC32XX_timer16A = 0x0001, TimerCC32XX_timer16B = 0x0002, TimerCC32XX_timer32 = 0x0003 } |
Functions | |
bool | TimerCC32XX_allocateTimerResource (uint32_t baseAddress, TimerCC32XX_SubTimer subTimer) |
Function to allocate a timer peripheral. More... | |
void | TimerCC32XX_freeTimerResource (uint32_t baseAddress, TimerCC32XX_SubTimer subTimer) |
Function to de-allocate a timer peripheral. More... | |
Variables | |
const Timer_FxnTable | TimerCC32XX_fxnTable |
typedef enum TimerCC32XX_SubTimer_ TimerCC32XX_SubTimer |
typedef struct TimerCC32XX_HWAttrs_ TimerCC32XX_HWAttrs |
TimerCC32XX Hardware Attributes.
Timer hardware attributes that tell the TimerCC32XX driver specific hardware configurations and interrupt/priority settings.
A sample structure is shown below:
typedef struct TimerCC32XX_Object_ TimerCC32XX_Object |
TimerCC32XX_Object.
The application must not access any member variables of this structure!
bool TimerCC32XX_allocateTimerResource | ( | uint32_t | baseAddress, |
TimerCC32XX_SubTimer | subTimer | ||
) |
Function to allocate a timer peripheral.
This function is intended to be used by any driver which implements a timer hardware peripheral. Calling this function will enable power to the timer peripheral specified by the parameter, baseAddress.
baseAddress | The base address of a timer hardware peripheral. |
subTimer | The TimerCC32XX_subTimer to be allocated. |
void TimerCC32XX_freeTimerResource | ( | uint32_t | baseAddress, |
TimerCC32XX_SubTimer | subTimer | ||
) |
Function to de-allocate a timer peripheral.
This function is intended to be used by any driver which implements a timer hardware peripheral. Calling this function will disable power to the timer peripheral specified by the parameter, baseAddress, if and only if the timer peripheral is no longer in use.
baseAddress | The base address of a timer hardware peripheral. |
subTimer | The TimerCC32XX_subTimer to be freed. |
const Timer_FxnTable TimerCC32XX_fxnTable |