From: Jan "Yenya" Kasprzak Date: Fri, 10 May 2013 20:14:12 +0000 (+0200) Subject: Merge branch 'master' of ssh://anxur.fi.muni.cz/~kas/html/git/tinyboard X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=tinyboard.git;a=commitdiff_plain;h=0174f645d64fbb6e1280c2bb225273f429dff187;hp=0c777e2b120ebdb407cc5cbbd29dda16353cd931 Merge branch 'master' of ssh://anxur.fi.muni.cz/~kas/html/git/tinyboard especially if it merges an updated upstream into a topic branch. --- diff --git a/projects/step-up/control.c b/projects/step-up/control.c index c8c38cd..97a23cb 100644 --- a/projects/step-up/control.c +++ b/projects/step-up/control.c @@ -20,7 +20,7 @@ static pattern_t blink_pattern[] = { static pattern_t slow_pattern[] = { { 1, 0x1 }, - { 0, 0x1F }, + { 0, 0x10 }, PATTERN_END }; diff --git a/projects/step-up/pwm.c b/projects/step-up/pwm.c index e3b477c..42ed777 100644 --- a/projects/step-up/pwm.c +++ b/projects/step-up/pwm.c @@ -11,10 +11,12 @@ * Counts from 0 to 0xFF, without OCR1C compare. */ +static unsigned char pwm_enabled; + static void inline enable_pll() { /* Async clock */ - PLLCSR = _BV(PLLE); + PLLCSR = _BV(PLLE) | _BV(LSM); /* Synchronize to the phase lock */ _delay_us(100); @@ -25,17 +27,16 @@ static void inline enable_pll() void init_pwm() { + pwm_enabled = 0; power_timer1_enable(); - enable_pll(); - - TCCR1 = _BV(CTC1) | _BV(CS10); // no clock prescaling + TCCR1 = _BV(CTC1) | _BV(CS11); // pll_clk/2 GTCCR = _BV(COM1B1) | _BV(PWM1B); OCR1C = PWM_MAX; OCR1B = 0; // initial stride is 0 - DDRB &= ~_BV(PB4); // tristate it + DDRB &= ~(_BV( PB4 )); PORTB &= ~_BV(PB4); // set to zero } @@ -54,10 +55,18 @@ void pwm_off() { OCR1B = 0; DDRB &= ~_BV(PB4); + + PLLCSR &= ~(_BV(PLLE) | _BV(PCKE)); + pwm_enabled = 0; } void pwm_set(uint8_t stride) { OCR1B = stride; - DDRB |= _BV(PB4); + + if (!pwm_enabled) { + enable_pll(); + DDRB |= _BV(PB4); + pwm_enabled = 1; + } }