X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=blobdiff_plain;f=main.c;h=4529d6e0631f6933554ecab57a9bb06bedc36d9c;hp=0fb75d141f468f038b1a985f5f3c08743020642a;hb=c18c4cbfa3c43bc1f4fd1743f77baf82c18437f6;hpb=84514fdc4e37939d888eddf89956225ef20b57fc diff --git a/main.c b/main.c index 0fb75d1..4529d6e 100644 --- a/main.c +++ b/main.c @@ -89,15 +89,21 @@ void bootloader(void) } /* return time in milliseconds on unsigned 16 bits */ -static uint16_t get_time_ms(void) +uint16_t get_time_ms(void) { - return (uint16_t)global_ms; + uint16_t ms; + uint8_t flags; + IRQ_LOCK(flags); + ms = global_ms; + IRQ_UNLOCK(flags); + return ms; } static void main_timer_interrupt(void) { static uint16_t cycles; - static uint8_t cpt; + static uint8_t cpt = 0; + static uint8_t stack = 0; cpt++; @@ -112,22 +118,30 @@ static void main_timer_interrupt(void) else BUZZER_OFF(); - /* interrupt every 2048 cycles */ - cycles += 2048; + if ((cpt & 0x03) != 0) + return; + + /* the following code is only called one interrupt among 4: every 682us + * (at 12 Mhz) = 8192 cycles */ + cycles += 8192; if (cycles >= 12000) { cycles -= 12000; global_ms ++; } - /* called every 682us (at 12 Mhz), but global_ms is not incremented at - * each call */ + /* called */ + if (stack++ == 0) + LED2_ON(); sei(); - callout_manage(&xbeeboard.intr_cm); + if ((cpt & 0x3) == 0) + callout_manage(&xbeeboard.intr_cm); + cli(); + if (--stack == 0) + LED2_OFF(); } int main(void) { - //struct callout t1; FILE *xbee_file; int8_t err; struct xbee_dev dev; @@ -143,9 +157,16 @@ int main(void) timer0_register_OV_intr(main_timer_interrupt); callout_mgr_init(&xbeeboard.intr_cm, get_time_ms); - callout_mgr_init(&xbeeboard.mainloop_cm, get_time_ms); cmdline_init(); + /* LOGS */ + error_register_emerg(mylog); + error_register_error(mylog); + error_register_warning(mylog); + error_register_notice(mylog); + error_register_debug(mylog); + + spi_servo_init(); beep_init(); @@ -169,6 +190,8 @@ int main(void) xbeeapp_init(); + rc_proto_init(); + sei(); eeprom_load_config();