git.droids-corp.org
/
protos
/
xbee-avr.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove mainloop callout manager (all is handled under intr)
[protos/xbee-avr.git]
/
main.c
diff --git
a/main.c
b/main.c
index
0fb75d1
..
11fd442
100644
(file)
--- a/
main.c
+++ b/
main.c
@@
-91,13
+91,19
@@
void bootloader(void)
/* return time in milliseconds on unsigned 16 bits */
static uint16_t get_time_ms(void)
{
/* return time in milliseconds on unsigned 16 bits */
static 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 void main_timer_interrupt(void)
{
static uint16_t cycles;
- static uint8_t cpt;
+ static uint8_t cpt = 0;
+ static uint8_t stack = 0;
cpt++;
cpt++;
@@
-112,22
+118,30
@@
static void main_timer_interrupt(void)
else
BUZZER_OFF();
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 ++;
}
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();
sei();
- callout_manage(&xbeeboard.intr_cm);
+ if ((cpt & 0x3) == 0)
+ callout_manage(&xbeeboard.intr_cm);
+ cli();
+ if (--stack == 0)
+ LED2_OFF();
}
int main(void)
{
}
int main(void)
{
- //struct callout t1;
FILE *xbee_file;
int8_t err;
struct xbee_dev dev;
FILE *xbee_file;
int8_t err;
struct xbee_dev dev;
@@
-143,7
+157,6
@@
int main(void)
timer0_register_OV_intr(main_timer_interrupt);
callout_mgr_init(&xbeeboard.intr_cm, get_time_ms);
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();
cmdline_init();
spi_servo_init();