use simple 8-bit counter for LED PWM

This commit is contained in:
Joey Castillo
2021-05-20 15:56:15 -07:00
parent 7f2f09d371
commit b358e76047
23 changed files with 1120 additions and 942 deletions

View File

@@ -190,10 +190,15 @@ void watch_register_button_callback(Watch *watch, const uint32_t pin, ext_irq_cb
void watch_enable_led(Watch *watch) {
if (watch->led_enabled) return;
PWM_0_init();
pwm_set_parameters(&PWM_0, 10000, 0);
pwm_enable(&PWM_0);
PWM_0_CLOCK_init();
PWM_0_PORT_init();
PWM_0_init();
TC3->COUNT8.CTRLA.reg = TC_CTRLA_SWRST;
TC3->COUNT8.CTRLA.bit.MODE |= TC_CTRLA_MODE_COUNT8_Val;
TC3->COUNT8.PER.reg = 255;
TC3->COUNT8.WAVE.reg = TC_WAVE_WAVEGEN_NPWM;
TC3->COUNT8.CTRLA.reg |= TC_CTRLA_ENABLE;
watch->led_enabled = true;
watch_set_led_off();
}
@@ -204,23 +209,23 @@ void watch_disable_led(Watch *watch) {
gpio_set_pin_function(RED, GPIO_PIN_FUNCTION_OFF);
gpio_set_pin_function(GREEN, GPIO_PIN_FUNCTION_OFF);
pwm_disable(&PWM_0);
hri_tc_clear_CTRLA_ENABLE_bit(TC3);
hri_mclk_clear_APBCMASK_TC3_bit(MCLK);
watch->led_enabled = false;
}
void watch_set_led_color(uint16_t red, uint16_t green) {
TC3->COUNT16.CC[0].reg = red;
TC3->COUNT16.CC[1].reg = green;
void watch_set_led_color(uint8_t red, uint8_t green) {
TC3->COUNT8.CC[0].reg = red;
TC3->COUNT8.CC[1].reg = green;
}
void watch_set_led_red() {
watch_set_led_color(65535, 0);
watch_set_led_color(255, 0);
}
void watch_set_led_green() {
watch_set_led_color(0, 65535);
watch_set_led_color(0, 255);
}
void watch_set_led_off() {

View File

@@ -34,7 +34,7 @@ void watch_display_string(Watch *watch, char *string, uint8_t position);
void watch_enable_led(Watch *watch);
void watch_disable_led(Watch *watch);
void watch_set_led_color(uint16_t red, uint16_t green);
void watch_set_led_color(uint8_t red, uint8_t green);
void watch_set_led_red();
void watch_set_led_green();
void watch_set_led_off();