In this use case, the TC will be used as a timer to generate overflow and compare match callbacks.
In the callbacks the on-board LED is toggled.
The TC module will be set up as follows:
- GCLK generator 1 (GCLK 32K) clock source
- 16-bit resolution on the counter
- Prescaler is divided by 64
- GCLK reload action
- Count upward
- Don't run in standby
- No waveform outputs
- No capture enabled
- Don't perform one-shot operations
- No event input enabled
- No event action
- No event generation enabled
- Counter starts on 0
- Counter top set to 2000 (about 4s) and generate overflow callback
- Channel 0 is set to compare and match value 900 and generate callback
- Channel 1 is set to compare and match value 930 and generate callback
Quick Start
Prerequisites
For this use case, XOSC32K should be enabled and available through GCLK generator 1 clock source selection. Within Atmel Software Framework (ASF) it can be done through modifying conf_clocks.h. See System Clock Management Driver for more details about clock configuration.
Code
Add to the main application source file, before any functions, according to the kit used:
- SAM D20 Xplained Pro.
#define CONF_TC_MODULE TC3
- SAM D21 Xplained Pro.
#define CONF_TC_MODULE TC3
- SAM R21 Xplained Pro.
#define CONF_TC_MODULE TC3
- SAM D11 Xplained Pro.
#define CONF_TC_MODULE TC1
- SAM L21 Xplained Pro.
#define CONF_TC_MODULE TC3
- SAM L22 Xplained Pro.
#define CONF_TC_MODULE TC3
- SAM DA1 Xplained Pro.
#define CONF_TC_MODULE TC3
- SAM HA1G16A Xplained Pro.
#define CONF_TC_MODULE TC3
- SAM C21 Xplained Pro.
#define CONF_TC_MODULE TC3
Add to the main application source file, outside of any functions: Copy-paste the following callback function code to your user application: void tc_callback_to_toggle_led(
{
}
Copy-paste the following setup code to your user application: void configure_tc(void)
{
#if (SAMR30E)
#else
#endif
config_tc.counter_8_bit.period = 100;
config_tc.counter_8_bit.compare_capture_channel[0] = 50;
config_tc.counter_8_bit.compare_capture_channel[1] = 54;
tc_init(&tc_instance, CONF_TC_MODULE, &config_tc);
}
void configure_tc_callbacks(void)
{
}
Add to user application initialization (typically the start of main()
): configure_tc();
configure_tc_callbacks();
Workflow
- Create a module software instance structure for the TC module to store the TC driver state while it is in use.
- Note
- This should never go out of scope as long as the module is in use. In most cases, this should be global.
- Configure the TC module.
- Create a TC module configuration struct, which can be filled out to adjust the configuration of a physical TC peripheral.
- Initialize the TC configuration struct with the module's default values.
- Note
- This should always be performed before using the configuration struct to ensure that all values are initialized to known default settings.
- Alter the TC settings to configure the GCLK source, prescaler, period, and compare channel values.
#if (SAMR30E)
#else
#endif
config_tc.counter_8_bit.period = 100;
config_tc.counter_8_bit.compare_capture_channel[0] = 50;
config_tc.counter_8_bit.compare_capture_channel[1] = 54;
- Configure the TC module with the desired settings.
tc_init(&tc_instance, CONF_TC_MODULE, &config_tc);
- Enable the TC module to start the timer.
- Configure the TC callbacks.
- Register the Overflow and Compare Channel Match callback functions with the driver.
- Enable the Overflow and Compare Channel Match callbacks so that it will be called by the driver when appropriate.
Use Case
Code
Copy-paste the following code to your user application:
Workflow
- Enter an infinite loop while the timer is running.