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.