24.8.4.1.3 Workflow
- Create a module software instance structure for the TC module to store the TC driver state while it is in use.
struct
tc_module tc_instance;
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.
struct
tc_config config_tc;
- Initialize the TC configuration struct with the module's default values.
tc_get_config_defaults(&config_tc);
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 counter width, wave generation mode, and the compare channel 0 value.
config_tc.counter_size = TC_COUNTER_SIZE_16BIT;
config_tc.wave_generation = TC_WAVE_GENERATION_NORMAL_PWM;
config_tc.counter_16_bit.compare_capture_channel[0] = 0xFFFF;
- Alter the TC settings to configure the PWM output on a physical device pin.
config_tc.pwm_channel[0].enabled =
true
;
config_tc.pwm_channel[0].pin_out = PWM_OUT_PIN;
config_tc.pwm_channel[0].pin_mux = PWM_OUT_MUX;
- Configure the TC module with the desired settings.
tc_init(&tc_instance, PWM_MODULE, &config_tc);
- Enable the TC module to start the timer and begin PWM signal generation.
tc_enable(&tc_instance);
- Configure the TC callbacks.
- Register the Compare Channel 0 Match callback functions with the driver.
tc_register_callback(
&tc_instance,
tc_callback_to_change_duty_cycle,
TC_CALLBACK_CC_CHANNEL0);
- Enable the Compare Channel 0 Match callback so that it will be called by the driver when appropriate.
tc_enable_callback(&tc_instance, TC_CALLBACK_CC_CHANNEL0);