Forum: Mikrocontroller und Digitale Elektronik msp430-elf-gcc Interrupts


von Tester T. (darkstar999)


Lesenswert?

Hallo Community,

ich habe mal wieder mein msp430g2 board ausgepackt. Leider musste ich 
feststellen das der mspgcc sich sehr stark verändert(weiterentwickelt) 
hat und meine alten Programme nicht mehr laufen. Hat jemand von euch 
eventuell nen lauffähiges Watchdog Interrupt Beispiel ? Google macht 
mich auch nicht viel schlauer da ich entweder nur den #pragma Code oder 
veralteten mspgcc Code finde. Oder weiß jemand von euch ein Tut für den 
mspgcc das aktuell ist?

von Clemens L. (c_l)


Lesenswert?

Siehe gcc-Dokumentation:
https://gcc.gnu.org/onlinedocs/gcc/MSP430-Function-Attributes.html

Wenn du dir __attribute__((interrupt(WDT_VECTOR))) nicht merken kannst, 
gibt es auch ein hilfreiches Makro __interrupt(WDT_VECTOR) (oder 
__interrupt_vec(WDT_VECTOR) in der neuesten Version der MSP-Header).

Ein Blick in den Beispielcode von TI wäre auch hilfreich gewesen:
1
//******************************************************************************
2
//  MSP430G2xx3 Demo - WDT, Toggle P1.0, Interval Overflow ISR, DCO SMCLK
3
//
4
//  Description: Toggle P1.0 using software timed by the WDT ISR. Toggle rate
5
//  is approximately 30ms based on default DCO/SMCLK clock source
6
//  used in this example for the WDT.
7
//  ACLK = n/a, MCLK = SMCLK = default
8
//
9
//      MSP430G2xx3
10
//             -----------------
11
//         /|\|              XIN|-
12
//          | |                 |
13
//          --|RST          XOUT|-
14
//            |                 |
15
//            |             P1.0|-->LED
16
//
17
//  D. Dang
18
//  Texas Instruments Inc.
19
//  December 2010
20
//   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
21
//******************************************************************************
22
23
#include <msp430.h>
24
25
int main(void)
26
{
27
  WDTCTL = WDT_MDLY_32;                     // Set Watchdog Timer interval to ~30ms
28
  IE1 |= WDTIE;                             // Enable WDT interrupt
29
  P1DIR |= 0x01;                            // Set P1.0 to output direction
30
31
  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0 w/ interrupt
32
}
33
34
// Watchdog Timer interrupt service routine
35
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
36
#pragma vector=WDT_VECTOR
37
__interrupt void watchdog_timer(void)
38
#elif defined(__GNUC__)
39
void __attribute__ ((interrupt(WDT_VECTOR))) watchdog_timer (void)
40
#else
41
#error Compiler not supported!
42
#endif
43
{
44
  P1OUT ^= 0x01;                            // Toggle P1.0 using exclusive-OR
45
}

: Bearbeitet durch User
von Tester T. (darkstar999)


Lesenswert?

Danke für die schnelle Antwort! Öhm bei Ti habe ich nur die reinen 
#pragma Code gefunden 
http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_Interrupt_vs_Polling
hast du vielleicht nen Link zu den Beispielen ?

EDIT:

Allerdings bekomme ich noch eine Fehlermeldung:


> /opt/ti/gcc/bin/msp430-elf-gcc -I /opt/ti/gcc/include -mmcu=msp430g2211 -O2 -g 
-L /opt/ti/gcc/include taster.o -o msp430g2211.out
> /opt/ti/gcc/bin/../lib/gcc/msp430-elf/5.3.0/../../../../msp430-elf/bin/l d: 
msp430g2211.out section `.bss' will not fit in region `RAM'
> /opt/ti/gcc/bin/../lib/gcc/msp430-elf/5.3.0/../../../../msp430-elf/bin/l d: 
region `RAM' overflowed by 20 bytes
> collect2: error: ld returned 1 exit status
> Makefile:14: die Regel für Ziel „all“ scheiterte
> make: *** [all] Fehler 1

EDIT:

Fehler gefunden! Aufgrund dessen das der 2211 128 bytes SRAM besitzt 
muss noch die Option -minrt hinzugefügt werden.

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Tester T. schrieb:
> bei Ti habe ich nur die reinen #pragma Code gefunden
> http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_Interrupt_vs_Polling

*klicke-di-klick*  Komisch, ich sehe da auch gcc-Code ...


Die Beispiele gibt es auf der Seite 
http://www.ti.com/product/msp430g2211 im Tab "Tools & Software".

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
Noch kein Account? Hier anmelden.