mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Real Time Clock Interrupt


Autor: RizzoRat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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....)

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:
void main( void )
{  
    WDTCTL = WDTPW + WDTHOLD;             // Stop WDT

    //andere initialisierung routinen

    setTime(0x12, 0, 0, 0);           // Timer intitialisieren
    CCR0 = 32768-1;
    TACTL = TASSEL_1+MC_1;
    CCTL0 |= CCIE;


    _EINT();                          // Enable interrupts

Die ISR für den Timer sieht so aus:
//Timer ISR
#pragma vector=TIMERA0_VECTOR
__interrupt void TIMER_A (void)
{
  incrementSeconds();
  Intervall_1 = Intervall_1 + 1; //benutze ich zum abfragen des 10sekunden interwalls
}



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....

void Run_Sequenz(void)
{
  

  Intervall_1 = 0;
  
    while(1)
    {

      if (Intervall_1 == 10)
      {
        //datensatz an UART senden und Intevall_1 wirder auf 0 setzen um wieder 10 sekunden zu warten
      }
      if(2. bedingung)
      {
        befehle;
      }   
    }
}


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.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängst Du vielleicht im UART Interrupt fest? Mal gucken, ob im IRQ das 
entsprechende Flag rückgesetzt wird nach der Abarbeitung...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du die Funktion "Run_Sequenz()" aus Deiner UART-ISR heraus 
ausrufst, dann ist GIE = 0! Der Timer zählt zwar weiter, aber Deine 
Timer-ISR kann nicht mehr aufgerufen werden!
In dem Fall besser in UART-ISR ein Flag setzen und aus'm Hauptprogramm 
"Run_Sequenz()" starten...

Autor: RizzoRat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm,

stimmt, wenn man logisch drüber nachdenkt macht das sinn.

Sprich ich lass im hauprogramm einfach ne schleife laufen, die den Flag 
überwacht......

Okey das probier ich morgen gleich mal aus, thx.

Autor: RizzoRat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jau das war des Problems Lösung. Vielen Dank.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.