ATtiny1614 2 Interrupts heben sich auf?!

Gast #5387944
Lesenswert?

Hallo,

ich scheitere gerade am Tiny1614. Ich habe dort einen Pin-ISR mit einem 
dort anliegenden Signal von ca. 20 khz. Wird auf beide Flanken 
getriggert.

Dann habe ich einen weiteren ISR für den Systemtimer der liegt bei 20 
khz für Servo, PWM usw.

Jetzt habe ich folgenden Effekt:

1. Ich aktiviere den TCD-ISR

TCD0.CMPBCLR = 31;
  TCD0.INTCTRL = TCD_OVF_bm;
  TCD0.CTRLB = TCD_WGMODE_ONERAMP_gc;
  TCD0.CTRLA = (TCD_CLKSEL_20MHZ_gc | TCD_CNTPRES_DIV32_gc | 
TCD_SYNCPRES_DIV1_gc | TCD_ENABLE_bm);

er funktioniert.

Aktiviere ich nun noch den PORTA.ISR ist der TCD Timer deaktiv. Der 
Port-ISR hingegen funktioniert jetzt. Was ist das?!
Gast #5388209
Lesenswert?

Hat keiner eine Idee?

Ich verstehe das nicht. Ich habe es mit mehreren Timern jetzt getestet 
(TCB, TCD - TCA wird bereits verwendet ohne Interrupt zur ermittlung des 
Signals am PORTA7 Interrupt).

Warum geht kein Timer-Interrupt mehr, sobald man Pin-Interrupt 
anschaltet=?!
Gast #5388347
Lesenswert?

Route 6. schrieb:

> Vermutung: du überfährst deinen µC mit dem Flanken-INT an PortA alle 25
> µs.
> Der Timer kommt nicht mehr zum Zuge.
> Alles geraten!

Könnte auch ganz simpel an einer falschen Initialisierung des 
Interruptcontrollers liegen. Den entsprechenden Codeteil (namlich das 
Enablen des zweiten Interrupts) hat er uns aber auch vorenthalten, so 
dass auch hier die Glaskugel orakeln muss...
Gast #5388375
Lesenswert?

c-hater schrieb:
> Route 6. schrieb:
>
>> Vermutung: du überfährst deinen µC mit dem Flanken-INT an PortA alle 25
>> µs.
>> Der Timer kommt nicht mehr zum Zuge.
>> Alles geraten!
>
> Könnte auch ganz simpel an einer falschen Initialisierung des
> Interruptcontrollers liegen. Den entsprechenden Codeteil (namlich das
> Enablen des zweiten Interrupts) hat er uns aber auch vorenthalten, so
> dass auch hier die Glaskugel orakeln muss...

Vielen Dank für die Antworten. Anbei mal die Init der Sachen. Aktuell - 
aus Testzwecken - habe ich bereits alles auskommentiert. Es ist jetzt 
nur noch im programm die beiden ISR-Routinen (jeweils wird dort ein 
Port-Pin getoggelt) mehr nicht.


Die gleiche Software lief auf einem Attiny84 auch mit 20 Mhz. Da war 
alles kein Problem. Daher wundert mich das Ganze. Ich denke auch das ich 
etwas falsch initialisiert habe. Ich frage mich nur ernsthaft was.



//make clock system without prescaler
  CPU_CCP = 0xD8;
  CLKCTRL_MCLKCTRLA = CLKCTRL_CLKSEL_OSC20M_gc;
  CPU_CCP = 0xD8;
  CLKCTRL_MCLKCTRLB = 0;

  CPU_CCP = 0xD8;
  WDT.CTRLA = 0;


  PORTA.DIR = 0b11111001;
  PORTA.OUT = 0;

  PORTB.DIR = 0b11111100;
  PORTB.OUT = 0;

  ADC0.CTRLC = (ADC_SAMPCAP_bm | ADC_REFSEL_VDDREF_gc | 
ADC_PRESC_DIV256_gc);
  ADC0.MUXPOS = (ADC_MUXPOS_AIN2_gc);
  ADC0.CTRLA = (ADC_REFSEL1_bm | ADC_ENABLE_bm);  //8bit & enable
  ADC0.COMMAND = ADC_STCONV_bm;


//Timer init with 1ms/ovf (only for timing, e.g can dimming (soft)
  //Für den Timer (interrupt)  (20 kHz)
  TCD0.CMPBCLR = 31;
  TCD0.INTCTRL = TCD_OVF_bm;
  TCD0.CTRLB = TCD_WGMODE_ONERAMP_gc;
  TCD0.CTRLA = (TCD_CLKSEL_20MHZ_gc | TCD_CNTPRES_DIV32_gc | 
TCD_SYNCPRES_DIV1_gc | TCD_ENABLE_bm);

  //timer for detection cnt
  TCA0.SINGLE.PER = 0xFF;
  TCA0.SINGLE.CTRLA = (TCA_SINGLE_CLKSEL_DIV64_gc | 
TCA_SINGLE_ENABLE_bm);


//PCINT for DCC_DETECT, Pull Up for DCC
  PORTA.PIN7CTRL = (PORT_ISC_BOTHEDGES_gc | PORT_PULLUPEN_bm);
Gast #5392075
Lesenswert?

Äxl (geloescht) schrieb:
> stell mal das Projekt hier ein. wie soll man das sonst durch den
> Debugger jagen?

Sorry für die späte Rückmeldung! Anbei mal das Testprogramm. Ich 
verzweifel langsam echt, ich verstehe nicht warum das nicht geht. So 
eine Sache wäre bei einem "normalen" Tiny oder Mega kein Problem. Selbst 
bei einem XMega habe ich sowas am Laufen.

Bin echt mehr als Dankbar für jede Unterstützung und Hilfe.
Angehängte Dateien:

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