MSP430 - Watchdog Timer
- Watchdog / "Wachhund" Timer: Komponenten zur Überwachung der Funktion andere Systemkomponenten
- Im Fehlerfall kann ein Interrupt oder ein System-Reset durchgeführt werden.
- WDT des MSP430 kann im Intervall-Modus als kontinuierlicher Timer verwendet werden.
Watchdog-Modus
Watchdog-Timer im Watchdog-Modus (5_2a_watchdog)
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR |= BIT0;
P1OUT |= BIT0;
__delay_cycles(100000L);
P1OUT &= ~BIT0;
P2IES |= BIT0;
P2IFG &= ~BIT0;
P2IE |= BIT0;
WDTCTL = WDTPW + WDTCNTCL + WDTSSEL;
__enable_interrupt();
while (1) {
__low_power_mode_3();
}
}
#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR() {
if (P2IFG & BIT0) {
P2IFG &= ~BIT0;
WDTCTL = WDTPW + WDTCNTCL + WDTSSEL;
}
}
Intervall-Modus
- kontinuierlich ausgeführter Interrupt
- Interrupt-Enable:
Watchdog-Timer im Intervall-Modus (5_2b_watchdog_interval)
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR |= BIT0;
P1OUT &= ~BIT0;
WDTCTL = WDTPW + WDTTMSEL + WDTCNTCL + WDTSSEL;
IE1 |= WDTIE;
__enable_interrupt();
while (1) {
__low_power_mode_3();
}
}
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR() {
P1OUT ^= BIT0;
}
Watchdog Timer Interval Select
WDTISx | Divider | Interval @ACLK=32.768 kHz | Interval @SMCLK=1 MHz |
---|---|---|---|
00 | /32768 | 1000 ms | 32.768 ms |
01 | /8192 | 250 ms | 8.192 ms |
10 | /512 | 15.625 ms | 512 µs |
11 | / 64 | ≈ 1.95 ms | 64 µs |
Aufgabe
Veränderen Sie das Programm von oben so, dass die LED mit einer Frequenz von 1 Hz blinkt.