X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=blobdiff_plain;f=main.c;h=b81e0a8c82fcb45b16fa42e2ae17d0515430027c;hp=3959ee4ffa53699c40127dfed3b2b122feb0f05d;hb=a53014b7f52462e163a7d7ac64866aa75977422f;hpb=8a9ba904e4215b92930a6d71c06c97514bcc6688 diff --git a/main.c b/main.c index 3959ee4..b81e0a8 100644 --- a/main.c +++ b/main.c @@ -46,8 +46,6 @@ #include #include -#include -#include #include #include #include @@ -57,8 +55,7 @@ #include "main.h" struct xbeeboard xbeeboard; -volatile uint16_t global_ms; -struct callout_mgr cm; +volatile uint32_t global_ms; #define TIMEOUT_MS 1000 @@ -517,17 +514,19 @@ static void evt_timeout(struct callout_mgr *cm, struct callout *clt, /* free event */ xbee_unregister_channel(xbee_dev, ctx->channel); + + callout_stop(cm, clt); } void xbee_load_timeout(struct xbee_ctx *ctx) { callout_init(&ctx->timeout, evt_timeout, ctx, 0); - callout_schedule(&cm, &ctx->timeout, TIMEOUT_MS); + callout_schedule(&xbeeboard.mainloop_cm, &ctx->timeout, TIMEOUT_MS); } void xbee_unload_timeout(struct xbee_ctx *ctx) { - callout_stop(&cm, &ctx->timeout); + callout_stop(&xbeeboard.mainloop_cm, &ctx->timeout); } void bootloader(void) @@ -560,7 +559,7 @@ void bootloader(void) void xbee_mainloop(void) { while (1) { - callout_manage(&cm); + callout_manage(&xbeeboard.mainloop_cm); if (xbee_raw) { int16_t c; @@ -601,7 +600,7 @@ void xbee_mainloop(void) /* return time in milliseconds on unsigned 16 bits */ static uint16_t get_time_ms(void) { - return global_ms; + return (uint16_t)global_ms; } static void main_timer_interrupt(void) @@ -611,13 +610,6 @@ static void main_timer_interrupt(void) cpt++; - /* interrupt every 2048 cycles */ - cycles += 2048; - if (cycles >= 12000) { - cycles -= 12000; - global_ms ++; - } - /* LED blink */ if (global_ms & 0x80) LED1_ON(); @@ -629,10 +621,17 @@ static void main_timer_interrupt(void) else BUZZER_OFF(); - /* call scheduler every 682us with interrupt unlocked */ + /* interrupt every 2048 cycles */ + cycles += 2048; + if (cycles >= 12000) { + cycles -= 12000; + global_ms ++; + } + + /* called every 682us (at 12 Mhz), but global_ms is not incremented at + * each call */ sei(); - if ((cpt & 0x3) == 0) - scheduler_interrupt(); + callout_manage(&xbeeboard.intr_cm); } int main(void) @@ -649,17 +648,16 @@ int main(void) fdevopen(cmdline_dev_send, cmdline_dev_recv); xbee_file = fdevopen(xbee_dev_send, xbee_dev_recv); - scheduler_init(); timer_init(); 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(); spi_servo_init(); beep_init(); - callout_mgr_init(&cm, get_time_ms); - //callout_reset(&cm, &t1, 500, PERIODICAL, do_led_blink, NULL); - /* initialize libxbee */ err = xbee_init(); if (err < 0)