• MSP 430

  • Erklärung

  • CODE Beispiele

  • Allgemein

  • 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

  • LED blinken

    Quellcode

    • #define LED_RED BIT0
      • ersetzt Bitshift
  • LED blinken mit Timer

    Quellcode

  • 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);
  • 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
    {"cards":[{"_id":"4dbec402885b3f577f00002f","treeId":"4dbec306885b3f577f00002c","seq":1335459,"position":1,"parentId":null,"content":"MSP 430"},{"_id":"4dbec4ee885b3f577f000031","treeId":"4dbec306885b3f577f00002c","seq":1336392,"position":0.5,"parentId":"4dbec402885b3f577f00002f","content":"Erklärung"},{"_id":"4dc07b40c1fdbe5f16000020","treeId":"4dbec306885b3f577f00002c","seq":1336706,"position":0.5,"parentId":"4dbec4ee885b3f577f000031","content":"# Allgemein"},{"_id":"4dc07e23c1fdbe5f16000022","treeId":"4dbec306885b3f577f00002c","seq":1336982,"position":0.5,"parentId":"4dc07b40c1fdbe5f16000020","content":"# Clock\n\n## Master clock (MCLK)\nWird von der CPU und einzelnen Peripherie genutzt\n\n\n## Subsystem master clock (SMCLK)\nFür die Peripherie\n\n\n## Auxiliary clock (ACLK)\nNormalerweise laufen SMCLK und MCLK mit der gleichen Frequenz (Megahertz-Bereich). Der ACLK läuft auf einer niedrigeren Frequenz (12KHz)\n\n\n## digitally controlled oscillator (DCO)\n\nMCLK und SMCLK werden von dem DCO gespeisst. Der DCO läuft beim MSP403 mit 1.1 MHz\n\nEs sind drei kallebrierte Frequenzen verfügbar: 1, 8, 12 und 16 MHz. Um diese umzustellen müssen nur die Bits im Register gesetzt werden.\n\nFolgender Code setzt den DCO auf 1MHz:\n\n```c\nBCSCTL1 = CALBC1_1MHZ; // Set range\nDCOCTL = CALDCO_1MHZ; // Set DCO step and modulation\n``` \n\n![](http://homepages.ius.edu/RWISMAN/C335/HTML/msp43024.jpg)\nhttp://homepages.ius.edu/RWISMAN/C335/HTML/msp43024.jpg\n\n\n---\n\nQuelle: http://homepages.ius.edu/RWISMAN/C335/HTML/msp430Timer.HTM"},{"_id":"4e9202c22fa4f978c5000029","treeId":"4dbec306885b3f577f00002c","seq":1440055,"position":2,"parentId":"4dc07b40c1fdbe5f16000020","content":"# Status Register\nIm status register werden die Zustände und controll bits gehalten. Das SR besteht aus einem 16-bit Register\n\n## General interrupt enable (GIE)\nInterrupts (maskable) können erst verwendet und eingesetzt werden wenn dieses Bit gesetzt ist.\n\nDer GIE liegt auf dem 3. bit des SR\n\n## Low Power Mode (LPM)\nDa Timer unabhängig von der CPU laufen können ist es möglich die CPU auszuschalten. Diese wird durch den Interrupt wieder geweckt\n\n## Code Beispiel\nGIE aktivieren und Low Power Mode verwenden:\n\n```\n_BIS_SR(LPM0_bits + GIE); \n```"},{"_id":"4dbed440885b3f577f000034","treeId":"4dbec306885b3f577f00002c","seq":1440050,"position":1,"parentId":"4dbec4ee885b3f577f000031","content":"# P1DIR\n\n* `P1DIR` ist ein 8-Bit Register\n* Gibt die Richtung (`dir`) des Port Pins als Input oder Output an\n* `P1DIR = <PIN7><PIN6><PIN5><PIN4><PIN3><PIN2><PIN1><PIN0>`\n* Grüne LED = Port 1, Pin 0 (`P1.0`)\n* Rote LED = Port 1, Pin 6 (`P1.6`)"},{"_id":"4dc01dcfc1fdbe5f16000010","treeId":"4dbec306885b3f577f00002c","seq":1340384,"position":2,"parentId":"4dbec4ee885b3f577f000031","content":"# Timer\n\nTimer sind fundamentale Counter die vom Clock Signal angetrieben werden. Der Counter wird mit jedem Clock Signal in- oder decrementiert.\n\nWenn der Counter einen gewissen Wert erreicht hat kann ein interrupt generiert werden - `Timer A interrupt flag` (TAIFG).\nBsp: Wenn die Clock mit FFFFh Hz pulst und das Counter Limit bei FFFFh liegt so wird jede Sekunde ein Interrupt ausgelöst.\n\n16 bit Timer continuous mode von 0 bis FFFFh: \n![](http://homepages.ius.edu/RWISMAN/C335/HTML/msp43028.png)\nhttp://homepages.ius.edu/RWISMAN/C335/HTML/msp43028.png\n\n## Bestandteile eines Timers\n\n* clock input\n * tickt in einer gewissen Frequenz\n* Counter\n *zählt die clock ticks\n* Interrupt Prozedur\n * wird aufgerufen wenn das Limit erreicht ist\n\n## Timer_A control register (TACTL)\n\n`TASSEL` = 01 in bits 9-8 wählt `A0 source clock` als `ACLK` 12KHz.\n\n`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)\n\n![](http://homepages.ius.edu/RWISMAN/C335/HTML/msp43030.png)\nhttp://homepages.ius.edu/RWISMAN/C335/HTML/msp43030.png\n\n## Counter\n\n* `TA0CCTL0`\n * Kontrollregister für den Counter 0 des Timers A0. Interrupts werden aktiviert wenn das 4. bit gesetzt wird.\n\n* `TA0CCR0`\n * hält den 16-bit Zählwert \n * Bsp: Wenn die ACLK-Clock(12KHz) verwendet wird und jede Sekunde geblinkt werden soll so muss der interrupt bei 12000 ausgelöst werden\n * Wenn Counter im **UP**-Modus **auto reset** auf 0 wenn limit erreicht wurde\n\n\n\n---\n\nQuelle: http://homepages.ius.edu/RWISMAN/C335/HTML/msp430Timer.HTM"},{"_id":"4dc02efcc1fdbe5f16000012","treeId":"4dbec306885b3f577f00002c","seq":1336262,"position":0.5,"parentId":"4dc01dcfc1fdbe5f16000010","content":"# Verwendung der Timer\n* Generierte periodische events\n* periodischer wake up vom sleep mode\n* ersetzen delay-loops"},{"_id":"4dc0278ac1fdbe5f16000011","treeId":"4dbec306885b3f577f00002c","seq":1336250,"position":1,"parentId":"4dc01dcfc1fdbe5f16000010","content":"# capture und compare Blöcke\n* jeder Timer besitzt unabhängige capture und compare Blöcke\n* werden für Zeit- und Pulse Width Modulator (PWM) verwendet"},{"_id":"4dc14401cb0492d268000027","treeId":"4dbec306885b3f577f00002c","seq":1340429,"position":1.25,"parentId":"4dc01dcfc1fdbe5f16000010","content":"## Timer_A control register (TACTL) - Details\n\n* `Timer_A clock source (TASSELx) - Bit: 9-8`\n * `TASSEL1 TASSEL0 = 00 => TACLK`\n * `TASSEL1 TASSEL0 = 01 => ACLK`\n * `TASSEL1 TASSEL0 = 10 => SMCLK`\n * `TASSEL1 TASSEL0 = 11 => INCLK`\n\n* `Clock signal divider (IDx) - Bit: 7-6`\n * `ID1 ID0 = 00 => /1`\n * `ID1 ID0 = 01 => /2`\n * `ID1 ID0 = 10 => /4`\n * `ID1 ID0 = 11 => /8`\n\n* `Clock timer operating mode (MCx) - Bit: 5-4`\n * `MC1 MC0 = 00 => Stop mode`\n * `MC1 MC0 = 01 => Up mode`\n * `MC1 MC0 = 10 => Continuous mode`\n * `MC1 MC0 = 11 => Up/down mode`\n\n* `Timer_A clear (TACLR) - Bit: 2`\n * clear wenn `TACLR = 1`\n\n* `Timer_A interrupt enable (TAIE) - Bit: 1`\n * ist aktiviert wenn `TAIE = 1`\n\n* `Timer_A interrupt flag (TAIFG) - Bit: 0`\n * interrupt wird ausgeführt wenn `TAIFG = 1` (und wenn `TAIE` enabled)"},{"_id":"4dc0417ac1fdbe5f1600001a","treeId":"4dbec306885b3f577f00002c","seq":1336328,"position":1.5,"parentId":"4dc01dcfc1fdbe5f16000010","content":"## Basic Timer 1 module\n* besitzt zwei unabhängige Counter"},{"_id":"4dc04cbec1fdbe5f1600001b","treeId":"4dbec306885b3f577f00002c","seq":1336330,"position":0.5,"parentId":"4dc0417ac1fdbe5f1600001a","content":"## Verwendung des Basic Timer 1 module\n\n* clock für LCD \n* `RTC` Implementierungen\n* Intervall Timer\n* einfache Interrupts"},{"_id":"4dc036acc1fdbe5f16000014","treeId":"4dbec306885b3f577f00002c","seq":1336331,"position":1,"parentId":"4dc0417ac1fdbe5f1600001a","content":"## Basic Timer Counter 1 (BTCNT1) und 2 (BTCNT2)\n* jeweils 8-Bit\n* können zu einem 16-Bit Counter zusammengesetzt werden (Kann in der `BTCTL register configuration` eingestellt werden) "},{"_id":"4dc0557bc1fdbe5f1600001c","treeId":"4dbec306885b3f577f00002c","seq":1336341,"position":1,"parentId":"4dc036acc1fdbe5f16000014","content":"## BTCNT1\nwird für die frame Frequenz des LCD Controller verwendet\n\n* read/write 8-Bit Register\n* clock source: ACLK\n* frame Frequenz auswählbar ('BTFRFQx' des `BTCTL`-Registers\n* f_LCD = ACLK/x"},{"_id":"4dc05b92c1fdbe5f1600001d","treeId":"4dbec306885b3f577f00002c","seq":1336369,"position":2,"parentId":"4dc036acc1fdbe5f16000014","content":"## BTCNT2\n\n`programmable frequency divider` mit interrupt Möglichkeit, (CPU interrupts)\n\n* Read/write 8-bit register\n* drei clock sources\n * `ACLK`\n * `SMCLK`\n * `ACLK`/256\n * Bei Verwendung in Kombination mit `BTCNT2` und `BTDIV bits` im `BTCTL`-Register"},{"_id":"4dc03fecc1fdbe5f16000019","treeId":"4dbec306885b3f577f00002c","seq":1336291,"position":8,"parentId":"4dc01dcfc1fdbe5f16000010","content":""},{"_id":"4dbec45d885b3f577f000030","treeId":"4dbec306885b3f577f00002c","seq":1335464,"position":1,"parentId":"4dbec402885b3f577f00002f","content":"CODE Beispiele"},{"_id":"4dbede47885b3f577f000035","treeId":"4dbec306885b3f577f00002c","seq":1337233,"position":1,"parentId":"4dbec45d885b3f577f000030","content":"# LED blinken\n[Quellcode](https://bitbucket.org/advocd/ws2014-s1-embedded/src/8bbfc5a57ca4849e4a276a661df6e50a1770ed17/CC-Workspace/blink_default_ti_example/main.c?at=master)\n\n* `#define LED_RED BIT0` \n * ersetzt Bitshift"},{"_id":"4dc16dbfcb0492d268000028","treeId":"4dbec306885b3f577f00002c","seq":1337237,"position":2,"parentId":"4dbec45d885b3f577f000030","content":"# LED blinken mit Timer\n\n[Quellcode](https://bitbucket.org/advocd/ws2014-s1-embedded/src/58dfffebea7e0c49fc0779ffb518adbbd0b9cc96/CC-Workspace/blink_timer/main.c?at=master)\n"}],"tree":{"_id":"4dbec306885b3f577f00002c","name":"MSP 430","publicUrl":"msp-430"}}