Ich verwende einen Interrupt, um den Mikrocontroller zu wecken, sobald der Wert erreicht ist. Ich sehe, dass es im Capture/Compare Control Register ein Capture Overflow-Bit gibt. Ich kann anscheinend kein Beispiel für die Überprüfung dieses Bits finden, sobald der Wert erreicht wurde. Ein Beispiel -Interrupt sah so aus:
#pragma vector = TIMERA0_VECTOR
__interrupt void CCR0_ISR(void) {
if (++i == 120) {
P1OUT ^= RLY1;
i=0;
}
} // CCR0_ISR
Dies überprüft jedoch nicht den Wert des Bits. Wie überprüfe ich also, ob der Timer übergelaufen ist?
Sie sind sich nicht sicher, welche MSP-Serie Sie verwenden, daher müssen Sie die Einzelheiten nachschlagen. Aber die Grundprämisse sollte allgemein gelten, denke ich.
Das folgende Beispiel stammt aus der Datei msp430g2xx1_ta_03.c
in den Codeschnipseln, die aus dem TI-Wiki heruntergeladen werden können :
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P1OUT ^= 0x01; // overflow
break;
}
}
Der Schlüssel überprüft das TAIV
Register, um zu sehen, was den Interrupt verursacht hat. Werfen Sie einen Blick auf Seite 416 des Benutzerhandbuchs der CC430-Familie :
Jetzt sucht das Codebeispiel nach einem Wert von 10
im TAIV
Register und das Benutzerhandbuch gibt an, dass dies 0x0E
der Überlauf ist. Überprüfen Sie also erneut die Dokumentation Ihres spezifischen Chips. Aber das TAIV
Register sagt Ihnen, was die Ursache des Interrupts ist.
Es gibt 2 Unterbrechungsquellen für Timer A
#pragma vector = TIMERA0_VECTOR
#pragma vector = TIMERA1_VECTOR
Die von Ihnen gesuchte Interrupt-Routine wird ausgeführt, wenn der Timer überläuft und nicht, wenn das Vergleichsregister mit TAR übereinstimmt. Sie sollten die TAIV-Registrierung verwenden
#pragma vector = TIMERA1_VECTOR
__interrupt void CCR0_ISR(void)
{
//check TAIV for compare/capture interrupt
}
user_1818839
Blattansch