MSP430: Interrupts und __bis_status_register_on_exit

Gast #4178735
Lesenswert?
• ▲
▼
Hallo,

ich versuche gerade alten, ursprünlich mit IAR kompilierten Code mit 
msp430-gcc zu bauen. Dabei muss ich unter anderem die Interrupt-Routinen 
anders deklarieren. So sieht die neue Lösung aus:
1
ISR(ADC12_VECTOR, ADC12Int)             
2
{                                       
3
        __low_power_mode_off_on_exit();
4
        ADC12IFG = 0;
5
}

Dabei ist __low_power_mode_off_on_exit ein Makro:
1
#define __low_power_mode_off_on_exit() __bis_status_register_on_exit(LPM4_bits);

Leider beschwert sich der msp-g++:
1
Dev.c: In function ‘void ADC12Int()’:
2
Dev.c:487:2: error: __bis_status_register_on_exit invalid outside of function with interrupt attribute

Hat jemand eine Idee, weshalb das so auftritt?

Viele Grüße

Marvin
Gast #4178741
Lesenswert?
• ▲
▼
Kleines addendum, nach dem Präprozessor:
1
# 486 "Dev.c"
2
static void Adc12Int()
3
{
4
 __bis_status_register_on_exit(((0x0080)+(0x0040)+(0x0020)+(0x0010)));;
5
 ADC12IFG = 0;
6
}

Offenbar wird das interrupt-attribut tatsächlich ignoriert.
Gast #4179543
Lesenswert?
• ▲
▼
Also, zuerst mal verstehen
http://mspgcc.sourceforge.net/manual/x918.html

dann Fehler beheben

MS schrieb:
> #define __low_power_mode_off_on_exit()
> __bis_status_register_on_exit(LPM4_bits);

low power off geht mit *__bic...* und nicht mit *__bis...*

und wie funktionierts

Vor Eintritt in die ISR wird das PSW auf dem Stack gesichert. Mit der 
__bic... Funktion wird das PSW auf dem Stack modifiziert. Mit dem Reti 
wird das PSW mit dem Wert vom Stack restauriert.
Wird __bic... ausserhalb der ISR aufgerufen, modifiziert man das PSW 
direkt.

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.