In intWDT() wird der Watchdog initialisiert. Er soll alle 8 Sekunden (Flags:WDP0, WDP3 einen Interrupt auslösen. Ausgelöst wird der Interrupt jedoch alle 16 ms. Wo liegt der Fehler?
1 | #include <avr/sleep.h> |
2 | #include <avr/wdt.h> |
3 | #include <util/delay.h> |
4 | #include <avr/io.h> |
5 | #include <util/atomic.h> |
6 | |
7 | ISR (WDT_vect, ISR_NAKED) |
8 | {
|
9 | PORTD |= (1 << PORTD5); |
10 | _delay_ms(10); |
11 | PORTD &= ~(1 << PORTD5); |
12 | |
13 | reti(); |
14 | }
|
15 | |
16 | void intWDT(void) |
17 | {
|
18 | cli(); |
19 | wdt_reset() ; |
20 | WDTCSR = (1 << WDCE) | (1 << WDIE); |
21 | WDTCSR = (1 << WDIE) | (1 << WDP3) | (1 << WDP0); |
22 | sei(); |
23 | }
|
24 | |
25 | int main(void) |
26 | {
|
27 | DDRD = (1 << PORTD5); |
28 | |
29 | intWDT(); |
30 | |
31 | while (1) |
32 | {
|
33 | }
|
34 | |
35 | return (0); |
36 | }
|