Forum: Mikrocontroller und Digitale Elektronik XMega Timer Interrupt


von Bernd (Gast)


Lesenswert?

Hallo,

ich habe mal ne Verständnis-Frage zu Interrupts (XMega) welche von 
Timern ausgelöst werden.
Ist es möglich von einem Timer mehrere Interrupts auslösen zu lassen. 
Also z.B. folgendes Szenario:

Timer1 soll immer bis 1000 zählen.
Dann soll eine ISR beim Timer1-Wert 200 ausgelöst werden, dann nochmal 
bei 400 und dann nochmal bei Überlauf.

Ist das möglich, oder kann ein Timer immer nur einen Interrupt auslösen?

mfg Bernd

von Analog (Gast)


Lesenswert?

Ja, das geht.

von Bernd (Gast)


Lesenswert?

Und warum läuft das hier dann nicht?

#include <avr/io.h>
#include <avr/interrupt.h>

int main(void)
{
  // internen Oszillator auf 32MHZ einstellen
  OSC.CTRL = 3;
  while(OSC.STATUS != 3)
  {
  }
  CCP = 0xD8;
  CLK.CTRL = 1;

  // Interrupts aktivieren und alle Level freigeben
  sei();
  PMIC.CTRL=0x07;

  // Timer 0 initialisieren
  TCC0.CTRLA = 0x00;
  TCC0.INTCTRLA = 0x03;    //Overflow-Interrupt aktivieren als 
high-Level
  TCC0.INTCTRLB = 0x3F;    //Compare-Interrupts A,B,C aktivieren als 
high-Level
  TCC0.CCA = 100;        //Vergleichswert A = 100
  TCC0.PER = 250;        //Maximalwert = 250

  TCC0.CTRLA = 0x04;      //Prescaler auf 8 --> 4MHz, T=250ns

  PORTB.DIR = 0xFF;
  PORTB.OUT = 0xFF;

  while(1)
  {
    PORTB.OUT = 0x66;
    PORTB.OUT = 0x55;
  }
}

ISR (TCC0_OVF_vect)
{
  PORTB.OUT = 0x33;
  PORTB.OUT = 0x44;
}
ISR (TCC0_CCA_vect)
{
  PORTB.OUT = 0xAA;
  PORTB.OUT = 0xBB;
}

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn die Timer-Periode bei 250 liegt, wie soll der Timer dann bis 1000 
zählen? Und ich meine mich erinnern zu können, daß der 
Interrupt-Controller vor dem 'sei' initialisiert werden muß.

von Bernd (Gast)


Lesenswert?

Hat sich schon erledigt, läuft also. Problem war, das ich den Compare 
Interrupt A, B & C aktiviert habe, aber nur den Schwellwert für A 
festgelegt hab. Das mag der xmega wohl nicht.

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.