Forum: Mikrocontroller und Digitale Elektronik MSP430 Timer Overflow Interrupt


von Paul der Noob (Gast)


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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.