Jump to main content

##

# 2.120.2 Timer Counter (TC)

A Timer Counter (TC) module includes three identical TC channels. All channels of the Timer Counter are independent and identical in operation except when the quadrature encode mode is enabled. Timer counter module can be configured to operate in one of the following modes:

- Timer mode used for periodic interrupt generation

- Compare mode used for generating PWM signals

- Capture mode used to perform measurements such as pulse timing, frequency, period, duty cycle and phase

- Quadrature encoder mode used to measure the position and speed of the motor

TIMER MODE

The TC channel in timer mode is used for periodic interrupt generation.

Using The Library

When the timer is enabled, it increments by one on every rising edge of the input clock, and generates an interrupt on a period match (Timer expiry period). Timer mode is used for periodic interrupt generation.

It provides both polling and callback methods to indicate period match has occurred.

- With polling, the application will need to continuously poll to check if the timer has expired.

- With callback, the registered callback function will be called when the timer expires. This means the application do not have to poll continuously.

Callback method

This example demonstrates how to use TC channel in timer mode to generate periodic callback.

    /* This function is called after period expires */
    void TC0_CH0_TimerInterruptHandler(TC_TIMER_STATUS status, uintptr_t context)
    {
        /* Toggle LED */
        LED_Toggle();
    }

    int main(void)
    {

        /* Register callback function for CH0 period interrupt */
        TC0_CH0_TimerCallbackRegister(TC0_CH0_TimerInterruptHandler, (uintptr_t)NULL);

        /* Start the timer channel 0*/
        TC0_CH0_TimerStart();
    }

COMPARE MODE

The TC channel in compare mode generates one or two PWM signals with the same frequency and independently programmable duty cycles, or generates different types of one-shot or repetitive pulses.

Using The Library

In this mode, TIOAx is configured as an output. TIOBx is configured as an output, if it is not used as an external event.

CAPTURE MODE

The TC channel in capture mode is used to measure pulse time, frequency, period and duty cycle.

Using The Library

In Capture mode, TIOAx and TIOBx are configured as inputs. The counter value is captured in the buffer on the selected input edge and it is used as a timestamp for the event. The user can select up to two input events and the respective timestamp is captured in Capture A and Capture B buffers, it can be used to measure pulse, period, frequency and duty cycle of the external input.

It provides both polling and callback methods to indicate capture event has occurred.

- With polling, the application will need to continuously poll to check if the capture event has occurred

- With callback, the registered callback function will be called when the capture event occurs. This means the application do not have to poll continuously

Callback method

This example demonstrates how to use the TC channel in capture mode to measure off time and period. The rising edge is captured in Capture A and Falling edge is captured in Capture B register, and then the timer is reset.

    /* This function is called after Capture B */
    void TC0_CH0_CaptureInterruptHandler(TC_CAPTURE_STATUS status, uintptr_t context)
    {
        /* Read Captured values */
        off_time = TC0_CH0_CaptureAGet();
        period = TC0_CH0_CaptureBGet();
    }

    int main(void)
    {

        /* Register callback function for CH0 period interrupt */
        TC0_CH0_CaptureCallbackRegister(TC0_CH0_CaptureInterruptHandler, (uintptr_t)NULL);

        /* Start the Capture channel 0*/
        TC0_CH0_CaptureStart();
    }

QUADRATURE DECODER MODE

The quadrature decoder (QDEC) mode is used to measure the position and speed of the motor

Using The Library

The TC embeds a Quadrature Decoder (QDEC) connected in front of the timers and driven by TIOA0, TIOB0 and TIOB1 inputs. When enabled, the QDEC performs the input lines filtering, decoding of quadrature signals and connects to the timers and counters in order to read the position and speed of the motor through the user interface.

## Library Interface

Timer Counter peripheral library provides the following interfaces:

Functions

Name | Description
--- | ---
TCx_CHy_TimerInitialize | Initializes given instance of TC channel
TCx_CHy_TimerStart | Starts the given TC channel counter
TCx_CHy_TimerStop | Stops the given TC channel counter
TCx_CHy_TimerCompareSet | Sets the compare value of a given timer channel
TCx_CHy_TimerPeriodSet | Sets the period value of a given timer channel
TCx_CHy_TimerPeriodGet | Reads the period value of given timer channel
TCx_CHy_TimerCounterGet | Reads the timer channel counter value
TCx_CHy_TimerFrequencyGet | Provides the given timer's counter-increment frequency
TCx_CHy_TimerPeriodHasExpired | Checks whether timer period is elapsed
TCx_CHy_TimerCallbackRegister | Registers the function to be called from interrupt
TCx_CHy_CompareInitialize | Initializes given TC channel in compare mode
TCx_CHy_CompareStart | Starts the given TC channel compare counter
TCx_CHy_CompareStop | Stops the given TC channel counter in compare mode
TCx_CHy_ComparePeriodSet | Sets the period value of a given TC channel in compare mode
TCx_CHy_ComparePeriodGet | Gets the period value of given timer channel in compare mode
TCx_CHy_CompareFrequencyGet | Provides the given timer's counter-increment frequency in compare mode
TCx_CHy_CompareCallbackRegister | Registers the function to be called from interrupt
TCx_CHy_CompareASet | Sets the Compare-A value of the given timer channel in compare mode
TCx_CHy_CompareBSet | Sets the Compare-B value of the given timer channel in compare mode
TCx_CHy_CompareStatusGet | Identifies status of the compare events
TCx_CHy_CaptureInitialize | Initializes given instance of TC channel to capture mode
TCx_CHy_CaptureStart | Starts the given TC channel capture counter
TCx_CHy_CaptureStop | Stops the given TC channel counter
TCx_CHy_CaptureCallbackRegister | Registers the function to be called from the capture-event
TCx_CHy_CaptureAGet | Returns the Capture-A value
TCx_CHy_CaptureBGet | Returns the Capture-B value
TCx_CHy_CaptureStatusGet | Identifies status of the capture events
TCx_QuadratureInitialize | Initializes given instance of TC channel in quadrature mode
TCx_QuadratureStart | Starts the given TC channel counter in quadrature mode
TCx_QuadratureStop | Stops the given TC channel counter in quadrature mode
TCx_QuadraturePositionGet | Reads the angular position from the quadrature encoder
TCx_QuadratureRevolutionsGet | Reads the number of revolutions from the quadrature encoder
TCx_QuadratureSpeedGet | Reads the quadrature index change speed
TCx_CHy_QuadratureStatusGet | Identifies status of the quadrature events
TCx_QuadratureCallbackRegister | Registers the function to be called from interrupt

Data types and constants

Name | Type | Description
--- | --- | ---
TC_TIMER_STATUS | Enum | Identifies channel interrupt source mask
TC_TIMER_CALLBACK | Typedef | Defines the function pointer data type and function signature for the tc channel callback function
TC_COMPARE_STATUS | Enum | Identifies channel interrupt source mask
TC_COMPARE_CALLBACK | Typedef | Defines the function pointer data type and function signature for the tc channel callback function
TC_CAPTURE_STATUS | Enum | Identifies channel interrupt source mask
TC_CAPTURE_CALLBACK | Typedef | Defines the function pointer data type and function signature for the tc channel callback function
TC_QUADRATURE_STATUS | Enum | Identifies channel interrupt source mask
TC_QUADRATURE_CALLBACK | Typedef | Defines the function pointer data type and function signature for the tc channel callback function

Note: Not all APIs maybe implemented. See the specific device family section for available APIs.