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
Für die Simulation musst du auch den Interruptsimulator konfigurieren. Das geht nicht automatisch. Siehe "Using the interrupt simulation system"...
Jo, Danke für den Hinweis. Daran liegt es aber leider nicht... Der Interruptsimulator ist bereits konfiguriert...
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.
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 */ |
Danke für die zahlreichen Antworten und Hilfen! Werde es später gleich mal ausprobieren! Grüße, Jürgen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.