void tmr3_isr(void) { if(bit_is_set(*TMR(3,CSCTRL),TCF1)) { current_clock++; if((current_clock % CLOCK_CONF_SECOND) == 0) { seconds++; #if BLINK_SECONDS leds_toggle(LEDS_GREEN); #endif } if(etimer_pending() && (etimer_next_expiration_time() - current_clock - 1) > MAX_TICKS) { etimer_request_poll(); } /* clear the compare flags */ clear_bit(*TMR(3,SCTRL),TCF); clear_bit(*TMR(3,CSCTRL),TCF1); clear_bit(*TMR(3,CSCTRL),TCF2); return; } else { /* this timer didn't create an interrupt condition */ return; } }
void tmr0_isr(void) { if(bit_is_set(*TMR(0,CSCTRL),TCF1)) { current_clock++; if((current_clock % CLOCK_CONF_SECOND) == 0) { seconds++; /* ADC can be serviced every tick or every second */ #if CLOCK_CONF_SAMPLEADC > 1 adc_service(); #endif } #if CLOCK_CONF_SAMPLEADC == 1 adc_service(); #endif if(etimer_pending() && (etimer_next_expiration_time() - current_clock - 1) > MAX_TICKS) { etimer_request_poll(); } /* clear the compare flags */ clear_bit(*TMR(0,SCTRL),TCF); clear_bit(*TMR(0,CSCTRL),TCF1); clear_bit(*TMR(0,CSCTRL),TCF2); return; } else { /* this timer didn't create an interrupt condition */ return; } }
void config_oscillators() { CLOCK(CLK_RST_CONTROLLER_SPARE_REG0) = CLOCK(CLK_RST_CONTROLLER_SPARE_REG0) & 0xFFFFFFF3 | 4; SYSCTR0(SYSCTR0_CNTFID0) = 19200000; TMR(0x14) = 0x45F; CLOCK(CLK_RST_CONTROLLER_OSC_CTRL) = 0x50000071; PMC(APBDEV_PMC_OSC_EDPD_OVER) = PMC(APBDEV_PMC_OSC_EDPD_OVER) & 0xFFFFFF81 | 0xE; PMC(APBDEV_PMC_OSC_EDPD_OVER) = PMC(APBDEV_PMC_OSC_EDPD_OVER) & 0xFFBFFFFF | 0x400000; PMC(APBDEV_PMC_CNTRL2) = PMC(APBDEV_PMC_CNTRL2) & 0xFFFFEFFF | 0x1000; PMC(APBDEV_PMC_SCRATCH188) = PMC(APBDEV_PMC_SCRATCH188) & 0xFCFFFFFF | 0x2000000; CLOCK(CLK_RST_CONTROLLER_PLLMB_BASE) &= 0xBFFFFFFF; PMC(APBDEV_PMC_TSC_MULT) = PMC(APBDEV_PMC_TSC_MULT) & 0xFFFF0000 | 0x249F; //0x249F = 19200000 * (16 / 32.768 kHz) CLOCK(CLK_RST_CONTROLLER_SCLK_BURST_POLICY) = 0x20004444; CLOCK(CLK_RST_CONTROLLER_SUPER_SCLK_DIVIDER) = 0x80000000; CLOCK(CLK_RST_CONTROLLER_CLK_SYSTEM_RATE) = 2; }