Langes Delay bei Komperatorinterrupt (TMS320F28069)

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.