XMega Timer Interrupt

Gast #1072892
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
Gast #1073346
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;
}

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