time.c

Go to the documentation of this file.
00001 /* This file has been prepared for Doxygen automatic documentation generation.*/
00029 #include <ioavr.h>
00030 #include <inavr.h>
00031 
00032 #include "enums.h"
00033 
00034 #include "main.h"
00035 #include "time.h"
00036 
00037 
00038 //******************************************************************************
00039 // Variables
00040 //******************************************************************************
00041 unsigned long timeval[TIMERS];  
00042 
00043 // timer runs at 1 MHz and overflow will occur every 255 / 1 Mz ~= 0.25 ms 
00044 //#pragma vector = TIM0_OVF_vect
00045 
00046 
00047 //******************************************************************************
00048 // Functions
00049 //******************************************************************************
00057 #pragma vector = TIM0_COMPA_vect
00058 __interrupt void TICK_ISR(void)
00059 {
00060         unsigned char i;
00061 
00062         // 1 ms has passed, decrement all non-zero timers.
00063         for (i = 0; i < TIMERS; i++) {
00064                 if(timeval[i] > 0) {
00065                         timeval[i]--;
00066                 }
00067         }
00068 }
00069 
00070 
00078 unsigned char Time_Left(unsigned char timer)
00079 {
00080         if(timeval[timer] > 0) {
00081                 return(TRUE);
00082         } else {
00083                 return(FALSE);
00084         }
00085 }
00086 
00087 
00095 void Time_Set(unsigned char timer, unsigned int min, unsigned char sec,
00096                                   unsigned char ms)
00097 {
00098 //      timeval[i] = 4 * (1000*(sec + 60*min) + ms);   // about 4000 ticks per second
00099 //      timeval[i] = 240000 * (unsigned long)min;
00100 //      timeval[i] += 4000 * (unsigned long)sec;
00101 //      timeval[i] += 4 * (unsigned long)ms;
00102 
00103         timeval[timer] = 60000 * (unsigned long)min;
00104         timeval[timer] += 1000 * (unsigned long)sec;
00105         timeval[timer] += 1 * (unsigned long)ms;
00106 }
00107 
00108 
00113 void Time_Stop(void)
00114 {
00115         TCCR0B = 0;
00116 }
00117 
00118 
00123 void Time_Start(void)
00124 {
00125         TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);         // CLKT0 = CLK/64 = 125 kHz.
00126 }
00127 
00128 
00134 void Time_Init(void)
00135 {
00136         unsigned char i;
00137         
00138         for (i = 0; i<<TIMERS; i++)     {
00139                 timeval[i] = 0;
00140         }
00141 
00142         //    OCR0A = 0;  // Doesn't matter, will run in normal mode.
00143         
00144         OCR0A = 125;  // Will give a compare match every ms.
00145         
00146         OCR0B = 0;  // Doesn't matter, will run in normal mode.
00147 
00148                 //    TCCR0A = 0;  // Normal 8-bit mode, no input capture.
00149 
00150         TCCR0A = (1<<WGM00);  // 8-bit CTC mode.
00151         
00152         //    TCCR0B = (0<<CS02)|(1<<CS01)|(0<<CS00);  // CLKT0 = CLK/8 = 1 MHz.
00153         
00154         TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);         // CLKT0 = CLK/64 = 125 kHz.
00155 
00156         //    TIMSK |= (1<<TOIE0);      // Overflow interrupt enabled.
00157 
00158         TIMSK |= (1<<OCIE0A);  // Timer 0, Compare match A interrupt enabled.
00159 
00160         // Enable interrupts, just in case they weren't already.
00161         __enable_interrupt();       
00162 }

Generated on Tue Sep 4 19:17:55 2007 for AVR463 Charging NiMH Batteries with ATAVRBC100 by  doxygen 1.5.2