Subversion Repositories HomeAutomation

Rev

Blame | Last modification | View Log | SVN | RSS feed

  1. /******************************************************************************
  2.  * Copyright (C) 2005 Martin THOMAS, Kaiserslautern, Germany
  3.  * <eversmith@heizung-thomas.de>
  4.  * http://www.siwawi.arubi.uni-kl.de/avr_projects
  5.  *****************************************************************************
  6.  *
  7.  * File    : timebase.c
  8.  * Version : 0.9
  9.  *
  10.  * Summary : AVR Timebase using Hardware-Timer 0
  11.  *
  12.  *****************************************************************************/
  13.  
  14. #include <inttypes.h>
  15. #include <avr/io.h>
  16. #include <avr/signal.h>
  17. #include <avr/interrupt.h>
  18.  
  19. #include "timebase.h"
  20.  
  21. SIGNAL(SIG_OVERFLOW0)
  22. {
  23.     gMilliSecTick++;
  24.     TCNT0 = TIMEBASE_RELOAD;
  25. }
  26.  
  27. void timebase_init(void)
  28. {
  29.     TCCR0 = (1<<CS01) | (1<<CS00); // prescaler: 64
  30.     TCNT0 = TIMEBASE_RELOAD; // set initial reload-value
  31.     TIFR  |= (1<<TOV0);  // clear overflow int.
  32.     TIMSK |= (1<<TOIE0); // enable overflow-interrupt
  33. }
  34.  
  35. uint16_t timebase_actTime(void)
  36. {
  37.     uint8_t sreg;
  38.     uint16_t res;
  39.    
  40.     sreg=SREG;
  41.     cli();
  42.  
  43.     res = gMilliSecTick;
  44.    
  45.     SREG=sreg;
  46.    
  47.     return res;
  48. }
  49.    
  50. uint16_t timebase_passedTimeMS(uint16_t t0)
  51. {
  52.     uint8_t sreg;
  53.     uint16_t res;
  54.    
  55.     sreg=SREG;
  56.     cli();
  57.  
  58.     res = (uint16_t)(gMilliSecTick-t0);
  59.    
  60.     SREG=sreg;
  61.    
  62.     return res;
  63. }
  64.  
  65.  
  66.