dsp[1] = font[num & 0x0f];
}
+/*
+ * This version is used outside interrupts.
+ * It spins until no overflow has happened.
+ */
unsigned long getticks(void)
{
- return(TCNT1 + (((unsigned long)oticks) << 16));
+ uint16_t v;
+ unsigned long r;
+
+ do {
+ v = oticks;
+ r = TCNT1 + (((unsigned long)oticks) << 16);
+ } while(v != oticks);
+ return(r);
+}
+
+/*
+ * This version is used in interrupts
+ */
+unsigned long getticks2(void)
+{
+ uint16_t v;
+ unsigned long r;
+
+ v = TCNT1;
+ r = v + (((unsigned long)oticks) << 16);
+ if((TIFR1 & 0x01) && !(v & 0x8000))
+ return(r + 0x10000);
+ else
+ return(r);
}
void ledcycle(void)
{
unsigned long now;
- now = getticks();
+ now = getticks2();
if(tstate == 0) {
tstate = 1;
if(tlock != 2)