Guten Abend,
Sitze jetzt schon ein paar Stunden an diesem (eigentlich) simplen Code
aber verstehe nicht was falsch ist. Um ein Gefühl für den für mich neuen
Controller und die IDE etc zu bekommen wollte ich zwei LEDs auf dem TI
Launchpad blinken lassen.
Hier erstmal mein Code:
1 | #include "msp430g2211.h"
|
2 |
|
3 | volatile unsigned char flag = 0;
|
4 |
|
5 | void main( void )
|
6 | {
|
7 | // Stop watchdog timer to prevent time out reset
|
8 | WDTCTL = WDTPW + WDTHOLD;
|
9 |
|
10 | // Port1 Ausgang
|
11 | P1DIR = 0xFF;
|
12 |
|
13 | // Interrups global aktivieren
|
14 | __enable_interrupt();
|
15 |
|
16 | // Timer einstellen
|
17 | TACTL |= TASSEL1; // Clock Source SMCLK
|
18 | TACTL |= ID1 | ID0; // Divider 8
|
19 | TACTL |= TAIE; // Interrupt aktivieren
|
20 | TACCR0 = 0xF424; // Bis hierhin zählt der Counter (100 Hz ~ 0x04E2, 2Hz ~ F424)
|
21 |
|
22 | TACCTL0 &= ~CAP; // Compare Mode
|
23 | TACCTL0 |= CCIE; // Compare Interrupt aktivieren
|
24 | TACTL |= MC0; // Modus: Up -> Ab hier läuft der Counter
|
25 |
|
26 | P1OUT = 0; // LEDs aus
|
27 |
|
28 | while(1)
|
29 | {
|
30 | if (flag == 1)
|
31 | {
|
32 | P1OUT ^= BIT6;
|
33 | flag = 0;
|
34 | }
|
35 | }
|
36 | }
|
37 |
|
38 | #pragma vector = TIMERA0_VECTOR
|
39 | __interrupt void TIMERA0_ISR(void)
|
40 | {
|
41 | P1OUT ^= BIT0;
|
42 | flag = 1;
|
43 | }
|
Eine LED wird direkt in der ISR getoggelt, die andere sollte über das
Setzen des flags in der Hauptschleife getoggelt werden. Ja, sollte, denn
das funktioniert nicht. Die LED an P1.0 toggelt fröhlich vor sich hin,
die an P1.6 macht nichts.
Wenn ich in die ISR allerdings einen Breakpoint mache, toggelt auch die
andere LED. Das wiederum jedoch nur, wenn ich nach Erreichen des
Breakpoints mit Einzelschritten weitermache. Wenn ich einfach immer
wieder auf "Go" klicke toggelt nur P1.0...
Jemand ne Ahnung was da schief läuft? Achja, als IDE verwende ich IAR
Kickstart.
Was ich auch noch komisch finde, wenn ich auf "Stop Debugging" klicke,
hört ich die eine LED auf zu toggeln, sollte das Programm nicht auch
nach dem Ende des Debuggens weiterlaufen?