diff --git a/src/avr/main.c b/src/avr/main.c index e3de4c03..9737c2be 100644 --- a/src/avr/main.c +++ b/src/avr/main.c @@ -39,6 +39,27 @@ dynmem_end(void) * Misc functions ****************************************************************/ +// Initialize the clock prescaler (if necessary) +void +prescaler_init(void) +{ + if (CONFIG_AVR_CLKPR != -1 && (uint8_t)CONFIG_AVR_CLKPR != CLKPR) { + irqstatus_t flag = irq_save(); + CLKPR = 0x80; + CLKPR = CONFIG_AVR_CLKPR; + irq_restore(flag); + } +} +DECL_INIT(prescaler_init); + +// The "sleep" instruction should cause the processor to enter "idle mode" +void +sleep_init(void) +{ + SMCR = 0x01; +} +DECL_INIT(sleep_init); + // Optimized crc16_ccitt for the avr processor uint16_t crc16_ccitt(char *buf, uint8_t len) diff --git a/src/avr/timer.c b/src/avr/timer.c index d9397187..e32a0b42 100644 --- a/src/avr/timer.c +++ b/src/avr/timer.c @@ -91,14 +91,6 @@ DECL_SHUTDOWN(timer_reset); void timer_init(void) { - if (CONFIG_AVR_CLKPR != -1 && (uint8_t)CONFIG_AVR_CLKPR != CLKPR) { - // Program the clock prescaler - irqstatus_t flag = irq_save(); - CLKPR = 0x80; - CLKPR = CONFIG_AVR_CLKPR; - irq_restore(flag); - } - // no outputs TCCR1A = 0; // Normal Mode @@ -110,9 +102,6 @@ timer_init(void) // enable interrupt TIMSK1 = 1<