Hallo, ich habe ein sehr seltsames Problem mit dem msp430f5137. Ich versuche etwas ähnliches wie hier: Beitrag "MSP430 Interrupts zählen (Herzfrequenz)" zu realisieren mein code:
1 | unsigned int interruptCounter = 0; |
2 | volatile unsigned int cycles = 2; |
3 | |
4 | void Device_MSP430F5137_InitClock(int period){ |
5 | TA0CTL = 0x0004; // Timer1_A3 clear. |
6 | TA0CCTL0 = CCIE; // Timer1_A3 Capture/compare 0 interrupt enable. |
7 | TA0CCR0 = period; // Set TACCR0 value (8Hz//3d09) (1Hz 0x07A1) |
8 | TA0CTL = TASSEL_1 + MC_1 + ID_3; // Selected: ACLK, divider:8, Up mode. |
9 | }
|
10 | |
11 | void Device_MSP430F5137_Go_To_Sleep(){ |
12 | Device_MSP430F5137_InitClock(0x3d09); |
13 | LED_CLR(1); |
14 | _BIS_SR(LPM3_bits + GIE); |
15 | }
|
16 | |
17 | void set_Cycles(volatile unsigned int seconds){ |
18 | cycles = seconds; |
19 | }
|
20 | |
21 | void delay(volatile unsigned int i) { // volatile prevents unused loop to be pruned by optimizations |
22 | while (i--); |
23 | }
|
24 | |
25 | void main(void) { |
26 | _BIC_SR(GIE); |
27 | WDTCTL = WDTPW + WDTHOLD; |
28 | Device_MSP430F5137_InitClock(0x2EE0); |
29 | /**
|
30 | some led init stuff
|
31 | **/
|
32 | _BIS_SR(GIE); |
33 | _BIS_SR(LPM3_bits + GIE); |
34 | for(;;){ |
35 | set_Cycles(20); |
36 | Device_MSP430F5137_Go_To_Sleep(); |
37 | }
|
38 | |
39 | }
|
40 | |
41 | #pragma vector=TIMER0_A0_VECTOR
|
42 | __interrupt void TimerA0_interrupt(void){ |
43 | interruptCounter++; |
44 | if(interruptCounter==cycles){ |
45 | interruptCounter=0; |
46 | _BIC_SR(LPM3_EXIT); |
47 | LED_SET(1); |
48 | }
|
49 | }
|
So jetzt zum Problem ;) Wenn ich das ganze über mein launchpad debugge funktioniert es wie gewollt. Wenn ich den mController aber mit externer stromversorgung(usb ohne debug) starte übernimmt er die set_Cycles(20); nicht. hat jemand eine Idee woran das liegen könnte? Liebe Grüße Lukas