mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega644p UART Interrupt


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich versuche interruptgesteuert Daten über die BEIDEN USARTs des 
ATMega644p einzulesen.

Zunächst einmal wollte ich einfach nur den UART0 so initialiesieren, 
dass beim Eintreffen von Daten an  diesem ein Interrupt ausgelöst wird 
und (zum Zeichen dass es funktioniert) eine LED getoggelt wird.

Hier der code:
#include <avr/io.h>
#include <avr/interrupt.h>

void main(void)
{
  DDRA = 0xFF;
  UBRR0 = 103; // 9600 Baud bei 16000000Hz
    // Transmitter und Receiver Enable
    UCSR0B = (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0);
    UCSR0C = (1<<USBS0)|(1<<UCSZ00);
  sei();
    while(1)
    {
    }
}


// UART RX complete interrupt
ISR(USART0_RX_vect)
{
  PORTA ^= ( 1 << PA0 );  // Toggle LED
}

Hat jemand einen Tip was ich falsch mache?

Autor: Gasst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der ISR muß die Interruptanforderung gelöscht werden: UDR lesen.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> In der ISR muß die Interruptanforderung
>> gelöscht werden: UDR lesen.

Ja, ich weiß. Aber die LED hätte trotzdem EINMAL togglen sollen. Tut sie 
aber nicht. Auch nicht mit:
uint8_t foo = UDR0;

in der ISR.

Autor: Gasst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja, ich weiß.

Na ja, dann weißt Du die anderen Sachen ja auch.

Autor: Bal Tic (baltic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ralf,

hier ein paar Ideen:

- Takt richtig?
   ... oder ist der interne RC-OSC incl. Fuse CLKDIV8 noch aktiv?

- Arbeitest Du mit 6-Bit?
   ... bei 8-Bit ist auch UCSZ01 im UCSR0C-Register zu setzen

- Persönlich schreibe ich immer lieber:

  UBRR0H = 0;
  UBRR0L = 103;

- Wie von Gasst gesagt: UDR lesen!!!


Gruß Jens

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an alle. Es geht erst einmal. Ich hatte einen blöden (etwas 
schusseligen) Hardware Fehler :--/.

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.