hallo, mache gerade meine ersten versuche mit einem atmega64. lesen + schreiben auf der seriellen funktioniert. jetzt moechte ich das lesen auf interrupt-gesteuert umstellen, allerdings wird die ISR-routine nicht durchlaufen. kann mir jemand sagen was ich vergessen habe ? vorab merci #include <avr/io.h> #include <avr/interrupt.h> #define USART1_RXC _VECTOR(31) void USART1_init(unsigned int baud){ UBRR1H=(unsigned char)(baud>>8); UBRR1L=(unsigned char) baud; UCSR1B = (1<<RXEN1 ) | (1<<TXEN1) ; UCSR1B |= (1<<RXCIE1); // interrupt aktivieren UCSR1C = (3<<UCSZ10); } void USART1_transmit(unsigned char data){ while( !(UCSR0A & (1<<UDRE1)) ) ; UDR1=data; } ISR(USART1_RXC){ unsigned char c; DDRB|=(1<<PB6); // test, ob routine leauft c=UDR1; USART1_transmit(c); } int main(void){ sei(); USART1_init(25); while(1) ; return 0; }
Warum definierst Du den Interrupt-Vektor selber? Dafür gibt es doch die in der Headerdatei definierten. Versuch es mal mit
1 | ISR(USART1_RXC_vect) |
2 | {}
|
Außerdem ist es nicht grad die feine Art, aus einem Interrupt Handler heraus eine Funktion mit einer Warteschleife aufzurufen. Ansonsten: Weißt Du sicher, dass die ISR nicht ausgeführt wird, und wenn ja, woher? Und mit welcher Taktfrequenz läuft der µC?
Johannes M. wrote: > Warum definierst Du den Interrupt-Vektor selber? Dafür gibt es doch die > in der Headerdatei definierten. Versuch es mal mit >
1 | > ISR(USART1_RXC_vect) |
2 | > {} |
3 | >
|
Den hatte ich zuerst, wird aber mit einer compilerwarnung (misspelled signal handler) quittiert. > Außerdem ist es nicht grad die feine Art, aus einem Interrupt Handler > heraus eine Funktion mit einer Warteschleife aufzurufen. Ja, weiss ich - bleibt auch nicht so - ist nur ein echo zum testen > Ansonsten: Weißt Du sicher, dass die ISR nicht ausgeführt wird, und wenn > ja, woher? Und mit welcher Taktfrequenz läuft der µC? Ich schalte als erstes in der ISR eine LED, die aber nicht angeht. Die Taktfrequenz ist 1 Mhz
Hombre Lobo wrote: > Den hatte ich zuerst, wird aber mit einer compilerwarnung > (misspelled signal handler) quittiert. Der Vektor heißt auch USART1_RX_vect.
ui, klasse - vielen dank - jetzt läuft es :) hatte die vektorbezeichnung irgendwo aus der doku und mich schon sehr gewundert ueber die compilerwarnung
Jörg Wunsch wrote:
> Der Vektor heißt auch USART1_RX_vect.
Hupps, da hab ich mich doch glatt vertippt...;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.