Taster-Interrupt-Problem

Gast #1010407
Hallo Leute! Kann mir jemand helfen.
Ich arbeite mit dem MSP430F2012.

Ich lasse den uC solange schlafen bis ich den Taster drücke, danach geht 
er in die ISR des Ports. In der ISR wird ein Programm aufgerufen, 
welches ein PWM-Signal erzeugt. Der Timer, der das PWM erzeugt, löst 
auch ein Interrupt aus, wenn er überläuft.

Ich habe folgendes Problem. Da er sich in der ISR des Ports befindet, 
geht er nicht in die ISR des Timers rein. Wenn er aber mit der ISR des 
Ports fertig ist, geht er wieder schlafen. Ich habe nachgesehen, dass 
die Priorität des Port-Interruptes größer ist als des Timers. Liegt das 
Problem daran?

Wie kann ich das Problem lösen?
Gast #1010434
Ich lösche die Flag. Das Codeteil sieht so aus:

__interrupt void taster (void);
PORT1_ISR (taster)
__interrupt void taster (void)
{
  if (P1IFG & BIT1)
  {
    P1IFG &= 0x00;
    adc_init();
    pwm_init(50);

    do
    {
      adc();
      pwm();
    }
    while (flag == 0);

  }
}

und wenn der Timer überläuft, soll er diese ISR ausführen:

__interrupt void Timer_A (void);
TIMERA0_ISR (Timer_A)
__interrupt void Timer_A (void)
{
  if (zeit > 0)
  {
    zeit--;
  }

  else
  {
    flag = 1;

  }
}

und das macht er nicht.
Gast #1010470
>und das macht er nicht.
Kann er auch nicht. Er bleibt bei
1
while (flag == 0);
hängen. Dadurch kommt er auch nicht aus der Port-ISR in die Timer-ISR. 
Versuch es doch mal, die do/while Schleife ins main zu verlagern. D.h. 
diese z.B. mit flag = 0 in der Port-ISR freigeben und dann, wie gehabt, 
durch den Timer A mit flag = 1 ausschalten.
#1010478
Wenn du das schon so machen willst, musst du natürlich in der Taster-ISR 
den gloablen Interrupt wieder freigeben. Ist aber wie gesagt nicht 
sinnvoll. Mach das in der Main, und hol den µC in der Taster ISR nur aus 
dem Sleep raus:
1
_BIC_SR_IRQ(LPM3_bits);

Je nachdem, welchen LPM du hast, musst du das natürlich anpassen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.