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);