MSP 430
Erklärung
Allgemein
Clock
Master clock (MCLK)
Wird von der CPU und einzelnen Peripherie genutzt
Subsystem master clock (SMCLK)
Für die Peripherie
Auxiliary clock (ACLK)
Normalerweise laufen SMCLK und MCLK mit der gleichen Frequenz (Megahertz-Bereich). Der ACLK läuft auf einer niedrigeren Frequenz (12KHz)
digitally controlled oscillator (DCO)
MCLK und SMCLK werden von dem DCO gespeisst. Der DCO läuft beim MSP403 mit 1.1 MHz
Es sind drei kallebrierte Frequenzen verfügbar: 1, 8, 12 und 16 MHz. Um diese umzustellen müssen nur die Bits im Register gesetzt werden.
Folgender Code setzt den DCO auf 1MHz:
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step and modulation
http://homepages.ius.edu/RWISMAN/C335/HTML/msp43024.jpg
Quelle: http://homepages.ius.edu/RWISMAN/C335/HTML/msp430Timer.HTM
Status Register
Im status register werden die Zustände und controll bits gehalten. Das SR besteht aus einem 16-bit Register
General interrupt enable (GIE)
Interrupts (maskable) können erst verwendet und eingesetzt werden wenn dieses Bit gesetzt ist.
Der GIE liegt auf dem 3. bit des SR
Low Power Mode (LPM)
Da Timer unabhängig von der CPU laufen können ist es möglich die CPU auszuschalten. Diese wird durch den Interrupt wieder geweckt
Code Beispiel
GIE aktivieren und Low Power Mode verwenden:
_BIS_SR(LPM0_bits + GIE);
P1DIR
P1DIR
ist ein 8-Bit Register- Gibt die Richtung (
dir
) des Port Pins als Input oder Output an P1DIR = <PIN7><PIN6><PIN5><PIN4><PIN3><PIN2><PIN1><PIN0>
- Grüne LED = Port 1, Pin 0 (
P1.0
) - Rote LED = Port 1, Pin 6 (
P1.6
)
Timer
Timer sind fundamentale Counter die vom Clock Signal angetrieben werden. Der Counter wird mit jedem Clock Signal in- oder decrementiert.
Wenn der Counter einen gewissen Wert erreicht hat kann ein interrupt generiert werden - Timer A interrupt flag
(TAIFG).
Bsp: Wenn die Clock mit FFFFh Hz pulst und das Counter Limit bei FFFFh liegt so wird jede Sekunde ein Interrupt ausgelöst.
16 bit Timer continuous mode von 0 bis FFFFh:
http://homepages.ius.edu/RWISMAN/C335/HTML/msp43028.png
Bestandteile eines Timers
- clock input
- tickt in einer gewissen Frequenz
- Counter
*zählt die clock ticks - Interrupt Prozedur
- wird aufgerufen wenn das Limit erreicht ist
Timer_A control register (TACTL)
TASSEL
= 01 in bits 9-8 wählt A0 source clock
als ACLK
12KHz.
MC_1 = 01
in bit 5-4, definiert den count modus. Zählt hoch bis zu dem Wert der in TA0CCR0
hinterlegt ist und generiert ein Interrupt (wenn dieser aktiviert ist)
http://homepages.ius.edu/RWISMAN/C335/HTML/msp43030.png
Counter
TA0CCTL0
- Kontrollregister für den Counter 0 des Timers A0. Interrupts werden aktiviert wenn das 4. bit gesetzt wird.
TA0CCR0
- hält den 16-bit Zählwert
- Bsp: Wenn die ACLK-Clock(12KHz) verwendet wird und jede Sekunde geblinkt werden soll so muss der interrupt bei 12000 ausgelöst werden
- Wenn Counter im UP-Modus auto reset auf 0 wenn limit erreicht wurde
Quelle: http://homepages.ius.edu/RWISMAN/C335/HTML/msp430Timer.HTM
Verwendung der Timer
- Generierte periodische events
- periodischer wake up vom sleep mode
- ersetzen delay-loops
capture und compare Blöcke
- jeder Timer besitzt unabhängige capture und compare Blöcke
- werden für Zeit- und Pulse Width Modulator (PWM) verwendet
Timer_A control register (TACTL) - Details
Timer_A clock source (TASSELx) - Bit: 9-8
TASSEL1 TASSEL0 = 00 => TACLK
TASSEL1 TASSEL0 = 01 => ACLK
TASSEL1 TASSEL0 = 10 => SMCLK
TASSEL1 TASSEL0 = 11 => INCLK
Clock signal divider (IDx) - Bit: 7-6
ID1 ID0 = 00 => /1
ID1 ID0 = 01 => /2
ID1 ID0 = 10 => /4
ID1 ID0 = 11 => /8
Clock timer operating mode (MCx) - Bit: 5-4
MC1 MC0 = 00 => Stop mode
MC1 MC0 = 01 => Up mode
MC1 MC0 = 10 => Continuous mode
MC1 MC0 = 11 => Up/down mode
Timer_A clear (TACLR) - Bit: 2
- clear wenn
TACLR = 1
- clear wenn
Timer_A interrupt enable (TAIE) - Bit: 1
- ist aktiviert wenn
TAIE = 1
- ist aktiviert wenn
Timer_A interrupt flag (TAIFG) - Bit: 0
- interrupt wird ausgeführt wenn
TAIFG = 1
(und wennTAIE
enabled)
- interrupt wird ausgeführt wenn
Basic Timer 1 module
- besitzt zwei unabhängige Counter
Verwendung des Basic Timer 1 module
- clock für LCD
RTC
Implementierungen- Intervall Timer
- einfache Interrupts
Basic Timer Counter 1 (BTCNT1) und 2 (BTCNT2)
- jeweils 8-Bit
- können zu einem 16-Bit Counter zusammengesetzt werden (Kann in der
BTCTL register configuration
eingestellt werden)
BTCNT1
wird für die frame Frequenz des LCD Controller verwendet
- read/write 8-Bit Register
- clock source: ACLK
- frame Frequenz auswählbar (‘BTFRFQx’ des
BTCTL
-Registers - f_LCD = ACLK/x
BTCNT2
programmable frequency divider
mit interrupt Möglichkeit, (CPU interrupts)
- Read/write 8-bit register
- drei clock sources
ACLK
SMCLK
ACLK
/256- Bei Verwendung in Kombination mit
BTCNT2
undBTDIV bits
imBTCTL
-Register
- Bei Verwendung in Kombination mit
CODE Beispiele
LED blinken
#define LED_RED BIT0
- ersetzt Bitshift