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++;
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;