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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.