Hallo zusammen,
ich habe ein Problem mit dem versuch über den Timer2 am AT90CAN128 einen
Interrupt auszulösen. Als versuch möchte ich eine LED blinken lassen.
Leider wird der Interrupt nie ausgelöst und ich kann den Fehler nicht
finden. Wenn ich manuell im AVR Studio den TCNT2 auf 0xFF stelle kann
ich einen Interrupt simulieren d.h es wird in die ISR routine gesprungen
und abgeabreitet.
Woran kann es liegen das der Interrupt nicht ausgelöst wird?
1 | #include "config.h"
|
2 | #include "avr/interrupt.h"
|
3 | #include "util/delay.h"
|
4 |
|
5 | volatile uint8_t LED;
|
6 |
|
7 | void rtc_init(void)
|
8 | {
|
9 | ASSR=(1<<AS2);
|
10 | ASSR=(1<<EXCLK);
|
11 | _delay_ms(500);
|
12 | _delay_ms(500);
|
13 | TCCR2A=(1<<WGM21) | (1<<CS22) | (1<<CS21);
|
14 | OCR2A=128;
|
15 | while((ASSR & (1<< TCR2UB)));
|
16 | TIFR2 &= ~(1<<TOV2);
|
17 | TIMSK2 |= (1<<TOIE2);
|
18 | }
|
19 |
|
20 | int main (void)
|
21 | {
|
22 | CLKPR = 0x80; CLKPR = 0x00;
|
23 | DDRB = (1<<PB3) | (1<<PB5);
|
24 | PORTB = ~((1<<PB3) | (1<<PB5));
|
25 |
|
26 | rtc_init();
|
27 | sei();
|
28 |
|
29 | while(1)
|
30 | {
|
31 | if (LED) {
|
32 | LED =0;
|
33 | PORTB ^= (1<<PB5);
|
34 | }
|
35 | }
|
36 | return 0;
|
37 | }
|
38 |
|
39 |
|
40 | ISR(TIMER2_OVF_vect)
|
41 | {
|
42 | static uint8_t count;
|
43 |
|
44 | OCR2A=128;
|
45 | count++;
|
46 | if (count==128)
|
47 | {
|
48 | count=0;
|
49 | LED =1;
|
50 | }
|
51 | }
|
Vielen Dank für eure Mühe.