fe468ceabbbc260d2ef4931afd7d4d5031f6918b
Stefan Schuermans header fix

Stefan Schuermans authored 12 years ago

1) /* flaneth - flash and ethernet
2)    Copyright (C) 2007-2012 Stefan Schuermans <stefan@schuermans.info>
3)    Copyleft: GNU public license V2 - http://www.gnu.org/copyleft/gpl.html
4)    a BlinkenArea project - http://www.blinkenarea.org/ */
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

5) 
6) #include <avr/io.h>
7) #include <avr/interrupt.h>
Stefan Schuermans added global clock

Stefan Schuermans authored 12 years ago

8) #include <util/atomic.h>
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

9) 
10) #include "arp.h"
11) #include "cf.h"
12) #include "dhcp.h"
13) #include "ip.h"
14) #include "random.h"
15) #include "rtl8019.h"
16) #include "status.h"
17) #include "tcp.h"
18) #include "timing.h"
19) #include "udp.h"
20) 
Stefan Schuermans added global clock

Stefan Schuermans authored 12 years ago

21) // global timer in ms
22) volatile unsigned long TimingMs = 0;
23) 
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

24) // 2ms tick counter to generate 20ms ticks
25) volatile unsigned char Timing2_10 = 0;
26) 
27) // flag set every 20ms to indicate execution of 20ms ticks
28) volatile unsigned char Timing20Flag = 0;
29) 
30) // wrapping around 20ms tick counter
31) unsigned char Timing20 = 0;
32) 
33) // 20ms tick counter to generate 200ms ticks
34) unsigned char Timing20_10 = 0;
35) 
36) // 2ms interrupt (timer 0 compare match)
37) SIGNAL(SIG_OUTPUT_COMPARE0)
38) {
Stefan Schuermans added global clock

Stefan Schuermans authored 12 years ago

39)   // advance global timer
40)   TimingMs += 2;
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

41)   // set flag every 20ms
42)   Timing2_10++;
43)   if (Timing2_10 >= 10) {
44)     Timing2_10 = 0;
45)     Timing20Flag = 1;
46)   }
47) }
48) 
49) // initialize
50) void TimingInit(void)   // (extern)
51) {
52)   // configure timer 0 to 2ms interval
53)   TCCR0 = 0 << FOC0 | 1 << WGM01 | 0 << WGM00 | // count to OCR0
54)       0 << COM01 | 0 << COM00 | // no waveform generation
55)       1 << CS02 | 1 << CS01 | 0 << CS00;        // 1/256 of sysclock (16MHz)
56)                                                 // -> increment every 16us
57)   OCR0 = 124;   // count to 124 -> 2ms interval
58) 
59)   // enable timer 0 compare match interrupt
60)   TIMSK |= 1 << OCIE0;
61) 
62)   // configure timer 1 to count cycles
Stefan Schuermans added global clock

Stefan Schuermans authored 12 years ago

63)   TCCR1A = 0 << WGM11 | 0 << WGM10;           // normal mode
64)   TCCR1B = 0 << WGM13 | 0 << WGM12 |          // normale mode
65)            0 << CS12 | 0 << CS11 | 1 << CS10; // no prescaler
66) }
67) 
68) // get time in milliseconds
69) void TimingGetMs(unsigned long *ms) // (extern)
70) {
71)   ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
72)     *ms = TimingMs;
73)   }