Probleme mit UART ATmega8

OP #2968378
Lesenswert?

Hallo liebes Forum,

ich habe ein Problem mit dem UART meines Mega8.
Das Uart ansich funktioniert einwandfrei. Der Controller soll, wenn ein 
externer Interrupt ausgelöst wird zwei Zeichen im Abstand von 10ms 
empfangen.
Das Problem ist, das das Zeichen zwar anscheinend empfangen wird, die 
Anweisungen im jeweiligen case-Fall jedoch erst beim nächsten Interrupt 
ausgeführt werden. Das heisst: ich sende zwei Zeichen (data kommt im 
switch vor) und löse gleichzeitig einen Interrupt aus -> es passiert 
nichts, wenn ich jetzt ein zweites Mal zwei Zeichen sende (data kommt 
dieses mal nicht im switch vor) und einen Interrupt auslöse, passiert 
das, was eigendlich beim ersten mal hätte passieren sollen usw.

Ich hoffe Ihr könnt mir helfen!

Frohe Weihnachten!
1
ISR(INT1_vect)      //Interruptroutine für INT1 (BSY-Eingang)
2
{
3
  idGot = uart_getc();      //ID lesen
4
  _delay_ms(10);        //kurz warten
5
  dataGot = uart_getc();      //DATA lesen
6
    
7
  if (idGot == 0x30)
8
  {
9
    switch(dataGot)
10
    {
11
      case 0x01:  busWrite(0x01, 0x02);
12
          setLEDstatus(OFFLINE);
13
          break;
14
      
15
      case 0x03:  setLEDstatus(ONLINE);
16
          break;
17
      
18
      case 0x31:  setLEDstatus(OFFLINE);
19
          _delay_ms(500);
20
          setLEDstatus(ONLINE);
21
          break;
22
    }  
23
  }
24
  _delay_ms(10);
25
    
26
  dataGot = 0x00;
27
  idGot = 0x00;  
28
}
Gast #2968821
Lesenswert?

Warum soll er denn Zeichen empfangen, wenn ein Interrupt
ausgelöst wurde? Die Zeichen selbst können doch genug
Interrupt auslösen!

Liegt das erste Zeichen denn schon fertig im Empfänger vor,
wenn der Interrupt kommt? Sonst dürfte idGot = uart_getc();
ins Leere greifen.

Liegt dataGot dann auch schon vor? - Dann wurde idGot
vielleicht schon überschrieben???

Kann mich eigentlich nur  <Torsten B. (torty)> anschließen:
Lass den zusätzlichen INT1-Quatsch und benutze USART RX Int
mit nem knuffigen kleinen Ringspeicher...

Oder erläutere deine Vorgehensweise besser!

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