Forum: Mikrocontroller und Digitale Elektronik ATMega644p UART Interrupt


von Ralf (Gast)


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?

von Gasst (Gast)


Lesenswert?

In der ISR muß die Interruptanforderung gelöscht werden: UDR lesen.

von Ralf (Gast)


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:
1
uint8_t foo = UDR0;

in der ISR.

von Gasst (Gast)


Lesenswert?

>Ja, ich weiß.

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

von Bal T. (baltic)


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

von Ralf (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.