//******************************************************************************\r
// Variables\r
//******************************************************************************\r
-unsigned long timeval[TIMERS]; //!< Contains the values for each timer.\r
+volatile unsigned long timeval[TIMERS]; //!< Contains the values for each timer.\r
\r
// timer runs at 1 MHz and overflow will occur every 255 / 1 Mz ~= 0.25 ms \r
//#pragma vector = TIM0_OVF_vect\r
*/ \r
unsigned char Time_Left(unsigned char timer)\r
{\r
- if(timeval[timer] > 0) {\r
+ unsigned long tval;\r
+ unsigned char sreg_saved;\r
+\r
+ sreg_saved = SREG;\r
+ cli();\r
+ tval = timeval[timer];\r
+ SREG = sreg_saved;\r
+\r
+ if( tval > 0 ) {\r
return(TRUE);\r
} else {\r
return(FALSE);\r
// timeval[i] += 4000 * (unsigned long)sec;\r
// timeval[i] += 4 * (unsigned long)ms;\r
\r
- timeval[timer] = 60000 * (unsigned long)min;\r
- timeval[timer] += 1000 * (unsigned long)sec;\r
- timeval[timer] += 1 * (unsigned long)ms;\r
+ unsigned long tval;\r
+ unsigned char sreg_saved;\r
+ \r
+\r
+ tval = 60000 * (unsigned long)min;\r
+ tval += 1000 * (unsigned long)sec;\r
+ tval += 1 * (unsigned long)ms;\r
+\r
+ sreg_saved = SREG;\r
+ cli();\r
+ timeval[timer] = tval;\r
+ SREG = sreg_saved;\r
}\r
\r
\r
void Time_Init(void)\r
{\r
unsigned char i;\r
+ unsigned char sreg_saved;\r
\r
+ sreg_saved = SREG;\r
+ cli();\r
for (i = 0; i<<TIMERS; i++) {\r
timeval[i] = 0;\r
}\r
+ SREG = sreg_saved;\r
\r
// OCR0A = 0; // Doesn't matter, will run in normal mode.\r
\r
// TIMSK |= (1<<TOIE0); // Overflow interrupt enabled.\r
\r
TIMSK |= (1<<OCIE0A); // Timer 0, Compare match A interrupt enabled.\r
-\r
- // Enable interrupts, just in case they weren't already.\r
- sei(); \r
}\r