X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=firmware%2Fpwm.c;h=3ef52c3fd436bc733ab7567b722487981fd3c133;hb=d38628afb3104c15743afaac8e899b2b009e6074;hp=da9fe3df679b9feb1faede1ed11205773890a824;hpb=64a3d3a699cd60b7a6b4b06c5c38689975a3d460;p=bike-lights.git diff --git a/firmware/pwm.c b/firmware/pwm.c index da9fe3d..3ef52c3 100644 --- a/firmware/pwm.c +++ b/firmware/pwm.c @@ -7,23 +7,28 @@ static uint16_t pwm[N_PWMLEDS]; static volatile unsigned char step; -void init_pwm() +static void enable_pll() { - int i; - - step = 0; - - for (i = 0; i < N_PWMLEDS; i++) - pwm[n] = 0; - /* Async clock */ PLLCSR = _BV(PLLE); /* Synchronize to the phase lock */ - _delay_ms(1); + _delay_us(100); while ((PLLCSR & _BV(PLOCK)) == 0) ; PLLCSR |= _BV(PCKE); +} + +void init_pwm() +{ + int i; + + step = 0; + + for (i = 0; i < N_PWMLEDS; i++) + pwm[i] = 0; + + enable_pll(); // PWM channel D is inverted, ... TCCR1C = _BV(COM1D1) | _BV(COM1D0) | _BV(PWM1D); @@ -56,6 +61,8 @@ void susp_pwm() TCCR1D = TCCR1C = TCCR1B = TCCR1A = 0; TIMSK = 0; TIFR = 0; + + PLLCSR &= ~(_BV(PLLE) | _BV(PCKE)); } void pwm_off(unsigned char n) @@ -116,8 +123,8 @@ void pwm_timer() step = 0; for (i = 0; i < N_PWMLEDS; i++) - if (pwm[n]) - pwm_update_hw(n); + if (pwm[i]) + pwm_update_hw(i); } #if 0