www.mikrocontroller.net

Forum: Compiler & IDEs ATMEGA64 USARTn INTERRUPT


Autor: Hombre Lobo (hombrelobo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum definierst Du den Interrupt-Vektor selber? Dafür gibt es doch die 
in der Headerdatei definierten. Versuch es mal mit
ISR(USART1_RXC_vect)
{}
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?

Autor: Hombre Lobo (hombrelobo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:
> Warum definierst Du den Interrupt-Vektor selber? Dafür gibt es doch die
> in der Headerdatei definierten. Versuch es mal mit
>
> ISR(USART1_RXC_vect)
> {}
> 

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hombre Lobo wrote:

> Den hatte ich zuerst, wird aber mit einer compilerwarnung
> (misspelled signal handler) quittiert.

Der Vektor heißt auch USART1_RX_vect.

Autor: Hombre Lobo (hombrelobo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ui, klasse - vielen dank - jetzt läuft es :)

hatte die vektorbezeichnung irgendwo aus der doku und mich schon
sehr gewundert ueber die compilerwarnung

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Der Vektor heißt auch USART1_RX_vect.
Hupps, da hab ich mich doch glatt vertippt...;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.