MSP4302553 Timer Interrupt

Gast #3795668
Hallo
Ich verzweifle gerade daran per Timer und Interrupt eine LED zu 
toggeln... eigentlich sollte das ja kein Problem darstellen aber der 
macht das einfach nicht. Der springt einmal in die Interruptrutine und 
macht die led an. aber dann bleibt die an...

•
1
 #include "msp430g2553.h"
2

3
void main(void)
4
{
5
  WDTCTL = WDTPW + WDTHOLD;     // Stop WDT
6
  DCOCTL = CALDCO_1MHZ;                           // 1MHz
7
  TACTL = TASSEL_2 + MC_1 + ID_3+ TAIE;           // SMCLK/8, upmode
8
  CCR0 =  10000;                     // 12.5 Hz
9
  P1OUT &= 0x00;               // Shut down everything
10
  P1DIR &= 0x00;
11
  P1DIR |= BIT0;             // P1.0 and P1.6 pins output the rest are input
12
P1OUT=0x00;
13

14

15
  __bis_SR_register(LPM0_bits + GIE);
16

17
}
18

19
// Timer A0 interrupt service routine
20
#pragma vector=TIMER0_A1_VECTOR
21
__interrupt void Timer_A(void)
22
{
23
   P1OUT ^= BIT0;// Toggle P1.0
24

25

26
}

Ich weiß gerade einfach nicht weiter... MC_1 ist der upmode sprich der 
sollte bis CCR0=(10000) zählen und dann kommt das Interrupt. Sprich xor 
P1.0. Dann sollte er von selber wieder von 0 an hoch zählen bis der 
nächste interrupt ausgelöst wird.

kann mir bitte einer nen Tip geben, was an meinem code falsch ist.
Persönliche Seite
Vergleiche doch einfach mit den Codebeispielen, die TI veröffentlicht 
hat.

Die zeigen eigentlich für jedes Peripherieelement, wie es anzusteuern 
sind, und dazu gehört natürlich auch der Timer.

knautschi schrieb:
> P1OUT &= 0x00;               // Shut down everything
>   P1DIR &= 0x00;
>   P1DIR |= BIT0;             // P1.0 and P1.6 pins output the rest are
> input

Hast Du Dir angesehen, welchen Wert diese Register beim POR haben?

Und, nur mal so nebenbei gefragt:

Unterscheiden sich diese beiden Zeilen?

> a &= 0x00;

und

> a = 0x00;
Gast
Hallo

ähm ich weiß dass ich nicht ganz sauber kommentiert habe. sind 
angepasste standardbeispiele. Das wichtige ist dass

>   P1DIR |= BIT0;
bedeutet das Bit0 auf Output gestellt ist damit die LED auch angesteuert 
werden kann.

und stimmt weiß auch nicht warum ich da ein & drin hab.

Jedenfalls hab ich die vorlage die im CC drin sind durchgesehen, find 
aber meinen fehler immernoch nicht :(
Gast
Max M. schrieb:
> Der interrupt wird bei dir nur ein mal ausgeführt.
> Du brauchst ne endlosschleife in main.

mh wenn ich nach
>__bis_SR_register(LPM0_bits + GIE);

ne
1
while(1){}

schleife setze geht die led immernoch an und blinkt nicht :(
Gast
mhh wird in den dokus zwar nirgens beschriben aber muss man, auch wenn 
ich mir das nicht vorstellen kann, das interruptflag löschen damit der 
wieder reagiert wie bei einem Port Interupt??
Gast
Max M. schrieb:
> TACCTL0 = CCIE;      // Enable interrupts for CCR0

wenn ich den aktiviere gehts garnicht mehr. Das ist glaube ich ja auch 
der interrupt, welcher kommt wenn der timer bis overflow 0xffff (oda so) 
zählt. dadurch dass ccr0 schon früher kommt, kommt der nie oder?
Dafür ist ja TACTL = TAIE+... gesetzt
Probier mal TACCR0 zu benutzen statt CCR0

TACCR0 = 10000;  // 10000 Periode
TACCTL0 = CCIE;      // Enable interrupts for CCR0.
TACTL = TASSEL_2 + ID_3 + MC_1 + TAIE;


und dann statt

#pragma vector=TIMER0_A1_VECTOR

das dieses pragma für deine ISR:

#pragma vector = TIMERA0_VECTOR

es sei denn du hast schon so ein define irgendwo:

#define TIMER0_A0_VECTOR TIMERA0_VECTOR

Gast
hab gelesen dass für den MSP430g2553

#pragma vector=TIMER0_A1_VECTOR
geschrieben werden muss. lass ich das A1 weg bekomm ich neben der Zeile 
ein gelbes ! im dreieck und die led geht auch nicht mehr an. aber auch 
mit den anderen änderungen geht die led nur an ...

Antwort schreiben

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