//! [callback_funcs] static void tcc_callback_to_change_duty_cycle( struct tcc_module *const module_inst) { static uint32_t delay = 10; static uint32_t i = 0; if (--delay) { return; } delay = 10; i = (i + 0x0800) & 0xFFFF; tcc_set_compare_value(module_inst, (enum tcc_match_capture_channel) (TCC_MATCH_CAPTURE_CHANNEL_0 + CONF_PWM_CHANNEL), i + 1); }
//! [setup] static void configure_tcc(void) { //! [setup_config] struct tcc_config config_tcc; //! [setup_config] //! [setup_config_defaults] tcc_get_config_defaults(&config_tcc, CONF_PWM_MODULE); //! [setup_config_defaults] //! [setup_change_config] config_tcc.counter.clock_prescaler = TCC_CLOCK_PRESCALER_DIV1024; config_tcc.counter.period = 8000; config_tcc.compare.wave_generation = TCC_WAVE_GENERATION_SINGLE_SLOPE_PWM; config_tcc.compare.match[CONF_PWM_CHANNEL] = (8000 / 4); //! [setup_change_config] //! [setup_change_config_pwm] config_tcc.pins.enable_wave_out_pin[CONF_PWM_OUTPUT] = true; config_tcc.pins.wave_out_pin[CONF_PWM_OUTPUT] = CONF_PWM_OUT_PIN; config_tcc.pins.wave_out_pin_mux[CONF_PWM_OUTPUT] = CONF_PWM_OUT_MUX; //! [setup_change_config_pwm] //! [setup_set_config] tcc_init(&tcc_instance, CONF_PWM_MODULE, &config_tcc); //! [setup_set_config] //! [setup_set_buffering] tcc_set_compare_value(&tcc_instance, (enum tcc_match_capture_channel)CONF_PWM_CHANNEL, 8000*3/4); tcc_enable_circular_buffer_compare(&tcc_instance, (enum tcc_match_capture_channel)CONF_PWM_CHANNEL); //! [setup_set_buffering] //! [setup_enable] tcc_enable(&tcc_instance); //! [setup_enable] }
void setHitecServoAngle(float angle) { uint32_t angle_ = (angle*angle2pwm_factor)+SERVO_ZERO_PULSE; printf("%d",(int)(angle_*1000)); tcc_set_compare_value(&tcc_instance,2,angle_); }
void setRed(uint16_t red) { tcc_set_compare_value(&tcc0, (enum tcc_match_capture_channel) (3), red); }
void setWhite(uint16_t white) { tcc_set_compare_value(&tcc0, (enum tcc_match_capture_channel) (2), white); }
void setRightRGB(uint16_t red, uint16_t green, uint16_t blue) { tcc_set_compare_value(&tcc0, (enum tcc_match_capture_channel) (1), green); tcc_set_compare_value(&tcc2, (enum tcc_match_capture_channel) (0), red); tcc_set_compare_value(&tcc2, (enum tcc_match_capture_channel) (1), blue); }
void set_pwm(int HWtimer, int channel, int value){ tcc_set_compare_value(&tcc_instance[HWtimer], channel, value); }