Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

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
  • Timer_A interrupt enable (TAIE) - Bit: 1

    • ist aktiviert wenn TAIE = 1
  • Timer_A interrupt flag (TAIFG) - Bit: 0

    • interrupt wird ausgeführt wenn TAIFG = 1 (und wenn TAIE enabled)

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 und BTDIV bits im BTCTL-Register

CODE Beispiele

LED blinken

Quellcode

  • #define LED_RED BIT0
    • ersetzt Bitshift

LED blinken mit Timer

Quellcode