MSP430 und Timer_A

Gast #584751
Lesenswert?

Hallo an Alle,

da ich ziemlich neu im Gebiet der Mikrocontroller bin, wollte ich mit 
einfachem Beispiel starten: Ich wollte einen Timer, der immer nach einem 
bestimmten Zeitintervall einen Interrupt auslöst, programmieren. Hierzu 
wollte ich den auf dem MSP430 vorhandenen Timer_A0 benutzen. Als Clock 
für den Timer sollte der ACLK mit 32,768kHz dienen. Soweit mein 
Vorhaben. Mein Problem besteht nun darin, dass mein Quellcode/Timer im 
Debug-Modus (Simulation) leider keinen Interrupt auslöst und somit auch 
nicht die entsprechende Interrupt Service Routine aufruft. Auch wenn ich 
im Debug-Modus einen Timer per Debug auslöse, reagiert der Code nicht 
darauf :( Nachfolgend mein Code:

#include "msp430x12x2.h"

void main(void)
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

  // Basic clock
  BCSCTL1 = XT2OFF;
  BCSCTL2 = SELM0 + SELM1 + SELS;

  // TimerA
  TACTL = TASSEL0 + TAIE;
  TACCTL0 = OUTMOD_4 + CCIE;
  CCR0 = 0x0F00;
  TACTL |= MC1;

  __enable_interrupt();

  for (;;)
  {
    //__low_power_mode_0();
    //__no_operation();
  }
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
  CCR0 += 0x0F00;
}


Für Hilfe wäre ich dankbar!
Grüße, Jürgen
#585017
Lesenswert?

Moment....

TASSEL_1 != TASSEL1

Die mit _ sind gleich die passend zurecht geschobenen, die ohne die 
reinen Bits, somit ist in diesem Fall TASSEL_1 das gleiche wie TASSEL1. 
Also beides ACLK.

Auszug aus dem Header-File:
1
#define TASSEL2             0x0400  /* unused */        /* to distinguish from UART SSELx */
2
#define TASSEL1             0x0200  /* Timer A clock source select 1 */
3
#define TASSEL0             0x0100  /* Timer A clock source select 0 */
4
#define ID1                 0x0080  /* Timer A clock input divider 1 */
5
#define ID0                 0x0040  /* Timer A clock input divider 0 */
6
#define MC1                 0x0020  /* Timer A mode control 1 */
7
#define MC0                 0x0010  /* Timer A mode control 0 */
8
#define TACLR               0x0004  /* Timer A counter clear */
9
#define TAIE                0x0002  /* Timer A counter interrupt enable */
10
#define TAIFG               0x0001  /* Timer A counter interrupt flag */
11

12
#define MC_0                (0<<4)  /* Timer A mode control: 0 - Stop */
13
#define MC_1                (1<<4)  /* Timer A mode control: 1 - Up to CCR0 */
14
#define MC_2                (2<<4)  /* Timer A mode control: 2 - Continous up */
15
#define MC_3                (3<<4)  /* Timer A mode control: 3 - Up/Down */
16
#define ID_0                (0<<6)  /* Timer A input divider: 0 - /1 */
17
#define ID_1                (1<<6)  /* Timer A input divider: 1 - /2 */
18
#define ID_2                (2<<6)  /* Timer A input divider: 2 - /4 */
19
#define ID_3                (3<<6)  /* Timer A input divider: 3 - /8 */
20
#define TASSEL_0            (0<<8)  /* Timer A clock source select: 0 - TACLK */
21
#define TASSEL_1            (1<<8)  /* Timer A clock source select: 1 - ACLK  */
22
#define TASSEL_2            (2<<8)  /* Timer A clock source select: 2 - SMCLK */
23
#define TASSEL_3            (3<<8)  /* Timer A clock source select: 3 - INCLK */
Gast #586818
Lesenswert?

Hallo Forum,

wer kann mir helfen? Ich muss mit einem MSF430F1232 einen Frequenzzähler 
bauen und dort den Capture-Eingang verwenden. Die Frequenz soll in einem 
100ms Zeitfenster gezählt werden - aber über Capture. Die maximale 
Eingangsfrequenz ist ca. 130kHz, die Auflösung soll aber 1Hz betragen.

Wer kann mir weiterhelfen?

Danke im Voraus,
Susi.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren