Forum: Mikrocontroller und Digitale Elektronik MSP430 und Timer_A


von Jürgen (Gast)


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

von Tippgeber (Gast)


Lesenswert?

Für die Simulation musst du auch den Interruptsimulator konfigurieren.
Das geht nicht automatisch.

Siehe "Using the interrupt simulation system"...

von Jürgen (Gast)


Lesenswert?

Jo, Danke für den Hinweis. Daran liegt es aber leider nicht... Der 
Interruptsimulator ist bereits konfiguriert...

von Christian R. (supachris)


Lesenswert?

Kann nicht klappen, dein Timer arbeitet im Stop-Modus. Du musst noch 
MC_2 zum Beispiel im TACTL Register setzen. Ohne sind beide MC Bits 0, 
und das ist Stop-Modus.

von Christian R. (supachris)


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 */

von Jürgen (Gast)


Lesenswert?

Danke für die zahlreichen Antworten und Hilfen! Werde es später gleich 
mal ausprobieren!

Grüße,
Jürgen

von Susanne (Gast)


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.

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.