mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uart interrupt enable Problem


Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute.

Ich habe folgendes Problem:
Ich will den uart-reception-complete interrupt aktivieren.
Aber irgendwie klappt das nicht.

VIelleicht sehe ich ja auch den Wald vor lauter Bäumen nicht.

Die Initialisierung:
void  init_comm  (  void  )
{
//-- hardware initialisation ----------
  DDRD    |= (1<<PD3)|(0<<PD2);
  UBRR1H  =  0;
  UBRR1L  =  25;  //38,4kBaud@16MHz
  UCSR1B |=  (1<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
  UDR1   =   0x12;          // <= DAS KOMMT IM TERMINAL AN 
Mit
UDR1 = 0x01;
kann ich senden. Das empfange ich im Terminal => Baudrate ok.
Die ISR wird nie angesprungen, weil PB5 nicht toggelt. (PB ist Ausgang)
Andere ISRs arbeiten zuverlässig.
ISR ( USART1_RX_vect )
{
  UDR1  =   UDR1;
  PORTB ^= (1<<PB5);
  ..
}
Schreibe ich allerdings in die main, in das while(1) folgendes, und 
lasse das (1<RXCIE1) weg, funktioniert es jedenfalls: (Was ich sende, 
empfange ich wieder über das Terminal)
while(1)
{
  if ( UCSR1A & (1<<RXC1) )
  {
    UDR1  =  UDR1;
    PORTB ^= (1<<PB5);
  }
 ...


Aber warum geht der INT nicht?? Es kommt mir so vor, als ob der nicht 
freigeschaltet wird. Aber was mace ich falsch...?
DIe Zeile
  UCSR1B |=  (1<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
ist doch korrekt, oder??

Hat jemand eine Idee?

PS: Codeschnipsel sind herein kopiert

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RX ist aber nicht Senden, sondern Empfangen.

...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>RX ist aber nicht Senden, sondern Empfangen.

Ja, darum geht es ja:

>>Ich habe folgendes Problem:
>>Ich will den uart-reception-complete interrupt aktivieren.

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

Bewertung
0 lesenswert
nicht lesenswert
Welcher AVR? Sicher, dass der Vektor "USART1_RX_vect" heißt und nicht 
"USART1_RXC_vect"?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ist ein mega128. Die 103C-Fuse ist auch abgeschaltet.

Der Vektorname ist direkt aus der iom128.h herauskopiert:
(Auszug)
/* USART1, Rx Complete */
#define USART1_RX_vect      _VECTOR(30)
#define SIG_USART1_RECV      _VECTOR(30)
#define SIG_UART1_RECV      _VECTOR(30)

Ich denke mal, wenn der Vektor falsch zeigt, dann würde er wohl 
abstürzen, aber andere INTs arbeiten

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du Interrupts auch global enabled?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hab ich:
>Andere ISRs arbeiten zuverlässig.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, manchmal muss man nicht nur doppelt, sondern gleich 3-mal hingucken. 
;-)
UCSR1B |=  (1<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);

(1<RXCIE1)  ->  (1<<RXCIE1)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan Ernst (sternst):

Ich würde sagen, du hast dir ein Bierchen verdient:

Es geht nääääääämlich jetzt....

PS:
Was macht eigentlich (1<RXCIE1) ??

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

Bewertung
0 lesenswert
nicht lesenswert
> (1<RXCIE1)  ->  (1<<RXCIE1)
AAAAAAARRRGGHHHH!!!

Matthias Lipinsky wrote:
> Was macht eigentlich (1<RXCIE1) ??
Das ist ein logischer Ausdruck, der 1 ist, wenn die Zahl 1 kleiner als 
RXCIE1 ist, andernfalls 0...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das ist ein logischer Ausdruck, der 1 ist, wenn die Zahl 1 kleiner als
>RXCIE1 ist, andernfalls 0...

Jetzt sehe ichs auch..

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.