MSP430: Interrupts und __bis_status_register_on_exit

Gast #4178735
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
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 #4179075
Rufus Τ. F. schrieb:
> Da stimmt was nicht. ADC12Int ./. Adc12Int
>
> Irgendwo in Deinem Code eine Doublette?
Danke - aber schön wärs. Das zweite posting kam nur von einem Test, wo 
ich ISR manuell aufgelöst hatte um das attribut direkt anzufügen. Dabei 
hatte ich den ISR aus versehen umbenannt.
Gast #4179543
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

Eine eigene Frage? Dieser Thread ist über 11 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.