Forum: Mikrocontroller und Digitale Elektronik XMega DIR PORT


von Hobby Programmierer (Gast)


Lesenswert?

Hallo,

ich bitte um Hilfe bei folgendem Programmcode:

(Hardware: XPlain Board, MKII Programmer, AVR 5.0)

funktionierende Programm Version (LEDs blinken):


int main (void)
{
  board_init();
  init_peripherie();
  PORTE.DIR = 0xFF; // Port E als Ausgang definieren

  while(1)
  {
    PORTE.DIR = 0xFF; // Port E als Ausgang definieren
    PORTE.OUT = ~out; //Variable am Ausgang vom Port invertiert ausgeben
  }
  // Insert application code here, after the board has been initialized.
   return 0;

}

/* Timer TCC0 Interrupt routine */
ISR(TCC0_OVF_vect)
  {
        out++; // hier kann stehen was der Timer bei jedem Interrupt tun 
soll
  }


NICHT Funktionierende Version (unterschied in der While schleife), LEDs 
leuchten nicht, obwohl PORTDIR richtig gesetzt und im IO Register 
richtig angezeigt wird (0xFF):


int main (void)
{
  board_init();
  init_peripherie();
  PORTE.DIR = 0xFF; // Port E als Ausgang definieren

  while(1)
  {
    //PORTE.DIR = 0xFF; // Port E als Ausgang definieren
    PORTE.OUT = ~out; //Variable am Ausgang vom Port invertiert ausgeben
  }
  // Insert application code here, after the board has been initialized.
   return 0;

}

/* Timer TCC0 Interrupt routine */
ISR(TCC0_OVF_vect)
  {
        out++; // hier kann stehen was der Timer bei jedem Interrupt tun 
soll
  }

wieso muss der DIR von Port E in der While schleife immer wieder gesetzt 
werden? Das Programm springt nur zwischen While schleife und interrupt.

von Konrad S. (maybee)


Lesenswert?

Wie ist denn out deklariert?

von Hobby Programmierer (Gast)


Lesenswert?

Hallo,

die Variable ist wie folgt deklariert:

uint8_t out = 0;

gemäß

http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial

von Konrad S. (maybee)


Lesenswert?

Variablen, die zur Kommunikation zwischen Interrupt-Serviceroutinen und 
Hauptprogramm eingesetzt werden, müssen volatile deklariert werden. 
Sonst kann der Compiler nach Belieben daran rumoptimieren und es kommt 
zu merkwürdigen Effekten.

von Hobby Programmierer (Gast)


Lesenswert?

Danke für den Tip, es lag tatsächlich daran !

Ich hätte nicht gedacht, dass es an der deklaration liegen kann.

Vielen Dank !

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.