28c2376fddc17e40fb44b548b9baedd325f23c40
Stefan Schuermans header fix

Stefan Schuermans authored 12 years ago

1) /* flaneth - flash and ethernet
Stefan Schuermans change email address in hea...

Stefan Schuermans authored 12 years ago

2)    Copyright (C) 2007-2012 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans header fix

Stefan Schuermans authored 12 years ago

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"
Stefan Schuermans implement MCUF input via Et...

Stefan Schuermans authored 5 years ago

14) #include "mcuf_in.h"
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

15) #include "random.h"
16) #include "rtl8019.h"
17) #include "status.h"
18) #include "tcp.h"
19) #include "timing.h"
20) #include "udp.h"
21) 
Stefan Schuermans added global clock

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

25) // 2ms tick counter to generate 20ms ticks
26) volatile unsigned char Timing2_10 = 0;
27) 
28) // flag set every 20ms to indicate execution of 20ms ticks
29) volatile unsigned char Timing20Flag = 0;
30) 
31) // wrapping around 20ms tick counter
32) unsigned char Timing20 = 0;
33) 
34) // 20ms tick counter to generate 200ms ticks
35) unsigned char Timing20_10 = 0;
36) 
37) // 2ms interrupt (timer 0 compare match)
Stefan Schuermans adapt to newer avr-gcc

Stefan Schuermans authored 5 years ago

38) ISR(TIMER0_COMP_vect)
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

39) {
Stefan Schuermans added global clock

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

75) }
76) 
77) // provide curent time stamp as entropy to random number generator
78) void TimingEntropy(void)        // (extern)
79) {
80)   unsigned short timestamp = TCNT1;
81)   RandomProvideEntropy((unsigned char)timestamp);
82)   RandomProvideEntropy((unsigned char)(timestamp >> 8));
83) }
84) 
85) // provide curent 20ms tick counter as entropy to random number generator
86) void Timing20Entropy(void)      // (extern)
87) {
88)   RandomProvideEntropy(Timing20);
89) }
90) 
91) // task function to do the work - call from main loop
92) void TimingTask(void)   // (extern)
93) {
94)   // 20ms not elapsed
95)   if (!Timing20Flag)
96)     return;
97)   Timing20Flag = 0;
98) 
99)   // call 20ms tick functions
100)   CfTick20();
101) 
102)   // generate 200ms steps
103)   Timing20_10++;
104)   if (Timing20_10 >= 10)
105)     Timing20_10 = 0;
106) 
107)   // call 200ms tick functions at different times
108)   switch (Timing20_10) {
109)   case 1:
110)     ArpTick200();
111)     break;
112)   case 3:
113)     IpTick200();
114)     break;
Stefan Schuermans implement MCUF input via Et...

Stefan Schuermans authored 5 years ago

115)   case 4:
116)     McufInTick200();