X-Git-Url: http://git.kpe.io/?p=avr_bc100.git;a=blobdiff_plain;f=BaseTinyFirmware%2FGCC%2Ftime.c;h=61df5c04e66bfb7217ce971d6c5c44945a9c4716;hp=ee738bd3e63286842e5389d4ada7a76646d30c81;hb=edd0e551e6041f7596c880cdaef13dfa67eff6b5;hpb=5b95e754a4af80c7389486ee874ac07c166a0867 diff --git a/BaseTinyFirmware/GCC/time.c b/BaseTinyFirmware/GCC/time.c index ee738bd..61df5c0 100644 --- a/BaseTinyFirmware/GCC/time.c +++ b/BaseTinyFirmware/GCC/time.c @@ -38,7 +38,7 @@ //****************************************************************************** // Variables //****************************************************************************** -unsigned long timeval[TIMERS]; //!< Contains the values for each timer. +volatile unsigned long timeval[TIMERS]; //!< Contains the values for each timer. // timer runs at 1 MHz and overflow will occur every 255 / 1 Mz ~= 0.25 ms //#pragma vector = TIM0_OVF_vect @@ -76,7 +76,15 @@ ISR(TIMER0_COMPA_vect) */ unsigned char Time_Left(unsigned char timer) { - if(timeval[timer] > 0) { + unsigned long tval; + unsigned char sreg_saved; + + sreg_saved = SREG; + cli(); + tval = timeval[timer]; + SREG = sreg_saved; + + if( tval > 0 ) { return(TRUE); } else { return(FALSE); @@ -99,9 +107,18 @@ void Time_Set(unsigned char timer, unsigned int min, unsigned char sec, // timeval[i] += 4000 * (unsigned long)sec; // timeval[i] += 4 * (unsigned long)ms; - timeval[timer] = 60000 * (unsigned long)min; - timeval[timer] += 1000 * (unsigned long)sec; - timeval[timer] += 1 * (unsigned long)ms; + unsigned long tval; + unsigned char sreg_saved; + + + tval = 60000 * (unsigned long)min; + tval += 1000 * (unsigned long)sec; + tval += 1 * (unsigned long)ms; + + sreg_saved = SREG; + cli(); + timeval[timer] = tval; + SREG = sreg_saved; } @@ -133,10 +150,14 @@ void Time_Start(void) void Time_Init(void) { unsigned char i; + unsigned char sreg_saved; + sreg_saved = SREG; + cli(); for (i = 0; i<