Zyklischer aufruf der ISR mit eCAP

Gast #2239713
Hallo,
ich verwende den o.g. DSC.
Ist es prinzipiell möglich mit den eCAP einen zyklischen Interrupt zu 
erzeugen, wie z.B. mit einem "normalen" Timer?
Der tolle Reference Guide "SPRUFZ8A" gibt nicht soviel her.

Ich habe es jetzt mal wie folgt konfiguriert:
1
  // Konf. ECAP 1 im APWM mode. ISR soll aufgerufen werden, wenn Timer=PRD.
2
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;  // Stop TSCTR
3
ECap1Regs.ECEINT.all=0;    // Interrupts deaktivieren
4
ECap1Regs.ECCLR.all = 0x0FF; // Interruptflags löschen
5
ECap1Regs.ECEINT.bit.CTR_EQ_PRD = 1; // Erlauber Interrupt, wenn Zähler==Periode
6
ECap1Regs.ECCTL2.bit.CAP_APWM = 1;// ECAP 1 im APWM mode
7
ECap1Regs.CAP1 = 5000; // Setzte Wert für eine Periode
8
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // Start TSCTR

In der ISR ist folgendes zu finden:
1
  // Lösche Anforderungsflag
2
     ECap1Regs.ECCLR.bit.INT = 1;
3

4
   // Bekomme wetrere Interrups
5
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;

Die Interrupts sind freigegeben, PIE ist gesetzt, etc.. Das sollte alles 
passen.
Nun wird die ISR nicht nur aufgerufen wenn Zähler==Periode, sondern 
irgendwie alle ?4-8? Takte!
Habe ich da etwas falsch konfiguriert?
Das eCAP-Register ist wohl ein wenig exotisch.... :o)

Hoffe jemand kann da mal drüber schauen!
Gast
So,
ich habe es nun hinbekommen, dass Interrupte bei CTR==PRD erzeugt 
werden:

Die Konfiguration der Register:
1
   ECap1Regs.ECEINT.all = 0x0000;             // Disable all capture interrupts
2
   ECap1Regs.ECCLR.all = 0xFF;              // Clear all CAP interrupt flags
3
   ECap1Regs.ECCTL1.all = 0;          // Disable ECCTL1
4
   ECap1Regs.ECCTL2.all = 0;        // Stop the counter and disable all
5
   
6
    // Configure peripheral registers         
7
   ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;         // Disable sync in
8
   ECap1Regs.ECCTL2.bit.SYNCO_SEL = 3;       // Disable sync out
9
   ECap1Regs.ECCTL2.bit.CAP_APWM=1;      // Set APWM Mode
10
   ECap1Regs.ECEINT.bit.CTR_EQ_PRD=1;    // Enable int @ CTR==PRD
11
   ECap1Regs.CAP1=10000;          // Load periode register
12
   ECap1Regs.ECCTL2.bit.TSCTRSTOP=1;  // Start the counter

In der ISR ist zu finden:
1
   ECap1Regs.ECCLR.bit.INT = 1;        // Clear the ECAP1 interrupt flag
2
  ECap1Regs.ECCLR.all = 0xFF;          // Clear all interrupt flags
3
  
4
   // Acknowledge this interrupt to receive more interrupts from group 4
5
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;

Das Problem ist nun noch, dass 2 Interrupte erzeugt werden. Bei CTR=PRD 
und ein Weiterer mit einem zeitlichen Versatz von ca. 250 ns.
Für einen Tipp wäre ich sehr dankbar!

Grüße
Hi,

ich habe gerade selber erfolgreich ein projekt mit dem eCAP 
abgeschlossen. Ja im Prinzip ist ein zyklischer Interrupt möglich mit 
dem eCAP, falls du nen Timer nicht benutzen möchtest (wäre einfacher).
Ich habe das eCAP auch als APWM benutzt.
Versuch das gleiche doch mal mit CTR = CMP und dem CAP2 und schau was 
passiert.

Wenn der Versatz des zweiten Interrups konstant ist dann verfolg das 
doch zurück. Also mittels des Clocks des eCAP kannste ja zurückrechnen 
bei welchem Count der zweite Interrupt erfolgt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.