Interruptverarbeitung beim dsPic33fj

Gast #2145983
Lesenswert?
• ▲
▼
Hallo,

ich habe mal eine Frage zum Interrupthandling des dsPic33. Aktuell setze 
ich das Modell fj128gp706A ein.

Laut Instructiontable unterstützen die dsPics die Assembleranweisung
DISI #lit14 (Disable Interrupts for k instruction cycles), welche die 
Ausführung von User-ISRs für die nächsten k cycles deaktiviert.

Wenn man sich nun ein Macro bauen würde, welches wie folgt ausschaut

#define INTERRUPT_PROTECT(x) { \
asm volatile("disi #0x3FFF"); /* disable interrupts */ \
x; \
asm volatile("disi #0x0000"); /* enable interrupts */ \
} (void)0;

wäre es doch teoretisch möglich über einen entsprechenden Aufruf den 
jeweiligen Code interrupt geschützt auszuführen.

Nun habe ich mir das Datenblatt, genauer die Sektion Interrupt 
angesehen. Dort steht beschrieben, dass ein deaktivieren des Interrupt 
Nestings (NSTDIS control bit (INTCON1<15>)) die Prioritäten der 
UserInterrupts auf 7 setzt, was folglich die DISI-Anweisung aushebeln 
würde, da die ausschließlich für Prioritäten <7 wirkt.

Sehe ich das somit richtig, das ein Interrupt geschützter Aufruf einer 
Funktion lediglich durch die von Microchip vorgegebenen 
Implementierungen möglich ist, und ich die DISI-Anweisung für meinen 
Fall nicht verwenden kann? Das nesting von Interrupts ist deaktiviert!

Auszug Datenblatt
void enableInterrupts(void)
{
/* Set CPU IPL to 0, enable level 1-7 interrupts */
/* No restoring of previous CPU IPL state performed here */
SRbits.IPL = 0;
return;
}
void disableInterrupts(void)
{
/* Set CPU IPL to 7, disable level 1-7 interrupts */
/* No saving of current CPU IPL setting performed here */
SRbits.IPL = 7;
return;
}

Gruß René

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.