MSP430 Timer Overflow Interrupt

Gast #2783344
Lesenswert?
• ▲
▼
Hallo,
ich möchte mit Mikrocontrollern experimentieren und habe mir deshalb das 
TI Launchpad gekauft.
Für mein neustes Projekt will ich ein PWM Signal erzeugen und ich stell 
mir das so vor:

- Timer A ist im “Continuous Mode”  und der Pin an dem das PWM Signal 
ausgegeben ist low
- wenn der Zähler den Wert von TACCR0 erreicht, wird der Pin high
- wenn der Zähler überläuft, der Timer Overflow Interrupt wird ausgelöst 
und wird der Pin wieder auf low gesetzt

Hier ist der Quellcode von dem was ich bisher geschafft habe. Was noch 
fehlt ist der Timer Overflow Interrupt und da komm ich nicht weiter. 
Kann mir einer helfen und mir sagen wie ich das am besten Programmieren 
kann?

MFG Paul

1
#include <msp430g2553.h>
2

3
#ifndef TIMER0_A1_VECTOR
4
#define TIMER0_A1_VECTOR TIMERA1_VECTOR
5
#define TIMER0_A0_VECTOR TIMERA0_VECTOR
6
#endif
7

8
void FaultRoutine(void);
9
void ConfigWDT(void);
10
void ConfigClocks(void);
11
void ConfigPort1(void);
12
void ConfigTimerA(void);
13

14
void main(void)
15
{
16
  ConfigWDT();
17
  ConfigClocks();
18
  ConfigPort1();
19
  ConfigTimerA();
20

21
  _BIS_SR(GIE);   // global interrupt enable
22

23
  while(1);
24
}
25

26
void FaultRoutine(void)
27
{
28
  P1DIR = BIT0;  // Port 1.0 output (red LED)
29
  P1OUT = BIT0;   // red LED on
30
  while(1);
31
}
32

33
void ConfigWDT(void)
34
{
35
  WDTCTL = WDTPW + WDTHOLD;  // watchdog timer setup
36
}
37

38
void ConfigPort1(void)
39
{
40
  P1DIR = BIT6;   // Port 1.6 output (green LED)
41
  P1OUT = 0;     // LED off
42
}
43

44
void ConfigClocks(void)
45
{
46
  if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
47
  {
48
    FaultRoutine(); // If cal constants erased, run FaultRoutine()
49
  }
50

51
  BCSCTL1 = CALBC1_1MHZ;     // Set range
52
  DCOCTL = CALDCO_1MHZ;     // Set DCO step + modulation
53
  BCSCTL3 |= LFXT1S_2;     // clock system setup
54
  IFG1 &= ~OFIFG;       // Clear OSCFault flag
55
  BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO/8
56
}
57

58
void ConfigTimerA(void)
59
{
60
  CCTL0 = CCIE;
61
  CCR0 = 12000;
62
  TACTL = TASSEL_1 + MC_2;
63
}
64

65
#pragma vector=TIMER0_A0_VECTOR
66
__interrupt void Timer_A (void)
67
{
68
  P1OUT = BIT6;
69
}

Antwort schreiben

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.

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.