ATMega644p UART Interrupt

Gast #1177415
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:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
void main(void)
5
{
6
  DDRA = 0xFF;
7
  UBRR0 = 103; // 9600 Baud bei 16000000Hz
8
    // Transmitter und Receiver Enable
9
    UCSR0B = (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0);
10
    UCSR0C = (1<<USBS0)|(1<<UCSZ00);
11
  sei();
12
    while(1)
13
    {
14
    }
15
}
16

17

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

Hat jemand einen Tip was ich falsch mache?
#1177444
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren