Hallo zusammen
ich programmiere gerade mein ersten richtig großes Projekt und habe
folgendes Problem.
Ich benutze den Msp430F1611 und programmiere in C mit IAR Workbench
Ich will die RTC (Real Time Clock) Library von TI fürs Timinung benutzen
(http://focus.ti.com/general/docs/techdocsabstract.tsp?abstractName=slaa290)
Ich hab die eingebunden und mich für die Variante mit der eignene ISR
entschieden.
Mein Problem ist jetzt folgendes.
Ist mein MSP im Ruhezustand, zählt der Timer schön brav hoch und tut was
er soll, zählen. Ich hab mir die Variablen in IAR im debug modus
anzeigen lassen, das funzt wunderbar.
Werden jetzt allerdings Daten an meinen MSP übertragen lößt nach ende
der DAtenübertragung die ISR des UART1 eine Fuktion names Sequenz aus.
In dieser Funktion soll 10sekunden ein DAtensatz generiert werden und an
den PC geschickt werden und nach einer Variablenzeit >>>10sekunden zum
nächsten DAtensatz gesprungen werden.
Problem ist, sobald ich in die Funktion springe, hört der Timer auf zu
zählen......und ich kapier ned wieso, ich gebe dazu nicht die anweisung:
So initialisiere ich den Timer, das scheint zu funktionieren:
1 | void main( void )
|
2 | {
|
3 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT
|
4 |
|
5 | //andere initialisierung routinen
|
6 |
|
7 | setTime(0x12, 0, 0, 0); // Timer intitialisieren
|
8 | CCR0 = 32768-1;
|
9 | TACTL = TASSEL_1+MC_1;
|
10 | CCTL0 |= CCIE;
|
11 |
|
12 |
|
13 | _EINT(); // Enable interrupts
|
Die ISR für den Timer sieht so aus:
1 | //Timer ISR
|
2 | #pragma vector=TIMERA0_VECTOR
|
3 | __interrupt void TIMER_A (void)
|
4 | {
|
5 | incrementSeconds();
|
6 | Intervall_1 = Intervall_1 + 1; //benutze ich zum abfragen des 10sekunden interwalls
|
7 | }
|
So ist der msp im Wartezustand funzt der timer tadellos, wird jetzt
allerdings in eine Funktion gesprungen, die durch den UART Interrupt
ausgelößt wird geht nix mehr....
1 | void Run_Sequenz(void)
|
2 | {
|
3 |
|
4 |
|
5 | Intervall_1 = 0;
|
6 |
|
7 | while(1)
|
8 | {
|
9 |
|
10 | if (Intervall_1 == 10)
|
11 | {
|
12 | //datensatz an UART senden und Intevall_1 wirder auf 0 setzen um wieder 10 sekunden zu warten
|
13 | }
|
14 | if(2. bedingung)
|
15 | {
|
16 | befehle;
|
17 | }
|
18 | }
|
19 | }
|
Was er macht ist das er meinen Intervall_1 zähler auf 0 zurücksetzt
(weil die Daten ja nicht kommen, sobald ich den msp einschalte), danach
geht aber nix mehr, weil der timer nicht mehr zählt.
Warum? Ich sitz hier seit 3h und schnall ned.