Hey,
Ich hab schon den ganzen mittag ziemliche Probleme mit Timer0 eines Atmega32. Ich möchte eigentlich nur das bei jedem overflow ein Interrupt ausgelöst wird. Sobald ich aber Interrupts aktiviere resetet sich der Controller. Um diese Stelle geht es:
Code:
TCCR0 |= (1 << CS00) | (1 << CS01 ) ; // Timer0 initialisierung
TCCR0 &= ~(1 <<CS02 ); // Vorteiler ist 64
TIMSK |= (1<<TOIE0); // Interrupt aktivieren
init_USART();
sei();
wenn ich "sei()" oder "TIMSK |= (1<<TOIE0);" rausnehme funktioniert das Programm wie es soll, aber sobald beide da sind resetet sich der Controller. Ich habe bestimmt wieder was total einfaches übersehen und such nun schon ewig danach. Also wär gut wenn mal kurz jemand drüber sehen könnte, hier mein gesamter Testcode:
Code:
int main( void )
{
sendUSART(" test1 \r \n");
_delay_ms(1000);
TCCR0 |= (1 << CS00) | (1 << CS01 ) ; // Timer0 initialisierung
TCCR0 &= ~(1 <<CS02 ); // Vorteiler ist 64
TIMSK |= (1<<TOIE0); // Interrupt aktivieren
init_USART();
sendUSART("test2 \r\n");
_delay_ms(1000);
sei();
sendUSART("test3 \r \n");
_delay_ms(1000);
while( 1 )
{ // Endlosschleife
sendUSART("test4 \r \n");
_delay_ms(1000);
}
return 0; //wird nie erreicht
}
ISR(TIMER0_OVF_vect)
{
sendUSART("interrupt");
}
Mit dem Code bekomm ich im Hyperterminal immer nur "test1" und "test2" inner Endlosschleife angezeigt. Ich weis im moment nichtmehr weiter...
Gruß
elayne
Lesezeichen