Langes Delay bei Komperatorinterrupt (TMS320F28069)

#3352341
Lesenswert?

Hallo,

ich versuche mit einem TMS320F28069 einen 2-Punkt-Regler zu realisieren. 
Dazu nutze ich einen der Komperatoren des DSP's. Jedes Mal wenn der 
Komperator auf High geht, lasse ich einen Interrupt erzeugen.
Das funktioniert soweit. Probleme habe ich aber damit, dass der 
Interrupt extrem verzögert kommt. Gemäss dem Wiki von TI 
(http://processors.wiki.ti.com/index.php/Interrupt_FAQ_for_C2000), 
sollte ein Interrupt (intern) 14 Takte brauchen. Ich erhalte jedoch beim 
ersten Interrupt ein Delay von rund 36 Takten (bei 60 MHz). Die weiteren 
Interrupts folgen dann mit einem Delay von ca 24 Takten (siehe Grafik im 
Anhang).
Mit Hilfe der Code Optimization Stufe habe ich das Delay bereits etwas 
reduzieren können. Die ISR Routine habe ich als pragma initialisiert.
Hat jemand eine Ahnung woher diese grosse Verzögerung kommt?

Hier die Initialisierung des Komperators:

 //configure Comp2
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3;    //  3=COMP2OUT
Comp2Regs.COMPCTL.bit.COMPDACEN = 1;  // enable Comp2
Comp2Regs.COMPCTL.bit.COMPSOURCE = 0;  // - input conected to intern DAC
Comp2Regs.COMPCTL.bit.SYNCSEL = 1;  // Asynchronous version of 
//comparator output is passed
Comp2Regs.COMPCTL.bit.QUALSEL = 0;
GpioCtrlRegs.AIOMUX1.bit.AIO4 = 3;  // AIO4 -> CMP2A

// Interrupt Comperator
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 9;//COMP2OUT input for the DCAH 
Input
EPwm1Regs.TZDCSEL.bit.DCAEVT1 = 2;      //Event 1 Selection when DCAH = 
//high, DCAL = don't care


EPwm1Regs.DCACTL.bit.EVT1SRCSEL = 0;  //DCAEVT1 = DCAEVT1 (not filtered)
EPwm1Regs.TZEINT.bit.DCAEVT1 = 1;  //Enable Digital Comparator Output 
//A Event 1 Interrupt Enable

EDIS;


Hier meine ISR Routine:

void COMPARATOR_ISR(void)
{
  GpioDataRegs.GPBSET.bit.GPIO40 = 1;    // LED1 an

  EALLOW;

  EPwm1Regs.TZCLR.bit.DCAEVT1 = 1;
  EPwm1Regs.TZCLR.bit.INT = 1;
  EDIS;

    //EPwm1Regs.TZFRC.bit.DCAEVT1 = 1;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;

  GpioDataRegs.GPBCLEAR.bit.GPIO40 = 1;    // LED1 aus

}

Vielen Dank für Eure Hilfe.
Angehängte Dateien:
Gast #3375131
Lesenswert?

Hi,

Läuft der Code aus dem Flash oder aus dem RAM? Der Flash hat in der 
Regel Waitstates, sprich, die CPU bekommt nicht alle Daten sofort 
sondern erst nach einer kurzen Verzögerung. Abhilfe schafft es, die 
Funktionen, die wirklich schnell sein müssen, aus dem RAM heraus 
auszuführen.

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