From: Olivier Matz Date: Tue, 1 Oct 2013 20:22:04 +0000 (+0200) Subject: fix scheduler unit as we have a 12Mhz quartz X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=commitdiff_plain;h=a8c1b4c97c02a29a202362263597e90d36f25c18 fix scheduler unit as we have a 12Mhz quartz --- diff --git a/main.c b/main.c index 1557c69..2d1dd15 100644 --- a/main.c +++ b/main.c @@ -588,29 +588,30 @@ static uint16_t get_time_ms(void) return global_ms; } -static void increment_ms(void *dummy) +static void main_timer_interrupt(void) { - (void)dummy; - global_ms++; + static uint16_t cycles; + static uint8_t cpt; + + /* interrupt every 2048 cycles */ + cycles += 2048; + if (cycles >= 12000) { + cycles -= 12000; + global_ms ++; + } + /* LED blink */ if (global_ms & 0x80) LED1_ON(); else LED1_OFF(); -} -static void main_timer_interrupt(void) -{ - static uint8_t cpt = 0; - cpt++; + /* call scheduler every 682us with interrupt unlocked */ sei(); if ((cpt & 0x3) == 0) scheduler_interrupt(); } -/** Main program entry point. This routine contains the overall program flow, including initial - * setup of all components and the main program loop. - */ int main(void) { //struct callout t1; @@ -619,10 +620,6 @@ int main(void) struct xbee_dev dev; DDRA = 0x07; /* LEDs */ - LED2_ON(); - wait_ms(1000); - LED3_ON(); - wait_ms(1000); uart_init(); uart_register_rx_event(CMDLINE_UART, emergency); @@ -633,9 +630,6 @@ int main(void) timer_init(); timer0_register_OV_intr(main_timer_interrupt); - scheduler_add_periodical_event_priority(increment_ms, NULL, - 1000L / SCHEDULER_UNIT, - LED_PRIO); cmdline_init(); spi_servo_init(); diff --git a/scheduler_config.h b/scheduler_config.h index 944cc80..d4cbc68 100644 --- a/scheduler_config.h +++ b/scheduler_config.h @@ -28,11 +28,13 @@ #define SCHEDULER_NB_MAX_EVENT 10 #ifdef HOST_VERSION -#define SCHEDULER_UNIT_FLOAT 1000.0 -#define SCHEDULER_UNIT 1000UL +/* #define SCHEDULER_UNIT_FLOAT 1000.0 */ +/* #define SCHEDULER_UNIT 1000UL */ #else -#define SCHEDULER_UNIT_FLOAT 512.0 -#define SCHEDULER_UNIT 512L +/* tim0_div * tim0_res * soft_presc / quartz + * = (8 * 256 * 4) / 12 */ +#define SCHEDULER_UNIT_FLOAT 682.0 +#define SCHEDULER_UNIT 682L #endif /** number of allowed imbricated scheduler interrupts. The maximum