msp430f5529 Timer-ISR wird nicht aufgerufen

Gast #6172664
Hallo
folgender Code funktioniert nicht (vgl. 
Beitrag "Rote LED an Port 1.0 will nicht")
1
 
2
#include "msp430f5529.h"            // Einbinden der Definitionen
3
#define  LED_X     0x01     // LED (rot) an P1.0
4

5

6

7
int main( void )
8
{
9
   WDTCTL = WDTPW + WDTHOLD;   // WatchDogTimer abschalten
10
   
11
 // -- INIT_Port1
12
  P1SEL &= ~(LED_X);            // Beide sind BIN-IO       
13
  P1DIR |= LED_X;               // LED    = BIN-OUT
14
  P1OUT &=~ (LED_X);            // LED_X = AUS (weil H-aktiv)
15
  
16
  
17
  
18
 //-- TimerB0
19

20
  TB0CTL = TBCLR;
21
  TB0CTL = TBSSEL_2 + ID_0 + MC_1;
22
  TB0CCR0 = 1048;  // entspricht 1000 Hz, Freq [18]
23
  TB0CCR2 = 2096;  // entspricht 2*10^-3 s, also CCR0/2 (Pulsbreite halb so groß wie Freq)
24
  TB0CCTL2 = OUTMOD_7;
25
 // TB0CCTL0 = CLLD_1;          // Änderung der Frequenz wird erst übernommen, wenn 
26
                            // CCR0 erreicht ist
27
 // TB0CCTL2 = CLLD_1;
28
_BIS_SR(GIE);
29
  while(1) {_NOP();} 
30
}
31

32

33
#pragma vector = TIMER0_B0_VECTOR
34
__interrupt void TB0_ISR ()
35
{
36
 P1OUT ^= (LED_X);
37
}
38

39

40
#pragma vector = TIMER0_B1_VECTOR
41
 __interrupt void TIMERB0_1_ISR ()
42
{
43
  switch (TB0IV)
44
  {
45
  case TB0IV_TBCCR2:       // TB0CCR2, da LED nur so lange wie PBreite [i] andauert leuchten soll
46
    {
47
      P1OUT ^= (LED_X);
48
      break;
49
    } 
50
  }
51
}





Die LED geht problemlos außerhalb der ISR an.

Grüße
Gast #6172751
Ich kann die Verstrickung der beiden ISR im Moment nicht nachvollziehen,
liegt aber auch daran, dass ich Zweck und Hintergrundinfos nicht habe.

Commer schrieb:
> TB0CTL = TBSSEL_2 + ID_0 + MC_1;
Z.B. kann ich dies nicht auflösen.

Grundsätzliche Frage:
Beide ISR schalten ja die Led "um".
Kann es sein, dass die Feuerbedingungen der beiden ISR so ungünstig 
sind,
dass die LED zwar an geht, aber SO SCHNELL wieder aus, dass Du es nicht 
sehen kannst?

Probiere doch die beiden ISR mal EINZELN aus, auch bei schneller 
Feuerrate kannst Du dann Flimmern sehen oder messen und daran ermitteln 
ob die ISR überhaupt auslösen.
Gast #6172774
Dir ist schon klar, dass

... = ... + ...

etwas anderes ist als

... = ... +| ...

Im ersten Fall uberschreibst du den Wert, im zweiten Fall veroderst du. 
Ich denke, du willst verodern.
Gast #6173215
Herman Kokoschka schrieb:
> Probiere doch die beiden ISR mal EINZELN aus, auch bei schneller
> Feuerrate kannst Du dann Flimmern sehen oder messen und daran ermitteln
> ob die ISR überhaupt auslösen.

guter Gedanke, auch das habe ich schon probiert. Bei beiden (jeweils 
einzeln getestet) leuchtet sie nicht
Gast #6173218
Der müde Joe schrieb:
> Dir ist schon klar, dass
>
> ... = ... + ...
>
> etwas anderes ist als
>
> ... = ... +| ...
>
> Im ersten Fall uberschreibst du den Wert, im zweiten Fall veroderst du.
> Ich denke, du willst verodern.

absoluter bullshit. bei der initialisierung ist + oder | gleichbedeutend
#6173793
Commer schrieb:
> TB0CTL = TBSSEL_2 + ID_0 + MC_1;

Magische Zahlen erschweren das Verständnis. Bitte benutze:
1
TB0CTL = TBSSEL__SMCLK + UD__1 + MC__UP;

> TB0CCR0 = 1048;
> TB0CCR2 = 2096;
> TB0CCTL2 = OUTMOD_7;

Der Interrupt für CCR2 wird genau dann ausgeführt, wenn CCIE in CCTL2 
gesetzt ist (was nicht der Fall ist) und wenn der Timer 2096 erreicht 
(was nie passiert, weil der Timer im Up-Modus nur bis CCR0 zählt).
Gast #6173920
Ich hab mit der Addition ein Verständnisproblem :
 TB0CTL = TBSSEL_2 + ID_0 + MC_1;

Müsste den die Zeile nicht  so aussehen?
 TB0CTL = ( TBSSEL_2 | ID_0 | MC_1 );

Es sollen doch nur die entsprechenden Bits gesetzt werden in TB0CTL.

Bei der Addtion könnte es in die Hose gehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 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.