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:
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:TCCR0 |= (1 << CS00) | (1 << CS01 ) ; // Timer0 initialisierung TCCR0 &= ~(1 <<CS02 ); // Vorteiler ist 64 TIMSK |= (1<<TOIE0); // Interrupt aktivieren init_USART(); sei();
Mit dem Code bekomm ich im Hyperterminal immer nur "test1" und "test2" inner Endlosschleife angezeigt. Ich weis im moment nichtmehr weiter...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"); }
Gruß
elayne







Zitieren
Lesezeichen