mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 und Timer_A


Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tippgeber (Gast)
Datum:

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

Siehe "Using the interrupt simulation system"...

Autor: Jürgen (Gast)
Datum:

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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define TASSEL2             0x0400  /* unused */        /* to distinguish from UART SSELx */
#define TASSEL1             0x0200  /* Timer A clock source select 1 */
#define TASSEL0             0x0100  /* Timer A clock source select 0 */
#define ID1                 0x0080  /* Timer A clock input divider 1 */
#define ID0                 0x0040  /* Timer A clock input divider 0 */
#define MC1                 0x0020  /* Timer A mode control 1 */
#define MC0                 0x0010  /* Timer A mode control 0 */
#define TACLR               0x0004  /* Timer A counter clear */
#define TAIE                0x0002  /* Timer A counter interrupt enable */
#define TAIFG               0x0001  /* Timer A counter interrupt flag */

#define MC_0                (0<<4)  /* Timer A mode control: 0 - Stop */
#define MC_1                (1<<4)  /* Timer A mode control: 1 - Up to CCR0 */
#define MC_2                (2<<4)  /* Timer A mode control: 2 - Continous up */
#define MC_3                (3<<4)  /* Timer A mode control: 3 - Up/Down */
#define ID_0                (0<<6)  /* Timer A input divider: 0 - /1 */
#define ID_1                (1<<6)  /* Timer A input divider: 1 - /2 */
#define ID_2                (2<<6)  /* Timer A input divider: 2 - /4 */
#define ID_3                (3<<6)  /* Timer A input divider: 3 - /8 */
#define TASSEL_0            (0<<8)  /* Timer A clock source select: 0 - TACLK */
#define TASSEL_1            (1<<8)  /* Timer A clock source select: 1 - ACLK  */
#define TASSEL_2            (2<<8)  /* Timer A clock source select: 2 - SMCLK */
#define TASSEL_3            (3<<8)  /* Timer A clock source select: 3 - INCLK */

Autor: Jürgen (Gast)
Datum:

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

Grüße,
Jürgen

Autor: Susanne (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.