STM8 Timer 1


Die Kontroll- und Status Register

Die primären Funktionen des Zählers, sowie die Erzeugung von „Events“ bzw. von Interrupts wird in den nachfolgend beschriebenen Registern eingestellt oder von der Hardware erzeugt.

Das Timer Control Register 1 (TIM1_CR1)

Die grundlegenden Funktionen des Zählers werden im „Control Register 1“ des Timers„1“ eingestellt.

 TIM1_CR1 Register - Control Register 1                                                       (TIMER1 Adresse = 0x00.5250h im STM8S)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIM1_CR1 ARPE CMS[1] CMS[0] DIR OPM URS UDIS CEN
Reset Wert 0 0 0 0 0 0 0 0

CEN – Counter Enable Bit (Zählerfreigabe)

Das Counter Enable Bit (CEN) konfiguriert die Freigabe des 16-Bit Zählers. Der Zähler beginnt allerdings erst einen Taktzyklus nach der Freigabe durch das CEN-Bit zu zählen.

Bit 0 = CEN Bit = 0, Zähler ist gesperrt
  = 1, Zähler ist freigegeben und zählt

UDIS – Update Disable Bit (Update Sperre)

Ein “UEV” (Update Event) wird generiert wenn das UDIS Bit auf “0” gesetzt ist und wird unterbunden wenn das UDIS Bit gleich „1“ ist. Auslöser für einen Update Event ist eine Zählerüberlauf bzw. ein Gleichstand von Zähler und ARR Register oder alternativ ein Schreibvorgang in den Zähler selbst.

Bit 1 = UDIS Bit = 0, Update Event wird erzeugt und Register werden aus ihren Preload Registern geladen
  = 1, es wird kein Update Event erzeugt und die Register behalten ihre Werte. Der Zähler und der Prescaler werden neu initialisiert (auf Null gesetzt) wenn das UG Bit gesetzt ist.

URS – Update Request Source (Update Modus)

Welche Ereignisse einen mit UDIS freigegebenen Update Event (UIF) auslösen können ist mit dem URS-Bit defierbar.

Bit 2 = URS Bit = 0, so wird ein Update Event durch Zähler-Überlauf (Zähler > ARR) bzw. durch Setzen des UG-Bits per Software, generiert.
  = 1, wird der Event nur durch den Register-Update (Überlauf Zähler > ARR) ausgelöst

OPM – One Puls Mode (Einzel-Puls Modus)

Wird das OPM-Bit gesetzt (“1”) so stoppt der Zähler beim nächsten Update-Event durch das Zurücksetzen des CEN-Bits.

Bit 3 = OPM Bit = 0, der Zähler wird durch einen UEV nicht angehalten.
  = 1, der Zähler stoppt bei einem UEV (One Pulse Mode)

DIR - Direction (Zählerrichtung)

Das Direction Bit ermöglicht die Zählrichtung des Timers umzukehren.

Bit 4 = DIR Bit = 0, der Zähler arbeitet als Aufwärtszähler.
  = 1, der Zähler arbeitet als Abwärtszähler.

CMS[1:0] - Symetrische PWM Ausgabe (Center Aligned Mode Select)

legt den Zählermodus und damit insbesondere die PWM Ausgabe fest. Diese kann auf den Beginn einer Periode (Edge aligned) oder durch Umschaltung der Zählrichtung (Center aligned) um den Mittelpunkt „zweier“ Perioden justiert werden. Siehe dazu „2. Der 16 Bit Zähler des Timer 1“.

Bitfeld CMS[1:0] im TIM1_CR1 Register
CMS[1:0] Wert PWM Modus Zählrichtung Output Compare Interrupt Flag
0x00b edge aligned DIR=0 -> Auf / DIR=1 -> Ab DIR=0 -> Zähler = CCR
0x01b center aligned Mode1 Auf und Ab nur im Abwärtszählzyklus (Underflow)
0x10b center aligned Mode2 Auf und Ab nur im Aufwärtszählzyklus (Overflow)
0x11b center aligned Mode3 Auf und Ab im Auf-/Abwärtszähler Mode

ARPE – Auto Reload Preload Enable

Diese Bit selektiert, wie mit einem neuen Wert der in das Auto-Reload Register geschrieben wurde verfahren wird.

Bit 7 = ARPE Bit = 0, neuer Wert wird aus dem Auto-Preload Register unmittelbar übernommen
  = 1, neuer Wert wird aus dem Auto-Preload Register erst bei einem Zähler Update in das Shadow-Register übernommen.

D.h. es findet eine Synchronisation mit dem Zählerüberlauf statt. Ist dies nicht gewünscht so kann durch einen Reset des ARPE-Bits der Schreibvorgang des Auto-Reload Registers unmittelbar auf das „Shadow“-Register übertragen werden und die Änderung ist sofort aktiv.

Das Timer Control Register 2 (TIM1_CR2)

Dieses Register bietet die Einstellungsmöglichkeiten für die Auswahl eines Triggers-Signals bzw. die Verfahrensweise für Preload Aktionen.

 TIM1_CR2 Register - Control Register 2                                                             (TIMER1 Adresse = 0x00.5251h im STM8S)
Register Name   Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
TIM1_CR2   reserviert MMS[2] MMS[1] MMS[0] reserviert COMS reserviert CCPC
Reset Wert 0 0 0 0 0 0 0 0

CCPC – Capture/Compare Preload Control (Preload Ausgangspolarität/enable)

Bit 0 = CCPC Bit = 0, so erfolgt kein Preload der Register
  = 1, so werden die Bits in den CCERi-Registern (Polarität und Freigabe der Ausgänge) und in den CCMRi-Registern (Ausgänge Mode und Clear) geladen.

Die Funktionalität bezieht sich nur auf Kanäle mit komplementären Ausgängen.

COMS – Capture/Compare Control Update Selection (Preload Tigger)

Die Funktionalität dieses Bits ist nur gegeben wenn das CCPC-Bit gesetzt ist (Preload freigegeben).

Bit 0 = COMS Bit = 0, Preload durch das Setzen des COMG Bits im TIM_EGR Register
  = 1, der Preload erfolgt wahlweise durch das COMG-Bit oder durch eine steigende Flanke am TRGI (Trigger Input).

MMS[2:0] – Master Mode Selection (Master Mode Einstellung)

Die Einstellung dieser drei Bits selektiert im Master Mode durc h welches Signal das TRGO (Trigger Output) Signal erzeugt wird.

MMS[2:0] Auslöser Beschreibung
000 Reset UG-Bit in TIM1_EGR Register triggert TRGO
001 Enable CEN-Bit in TIM1_CR1 , Counter Enable Bit triggert TRGO
010 Update UEV (Update Event) in der Hardware triggert TRGO
011 Compare Pulse MATCH1 - Internes Signal triggert TRGO
100 OC1REF OC1REF - Internes Signal in der Ausgangsstufe triggert TRGO
101 OC2REF OC2REF - Internes Signal in der Ausgangsstufe triggert TRGO
110 OC3REF OC3REF - Internes Signal in der Ausgangsstufe triggert TRGO
111 OC4REF OC4REF - Internes Signal in der Ausgangsstufe tirggert TRGO

Das Slave Mode Control Register (TIM1_SMCR)

Im Slave Mode, Timer 1 wird von anderem Timer bzw. externem Signal (ETR) gesteuert,

TIM1_SMCR Register - Slave Mode Control Register                                (TIMER1 Adresse = 0x00.5252h im STM8S )
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
TIM1_SMCR MSM TS[2] TS[1] TS[0] reserviert SMS[2} SMS[1] SMS[0]
Reset Wert 0 0 0 0 0 0 0 0

SMS[2:0] – Clock/Trigger/Slave Mode Selection (Slave Mode Einstellung)

Die Einstellung der SMS[2:0] Bits definieren die Funktion des Zählers im „SLAVE“ Modus wenn der Zählertakt von verschiedenen Quellen verwendet werden soll.

SMS[2:0] Modus Beschreibung
000 Disabled CEN-Bit = 1 in TIM1_EGR Register, Timer arbeitet mit internem Takt
001 Encoder Mode 1 Zähler zählt (auf/ab) auf TI2FP2 Flanke, abhängig vom TI1FP1 Pegel
010 Encoder Mode 2 Zähler zählt (auf/ab) auf TI1FP1 Flanke, abhängig vom TI2FP2 Pegel
011 Encoder Mode 3 Zähler zählt (auf/ab) auf TI1FP1 u. TI1FP2 Flanken, Die Zähl-Richtung ist abhängig vom jeweils anderen Pegel
100 Reset Mode Steigende Flanke des selectierten Signals (TRGI ) setzt den Zähler zurück und generiert einen Register Update
101 Trigger Gate Mode Der Zähler arbeitet mit dem internen Takt wenn das TRGI Signal „high“ ist uns stopped wenn das Signal „low“ ist. Kein Reset !
110 Trigger Standard Mode Der Zähler startet ohne Reset auf eine steigende Flanke des TRGI Signals.
111 External Clock Mode Der Zähler wird durch die steigende Flanke des TRGO getaktet.

TS[2:0] – Trigger Selection (Trigger Auswahl)

Die drei TS[2:0] Bits dienen zur Auswahl des als Zählertakt für Timer 1 verwendeten Signals im Clock/Trigger Controller.

TS[2:0] Trigger Beschreibung
000 TIM6-TRGO Interner Trigger ITR0 mit internem TIM6-TRGO verbunden *)
001 reserviert
010 reserviert
011 TIM5-TRGO Interner Trigger ITR3 mit internem TIM5-TRGO verbunden *)
100 TI1 TI1G_ED (TIM1) Edge Detector
101 TI1FP1 Gefilterter Zählereingang TI1FP1
110 TI1FP2 Gefilterter Zählereingang TI1FP2
111 ETRF Externer Trigger Eingang ETRF

*) Diese Bits sind nur in den 8k (Flash) Low Density Versionen des STM8S aktiv sonst „reserviert“.

MSM – Master / Slave Mode

Bit 7 = MSM Bit = 0, Eingangssignal am TRGI wird nicht verzögert
  = 1, das Eingangssignal am TRGI wird verzögert um eine genaue Synchronisation zwischen dem Timer 1 und dem Ausgang des TRGO eines anderen Zählers auf dem STM8 zu erreichen.

Das Externe Trigger Register (TIM1_ETR)

Diese Einstellungen im TIM1_ETR Register konfigurieren das Verhalten bei einem externen Trigger (Takt) für den Zähler.

TIM1_ETR Register - Externes Trigger Register                                         (TIMER1 Adresse = 0x00.5253h im STM8S )
Register Name   Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIM1_ETR ETP ECE ETPS[1] ETPS[0] ETF[3] ETF[2] ETF[1] ETF[0]
Reset Wert 0 0 0 0 0 0 0 0

ETF[3:0] – Externer Trigger Filter

Dieses Feld bestehend aus 4-Bit, definiert die verwendete Abtastfrequenz und die Länge des digitalen Filters (Anzahl der Samples die einen gleichen Logikpegel erfüllen müssen).

ETF[3:0] Sampling Frequenz Anzahl Samples
0000 fMaster N = 1 (keine Filterung)
0001 fMaster N = 2
0010 fMaster N = 4
0011 fMaster N = 8
0100 fMaster/ 2 N = 6
0101 fMaster / 2 N = 8
0110 fMaster / 4 N = 6
0111 fMaster/ 4 N = 8
1000 fMaster / 8 N = 6
1001 fMaster / 8 N = 8
1010 fMaster / 16 N = 5
1011 fMaster / 16 N = 6
1100 fMaster / 16 N = 8
1101 fMaster / 32 N = 5
1110 fMaster / 32 N = 6
1111 fMaster / 32 N = 8

ETPS – Externer Trigger Prescaler

Die ETRP Frequenz darf höchstens 1/4 der fMaster Frequenz sein. Um einen schnellen externen Takt verarbeiten zu können kann der Takt über einen Vorteiler (Prescaler) reduziert werden. Dieser Prescaler kann so eingestellt werden daß der Takt durch 1, 2, 4 oder 8 geteilt wird.

ETPS[1:0] Prescaler Wert
00 ETRP Frequenz, Prescaler abgeschaltet (Prescaler = 1)
01 ETRP Frequenz / 2
10 ETRP Frequenz / 4
11 ETRP Frequenz / 8

ETRP ist die gefilterte Frequenz des externen ETR Eingangs (TIM1_ETR).

ECE – Externer Clock Enable

Bit 6 = ECE Bit = 0, blockiert den Takt für das ETRF Signal
  = 1, schaltet den Takt des ETRF Signals für den Zähler frei (Ext. Clock Mode 2)

Im freigeschalteten Zustand ist die Auswirkung identisch mit dem Clock Mode 1 bei gleichzeitiger Verbindung des TRGI (Trigger Inputs) mit dem ETRF Signal (SMS = 0x111b und TS = 0x111b im TIM1_SMCR Register).

External Clock Mode 2 kann simultan mit folgenden Modi verwendet werden: Trigger Standard Mode, Trigger Reset Mode und Trigger Gated Mode.

Dabei darf TRGI nicht mit dem ETRF Signal verbunden sein (TS Bits im TIM1_SMCR Register dürfen nicht 111 sein! )

ETP – Externer Trigger Polarität

Bit 7 = ETP Bit = 0, so wird das nicht invertierte ETR Signal verwendet.
  = 1, verwendet das invertierte ETR Signal.

ETP wählt die Polarität des „ETR“, respective des „ETR_inverted“ welches als Trigger verwendet werden soll.

Das Interrupt Enable Register (TIM1_IER)

Wie der Registername schon sagt können in diesem Register die verschiedenen möglichen Interrupt Quellen aktiviert oder deaktiviert werden.

TIM1_IER Register - Interrupt Enable Register                                  (TIMER1 Adresse = 0x00.5254h im STM8S )
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIM1_IER BIE TIE COMIE CC4IE CC3IE CC2IE CC1IE UIE
Reset Wert 0 0 0 0 0 0 0 0

UIE – Update Interrupt Enable

Bit 0 = UIE Bit = 0, Update Interrupt gesperrt
  = 1, Update Interrupt freigegeben.

CC1IE – Capture/Compare 1 Interrupt Enable

Bit 1 = CC1IE Bit = 0, Capture/Compare Kanal 1 Interrupt gesperrt.
  = 1, Capture/Compare Kanal 1 Interrupt freigegeben.

CC2IE – Capture/Compare 2 Interrupt Enable

Bit 2 = CC2IE Bit = 0, Capture/Compare Kanal 2 Interrupt gesperrt.
  = 1, Capture/Compare Kanal 2 Interrupt freigegeben.

CC3IE – Capture/Compare 3 Interrupt Enable

Bit 3 = CC3IE Bit = 0, Capture/Compare Kanal 3 Interrupt gesperrt.
  = 1, Capture/Compare Kanal 3 Interrupt freigegeben.

CC4IE – Capture/Compare 4 Interrupt Enable

Bit 4 = CC4IE Bit = 0, Capture/Compare Kanal 4 Interrupt gesperrt.
  = 1, Capture/Compare Kanal 4 Interrupt freigegeben.

COMIE – Commutation Interrupt Enable

Bit 5 = COMIE Bit = 0, Commutation Interrupt gesperrt.
  = 1, Commutation Interrupt freigegeben.

TIE – Triggern Interrupt Enable

Bit 6 = TIE Bit = 0, Trigger Interrupt gesperrt.
  = 1, Trigger Interrupt freigegeben.

BIE – Break Interrupt Enable

Bit 7 = BIE Bit = 0, Break Interrupt gesperrt.
  = 1, Break Interrupt freigegeben.

Das Timer1 Status Register 1 (TIM1_SR1)

Das Timer 1 Status Register 1 beinhaltet die durch Interrupts gesetzten Flags welche die beiden Timer1 H/W Interrupts im Detail beschreiben.

TIM1_SR1 Register - Status Register 1                                                              (TIMER1 Adresse = 0x00.5255h im STM8S )
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIM1_SR1 BIF TIF COMIF CC4IF CC3IF CC2IF CC1IF UIF
Reset Wert 0 0 0 0 0 0 0 0

UIF – Update Interrupt Flag

Bit 0 = UIF Bit = 0, Kein Update Event aufgetreten.
  = 1, Update Event anstehend (pending), wird durch Hardware gesetzt wenn die Register neu beschrieben (upgedated) wurden.
  • Bei einem Überlauf bzw. einem Unterlauf von UDIS = 0 im TIM1_CR1
  • Wenn der Zähler durch Software neu initialisiert wurde ( UG-Bit im TIM1_EGR Register, wenn URS=0 und UDIS=0 im TIM1_CR1 Register)
  • Wenn der Zähler (CNT) durch einen Trigger Event neu initialisert wurde (TIM1_SMCR Register) falls URS=0 und UDIS=0 sind.
  • CC1IF – Capture/Compare Kanal 1 Interrupt Flag

    Kanal CC1 ist als Ausgang konfiguriert (Output Compare) , Flag wird durch Hardware gesetzt wenn der Zähler den „Compare“ Wert erreicht hat. Das Flag wird durch Software gelöscht.

    Bit 1 = CC1IF Bit = 0, kein Match mit dem Compare Register aufgetreten.
      = 1, der TIM1_CNT entspricht dem TIM1_CCR1 Register Inhalt

    Wenn der Inhalt des TIM1_CCR1 Registers grösser als der Inhalt des TIM1_ARR Registers ist wird das CC1IF-Bit bei einem Overflow (upcounting und up/downcounting), respektive bei einem Underflow (im down counting mode), gesetzt.

    Kanal CC1 ist als Eingang konfiguriert (Input Capture) , das CC1IF Flag wird durch ein „Capture“ Ereignis gesetzt und wird per Software oder durch das Auslesen des TIM1_CCR1L Registers zurückgesetzt.

    Bit 1 = CC1IF Bit = 0, kein Input Capture Ereignis aufgetreten.
      = 1, der Zähler-Wert wurde durch ein Capture Ereignis im TIM1_CCR1 Register gespeichert (Signalflanke mit der konfigurierten Polarität wurde am  IC1 detektiert.

    CC2IF – Capture/Compare Kanal 2 Interrupt Flag

    Kanal CC2 ist als Ausgang konfiguriert (Output Compare) , Flag wird durch Hardware gesetzt wenn der Zähler den „ Compare“ Wert erreicht hat. Das Flag wird durch Software gelöscht.

    Bit 2 = CC2IF Bit = 0, kein Match mit dem Compare Register aufgetreten.
      = 1, der TIM1_CNT entspricht dem TIM1_CCR2 Register Inhalt.

     Wenn der Inhalt des TIM1_CCR2 Registers grösser als der Inhalt des TIM1_ARR Registers ist, wird das CC2IF-Bit bei einem Overflow (upcounting und up/downcounting) gesetzt, respektive bei einem Underflow (im down counting mode).

    Kanal CC2 ist als Eingang konfiguriert (Input Capture) , das CC2IF Flag wird durch ein „Capture“ Ereignis gesetzt und wird per Software oder durch das Auslesen des TIM1_CCR2L Registers zurückgesetzt.

    Bit 2 = CC2IF Bit = 0, kein Input Capture Ereignis aufgetreten.
      = 1, der Zähler-Wert wurde durch ein Capture Ereignis im TIM1_CCR2 Register gespeichert (Signalflanke mit der konfigurierten Polarität wurde am  IC2 detektiert.

    CC3IF – Capture/Compare Kanal 3 Interrupt Flag

    Kanal CC3 ist als Ausgang konfiguriert (Output Compare) , Flag wird durch Hardware gesetzt wenn der Zähler den „Compare“ Wert erreicht hat. Das Flag wird durch Software gelöscht.

    Bit 3 = CC3IF Bit = 0, kein Match mit dem Compare Register aufgetreten.
      = 1, der TIM1_CNT entspricht dem TIM1_CCR3 Register Inhalt.

     Wenn der Inhalt des TIM1_CCR3 Registers grösser als der Inhalt des TIM1_ARR Registers ist, wird das CC3IF-Bit bei einem Overflow (upcounting und up/downcounting) gesetzt, respektive bei einem Underflow (im down counting mode).

    Kanal CC3 ist als Eingang konfiguriert (Input Capture) , das CC3IF Flag wird durch ein „Capture“ Ereignis gesetzt und wird per Softare oder durch das Auslesen des TIM1_CCR3L Registers zurückgesetzt.

    Bit 3 = CC3IF Bit = 0, kein Input Capture Ereignis aufgetreten.
      = 1, der Zähler-Wert wurde durch ein Capture Ereignis im TIM1_CCR3 Register gespeichert (Signalflanke mit der konfigurierten Polarität wurde am  IC3 detektiert).

    CC4IF – Capture/Compare Kanal 4 Interrupt Flag

    Kanal CC4 ist als Ausgang konfiguriert (Output Compare) , Flag wird durch Hardware gesetzt wenn der Zähler den „Compare“ Wert erreicht hat. Das Flag wird durch Software gelöscht.

    Bit 4 = CC4IF Bit = 0, kein Match mit dem Compare Register aufgetreten.
      = 1, der TIM1_CNT entspricht dem TIM1_CCR4 Register Inhalt.

    Wenn der Inhalt des TIM1_CCR4 Registers grösser als der Inhalt des TIM1_ARR Registers ist, wird das CC4IF-Bit bei einem Overflow (upcounting und up/downcounting) gesetzt respektive bei einem Underflow (im down counting mode).

    Kanal CC4 ist als Eingang konfiguriert (Input Capture) , das CC4IF Flag wird durch einen „Capture“ Ereignis gesetzt und wird per Softare oder durch das Auslesen des TIM1_CCR4L Registers.

    Bit 4 = CC4IF Bit = 0, kein Input Capture Ereignis aufgetreten.
      = 1, der Zähler-Wert wurde durch ein Capture Ereignis im TIM1_CCR4 Register gespeichert (Signalflanke mit der konfigurierten Polarität wurde am  IC4 detektiert).

    COMIF – Commutation Interrupt Flag

    Dieses Bit wird durch die Hardware des Timer1 gesetzt wenn ein COM Ereignis aufgetreten ist ( Capture/Compare Control Bits CCiE, CCiNE, OCM wurden upgedated). Das Bit muß durch Software zurückgesetzt werden.

    Bit 5 = COMIF Bit = 0, kein Commutation Ereignis (Interrupt) aufgetreten.
      = 1, Commutation Interrupt anstehend.

    TIF – Trigger Interrupt Flag

    Dieses Bit wird durch die Hardware des Timer1 gesetzt wenn ein TRIGGER Ereignis aufgetreten ist ( aktive Flanke am TRGI Signal bzw. beide Flanken im Trigger Gate Modus). Das Bit muß durch Software zurückgesetzt werden.

    Bit 6 = TIF Bit = 0, kein Trigger Ereignis (Interrupt) aufgetreten.
      = 1, Trigger Interrupt anstehend.

    BIF – Break Interrupt Flag

    Dieses Bit wird durch die Hardware des Timer1 gesetzt wenn der BREAK Eingang aktiv ist. Das Bit kann durch Software zurückgesetzt werden wenn der BREAK Input nicht aktiv ist.

    Bit 7 = BIF Bit = 0, kein Break Ereignis (Interrupt) aufgetreten.
      = 1, Break Eingang aktiv, Interrupt anstehend.

    Das Timer1 Status Register 2 (TIM1_SR2)

    Das Timer 1 Status Register 2 beinhaltet die durch Ereignisse gesetzten Flags welche die Quellen der beiden Timer1 H/W Interrupts im Detail beschreiben.

    TIM1_SR2 Register - Status Register 2                                                                (TIMER1 Adresse = 0x00.5256h im STM8S )
    Register Name   Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
    TIMn_SR2 reserviert reserviert reserviert CC4OF CC3OF CC2OF CC1OF reserviert
    Reset Wert   0 0 0 0 0 0 0 0

    CC1OF – Capture/Compare Overcapture Flag

    Dieses Flag wir durch die Hardware gesetzt wenn der Kanal 1 in „Input Capture“ Mode konfiguriert ist. Es kann per Software durch Schreiben einer „0“ auf das Bit zurückgesetzt werden.

    Bit 1 = CC1OF Bit = 0, kein "Overcapture" Ereignis im Channel 1 aufgetreten.
      = 1, der Zählerstand wurde in das TIM1_CCR1 Register gespeichert, während das CC1OF Flag bereits gesetzt war.

    CC2OF – Capture/Compare Overcapture Flag

    Dieses Flag wir durch die Hardware gesetzt wenn der Kanal 2 in „Input Capture“ Mode konfiguriert ist. Es kann per Software durch Schreiben einer „0“ auf das Bit zurückgesetzt werden.

    Bit 2 = CC2OF Bit = 0, kein "Overcapture" Ereignis im Channel 2 aufgetreten.
      = 1, der Zählerstand wurde in das TIM1_CCR2 Register gespeichert, während das CC2OF Flag bereits gesetzt war.

    CC3OF – Capture/Compare Overcapture Flag

    Dieses Flag wir durch die Hardware gesetzt wenn der Kanal 3 in „Input Capture“ Mode konfiguriert ist. Es kann per Software durch Schreiben einer „0“ auf das Bit zurückgesetzt werden.

    Bit 3 = CC3OF Bit = 0, kein "Overcapture" Ereignis im Channel 3 aufgetreten.
      = 1, der Zählerstand wurde in das TIM1_CCR3 Register gespeichert, während das CC3OF Flag bereits gesetzt war.

    CC4OF – Capture/Compare Overcapture Flag

    Dieses Flag wir durch die Hardware gesetzt wenn der Kanal 4 in „Input Capture“ Mode konfiguriert ist. Es kann per Software durch Schreiben einer „0“ auf das Bit zurückgesetzt werden.

    Bit 4 = CC4OF Bit = 0, kein "Overcapture" Ereignis im Channel 4 aufgetreten.
      = 1, der Zählerstand wurde in das TIM1_CCR4 Register gespeichert, während dasCC4OF Flag bereits gesetzt war.

    Das Event Generation Register (TIM1_EGR)

    TIM1_EGR Register - Event Generation Register                                         (TIMER1 Adresse = 0x00.5257h im STM8S)
    Register Name   Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_EGR BG TG COMG CC4G CC3G CC2G CC1G UG
    Reset Wert   0 0 0 0 0 0 0 0

    UG – Update Generation

    Bit 0 = UG Bit = 0, Kein Effekt auf die Funktion.
      = 1,  Initialisiert den Zähler neu und generiert einen Update der Register. Das          Prescaler Register wird dabei auch auf Null gesetzt. Der Zähler wird im          „Center Aligned Mode“ und im „Aufwärts Zähl Mode“ (DIR = 0) auf Null          gesetzt, im „Abwärtszähl Mode“ (DIR = 1) wird der Zähler mit dem Wert der                    TIM1_ARR Register geladen.

    CC1G – Capture/Compare 1 Generation

    Dieses Bit kann durch Software gesetzt werden um einen Event zu erzeugen und wird durch die Hardware zurückgesetzt.

    Bit 1 = CC1G Bit = 0,  Kein Effekt auf die Funktion.
      = 1,  Ein Capture/Compare Event wird für den Kanal CC1 erzeugt.

    Der Kanal CC1 ist als Ausgang konfiguriert und ein Compare Event tritt auf. Das CC1IF Flag im TIM1_SR1 wird gesetzt und falls CC1IE ebenfalls gesetzt ist wird ein Interrupt erzeugt.

    Der Kanal CC1 ist als Eingang konfiguriert und ein Capture tritt durch ein externes Signal am Timer-Pin auf. In diesem Fall wird der aktuelle Zählerstand des Timers in das TIM1_CCR1H und TIM1_CCR1L übernommen und das CC1IF Bit wir gesetzt. Bei freigegebenen CC1IE wird ein Interrupt generiert. Das CC1OF Flag (Overcapture) wird gesetzt wenn das CC1IF (Interrupt Enable) bereits gesetzt ist.

    CC2G – Capture/Compare 2 Generation

    Dieses Bit kann durch Software gesetzt werden um einen Event zu erzeugen und wird durch die Hardware zurückgesetzt.

    Bit 2 = CC2G Bit = 0,  Kein Effekt auf die Funktion.
      = 1,  Ein Capture/Compare Event wird für den Kanal CC2 erzeugt.

    Der Kanal CC2 ist als Ausgang konfiguriert und ein Compare Event tritt auf. Das CC2IF Flag im TIM1_SR1 wird gesetzt und falls CC2IE ebenfalls gesetzt ist wird ein Interrupt erzeugt.

    Der Kanal CC2 ist als Eingang konfiguriert und ein Capture tritt durch ein externes Signal am Timer-Pin auf. In diesem Fall wird der aktuelle Zählerstand des Timers in das TIM1_CCR2H und TIM1_CCR2L übernommen und das CC2IF Bit wir gesetzt. Bei freigegebenen CC2IE wird ein Interrupt generiert. Das CC2OF Flag (Overcapture) wird gesetzt wenn das CC2IF (Interrupt Enable) bereits gesetzt ist.

    CC3G – Capture/Compare 3 Generation

    Dieses Bit kann durch Software gesetzt werden um einen Event zu erzeugen und wird durch die Hardware zurückgesetzt.

    Bit 3 = CC3G Bit = 0,  Kein Effekt auf die Funktion.
      = 1,  Ein Capture/Compare Event wird für den Kanal CC3 erzeugt.

    Der Kanal CC3 ist als Ausgang konfiguriert und ein Compare Event tritt auf. Das CC3IF Flag im TIM1_SR1 wird gesetzt und falls CC3IE ebenfalls gesetzt ist wird ein Interrupt erzeugt.

    Der Kanal CC3 ist als Eingang konfiguriert und ein Capture tritt durch ein externes Signal am Timer-Pin auf. In diesem Fall wird der aktuelle Zählerstand des Timers in das TIM1_CCR3H und TIM1_CCR3L übernommen und das CC3IF Bit wir gesetzt. Bei freigegebenen CC3IE wird ein Interrupt generiert. Das CC3OF Flag (Overcapture) wird gesetzt wenn das CC3IF (Interrupt Enable) bereits gesetzt ist.

    CC4G – Capture/Compare 4 Generation

    Dieses Bit kann durch Software gesetzt werden um einen Event zu erzeugen und wird durch die Hardware zurückgesetzt.

    Bit 4 = CC4G Bit = 0,  Kein Effekt auf die Funktion.
      = 1,  Ein Capture/Compare Event wird für den Kanal CC4 erzeugt.

    Der Kanal CC4 ist als Ausgang konfiguriert und ein Compare Event tritt auf. Das CC4IF Flag im TIM1_SR1 wird gesetzt und falls CC4IE ebenfalls gesetzt ist wird ein Interrupt erzeugt.

    Der Kanal CC4 ist als Eingang konfiguriert und ein Capture tritt durch ein externes Signal am Timer-Pin auf. In diesem Fall wird der aktuelle Zählerstand des Timers in das TIM1_CCR4H und TIM1_CCR4L übernommen und das CC4IF Bit wir gesetzt. Bei freigegebenen CC4IE wird ein Interrupt generiert. Das CC4OF Flag (Overcapture) wird gesetzt wenn das CC4IF (Interrupt Enable) bereits gesetzt ist.

    COMG – Capture/Compare Control Update Generation

    Dieses Bit kann durch Software gesetzt werden um einen Event zu erzeugen und wird durch die Hardware zurückgesetzt.

    Bit 5 = COMG Bit = 0,  Kein Effekt auf die Funktion.
      = 1,  Wenn das CCPC Bit im TIM1_CR2 Register gesetzt ist können die CCiE, CCiNE, CCiNP  und OCiM Bits upgedated werden.

    TG – TRIGGER Generation

    Dieses Bit kann durch Software gesetzt werden um einen Event zu erzeugen und wird durch die Hardware zurückgesetzt.

    Bit 6 = BG Bit = 0,  Kein Effekt auf die Funktion.
      = 1,  Das TIF Flag im TIM1_CR2 wird gesetzt. Ein Interrupt wird generiert wenn das TIE Bit Im TIM1_IER Register gesetzt ist.

    BG – BREAK Generation

    Dieses Bit kann durch Software gesetzt werden um einen Event zu erzeugen und wird durch die Hardware zurückgesetzt.

    Bit 7 = BG Bit = 0,  Kein Effekt auf die Funktion.
      = 1,  Ein BREAK Event wird generiert, das MOE Bit wird zurückgesetzt und das  BIF Flag wird gesetzt. Ein Interrupt wird erzeugt wenn das BIE (Break Interrupt Enable) Bit im TIM1-IER gesetzt ist.

    Die Capture/Compare Mode Register “i” (TIM1_CCMRi)

    Für jeden der vier CC-Kanäle „i“ des Timers ist ein solches Register vorhanden. Die Register haben folgenden Inhalt (Bit0 bis Bit7 ), der sich bedingt durch die Auswahl der Bits CCiS[1..0] hinsichtlich der Funktion unterscheiden. Nachfolgend sind deshalb die höheren 6 Bit des Registers einmal für die Einstellung als Ausgang und einmal für die Einstellung als Eingang beschrieben. Die Bedeutung von Bit[0] und Bit[1] ist von der Einstellung als Eingang bzw. als Ausgang unabhängig.

    TIM1_CCMRi Register - Cap / Com Mode Register                               (TIMER1 Adresse = 0x00.5258/59/5A/5Bh im STM8S)
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
    TIM1_CCMRi Output OCiCE OCiM[2] OCiM[1] OCiM[0] OCiPE OCiFE CCiS[1] CCiS[0]
    Reset Wert 0 0 0 0 0 0 0 0
    TIM1_CCMRi Input ICiF[3] ICiF[2] ICiF[1] ICiF[0] CiPSC[1] ICiPSC[0] CCiS[1] CCiS[0]
    Reset Wert 0 0 0 0 0 0 0 0

    OCiM[2..0] – Output Compare Modus Bits (nur wenn CCiS[1..0] als Ausgang definiert ist)

    Der Modus der Signalerzeugung wird über die Bits OCiM[2..0] im Register TIM1_CCMRi festgelegt. Für die Einstellung des Capture Modus über die OCiM[2..0] Bits gilt folgende Tabelle:

    Compare Mode Einstellung
    OCiM[2..0] Modus Aktion OCiREF Signal
    000 „Frozen“ keine kein Effekt (Reset Wert)
    001 „Activ when match“ OCiREF wird „high“ das Signal geht auf „high“ und bleibt „high“
    010 „Inactive when match“ OCiREF wird „low“ das Signal geht auf „low“ und bleibt „low“
    011 „Toggle“ OCiREF ändert Polarität das Signal invertiert bei Gleichheit: CNT=CCR
    100 „Force inactive“ OCiREF statisch „low“ das Signal ändert sich nicht mehr
    101 „Force active“ OCiREF statisch „high“ das Signal ändert sich nicht mehr
    110 „PWM active“ CNTR < CCR  „high“ das Signal ist nur „high“ wenn CNTR < CCR-Wert
    111 „PWM inactive“ CNTR < CCR  „low“ das Signal ist nur „low“ wenn CNTR < CCR-Wert

    OCiPE – Output Compare Preload Enable (wenn CCiS[1..0] als Ausgang definiert ist)

    Wie das ARR-Register besitzt auch das Capture-Compare Register ein “Shadow”-Register das die Synchronisation einer Änderung des Register-Wertes im Zeitablauf ermöglicht. Das OCiPE Bit schaltet diese Synchronisation frei wenn es auf „1“ gesetzt ist.

    Ist das OCiPE Bit dagegen „0“ so wird ein Schreibvorgang in das Capture-Compare-Register unmittelbar auch das Shadowregister ändern.

    Im PWM Mode muss das „Shadow“-Register aktiviert sein damit eine Änderung des PWM-Werts mit dem Ausgangssignal synchronisiert wird und keine fehlerhaften PWM-Werte entstehen.

    CCiS[1..0] – Capture Compare Selection Bits (für Auswahl als Eingang oder Ausgang)

    Die beiden CCiS[1..0] Bits definieren die Funktion der Timer-Pins. Es gilt folgende Einstellungstabelle:

    Capture Compare Signal Auswahl
    CCiS[1..0] Kanal-Modus Signalpin OCiREF Signal
    00 Ausgang TIM1_CHi ist Ausgang OCiREF and TIM1_CHi
    01 Eingang TIM1_CHi ist Eingang Signal wird gerouted, ICi-Signal an TI1FP1
    10 Eingang TIM1_CHi ist Eingang Signal wird gerouted, ICi-Signal an TI2FP1
    11 Eingang ICi-Signal an TRC Funktioniert nur mit TIM5 als Trigger Eingang

    ICiF[3..0] – Input Capture Filter (wenn CCiS[1..0] als Eingang definiert ist)

    Capture Filter Einstellung
    ICiF[3..0] Abtastfrequenz Abtastwerte Beschreibung
    0000 FMaster N = 1 kein Effekt
    0001 FMaster N = 2 Der Eingang wird 2 x mit fMaster abgetastet
    0010 FMaster N = 4 Der Eingang wird 4 x mit fMaster abgetastet
    0011 FMaster N = 8 Der Eingang wird 8 x mit fMaster abgetastet
    0100 FMaster/2 N = 6 Der Eingang wird 6 x mit fMaster/2 abgetastet
    0101 FMaster/2 N = 8 Der Eingang wird 8 x mit fMaster/2 abgetastet
    0110 FMaster/4 N = 6 Der Eingang wird 6 x mit fMaster/4 abgetastet
    0111 FMaster/4 N = 8 Der Eingang wird 8 x mit fMaster/4 abgetastet
    1000 FMaster/8 N = 6 Der Eingang wird 6 x mit fMaster/8 abgetastet
    1001 FMaster/8 N = 8 Der Eingang wird 8 x mit fMaster/8 abgetastet
    1010 FMaster/16 N = 5 Der Eingang wird 5 x mit fMaster/16 abgetastet
    1011 FMaster/16 N = 6 Der Eingang wird 6 x mit fMaster/16 abgetastet
    1100 FMaster/16 N = 8 Der Eingang wird 8 x mit fMaster/16 abgetastet
    1101 FMaster/32 N = 5 Der Eingang wird 5 x mit fMaster/32 abgetastet
    1110 FMaster/32 N = 6 Der Eingang wird 6 x mit fMaster/32 abgetastet
    1111 FMaster/32 N = 8 Der Eingang wird 8 x mit fMaster/32 abgetastet

    Das Eingangssignal wird über dieses Filter das im Wesentlichen aus einem Zähler besteht, qualifiziert und dient als Unterdrückung von „Glitches“. Als Beispiel sei der Wert 0x1000b erklärt: Der Timer Eingang wird mit einer Frequenz von FMaster/8 = 16MHz / 8 = 2 MHz abgetastet und das Abtastsignal dient als Takt für den nachfolgenden Zähler der in dieser Einstellung 6 gültige Samples benötigt um das Eingangssignal zu akzeptieren.

    ICiPS[1..0] – Input Capture Prescaler (wenn CCiS[1..0] als Eingang definiert ist)

    Das vom Filter gelieferte Eingangssignal wird in dem nachfolgenden „Capture Prescaler“ weiter geteilt. Damit können mehrere „Events“ zu einem übergreifenden Event zusammengefasst werden. Die ICiPS[1..0] Bits definieren die Anzahl der nötigen Events.

    Input Capture Prescaler
    ICiPS[1..0] Teiler Ausgangssignal Funktion
    00 1 jeder Event Zähler-Capture bei jedem Eingangsevent
    01 2 jeder zweite Event
    10 4 jeder vierte Event
    11 8 jeder achte Event

    Die „Input Capture Vorteiler“ Einstellung kann im laufenden Betrieb überschrieben werden. Allerdings läuft der Zähler weiter und wird nicht zurückgesetzt. Sollte ein Reset des Zählers gewünscht werden so kann das CCiE Bit des Capture-Kanals zurückgesetzt und danach wieder aktiviert („1“) werden. Dadurch wird der Zähler auf „000“ gesetzt.

    Das Capture Compare Enable Register 1 (TIM1_CCER1)

    Das TIMn_CCER1 Register beinhaltet die Einstellungen für die Kanäle 1 und 2 des jeweiligen Timers. Für jeden Kanal steht ein Bit für die Freigabe bzw. für die verwendete Polarität bereit.

    Diese Konfigurations-Bits haben wieder je nach Einstellung (Eingang/Ausgang) unterschiedliche Bedeutungen.

    TIM1_CCER1 Register - Cap / Com Enable Register                                       (TIMER1 Adresse = 0x00.525Ch, im STM8S)
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_CCER1 CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E
    Reset Wert 0 0 0 0 0 0 0 0

    CC2NP – Capture Compare Channel 2 Complementary Output Polarity

    Der Kanal 2 ist als Ausgang geschaltet:

    Bit 7 = CC2NP Bit = 0,  OC2N Komplementär-Ausgang ist „active high“.
    = 1,  OC2N Komplementär-Ausgang ist „active low“.

    Für Kanäle die einen Komplementär Ausgang besitzen wird dieses Bit durch einen Preload gesetzt. Ist das CCPC Bit im TIM1_CR2 gesetzt, übernimmt das CC2NE Bit den neuen Wert vom Preload Bit wenn ein COM Event generiert wird.

    CC2NE – Capture Compare Channel 2 Complementary Output Enable

    Der Kanal 2 ist als Ausgang geschaltet:

    Bit 6 = CC2NE Bit = 0,  OC2N Komplementär-Ausgang ist deaktiviert.
    = 1,  OC2N Komplementär-Ausgang ist aktiviert.

    Für Kanäle die einen Komplementär Ausgang besitzen wird dieses Bit durch einen Preload gesetzt. Ist das CCPC Bit im TIM1_CR2 gesetzt, übernimmt das CC2NE Bit den neuen Wert vom Preload Bit wenn ein COM Event generiert wird.

    CC2P – Capture Compare Channel 2 Polarity

    Der Kanal 2 ist als Ausgang geschaltet:

    Bit 5 = CC2P Bit = 0,  „Compare“ Ausgang ist „active high“(Polarity).
    = 1,  „Compare“ Ausgang ist „active low“ (Polarity).

    Der Kanal 2 ist als Eingang geschaltet:

    Bit 5 = CC2P Bit = 0,  „Capture“ erfolgt auf die steigende Flanke.
    = 1,  „Capture“ erfolgt auf die fallende Flanke.

    CC2E – Capture Compare Channel 2 Enable

    Der Kanal 2 ist als Ausgang geschaltet:

    Bit 4 = CC2E Bit = 0,  „Compare“ Ausgang ist deaktiviert.
    = 1,  „Compare“ Ausgang ist aktiviert.

    Der Kanal 2 ist als Eingang geschaltet:

    Bit 4 = CC2E Bit = 0,  „Capture“ Eingang ist deaktiviert.
    = 1,  „Capture“ Eingang ist aktiviert.

    CC1NP – Capture Compare Channel 1 Complementary Output Polarity

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 3 = CC1NP Bit = 0,  OC1N Komplementär-Ausgang ist „active high“.
    = 1,  OC1N Komplementär-Ausgang ist „active low“.

    Für Kanäle die einen Komplementär Ausgang besitzen wird dieses Bit durch einen Preload gesetzt. Ist das CCPC Bit im TIM1_CR2 gesetzt, übernimmt das CC1NE Bit den neuen Wert vom Preload Bit wenn ein COM Event generiert wird.

    CC1NE – Capture Compare Channel 1 Complementary Output Enable

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 2 = CC1NE Bit = 0,  OC1N Komplementär-Ausgang ist deaktiviert.
    = 1,  OC1N Komplementär-Ausgang ist aktiviert.

    Für Kanäle die einen Komplementär Ausgang besitzen wird dieses Bit durch einen Preload gesetzt. Ist das CCPC Bit im TIM1_CR2 gesetzt, übernimmt das CC1NE Bit den neuen Wert vom Preload Bit wenn ein COM Event generiert wird.

    CC1P – Capture Compare Channel 1 Polarity

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 1 = CC1P Bit = 0,  „Compare“ Ausgang ist „active high“(Polarity).
    = 1,  „Compare“ Ausgang ist „active low“ (Polarity).

    Der Kanal 1 ist als Eingang geschaltet:

    Bit 1 = CC1P Bit = 0,  „Capture“ erfolgt auf die steigende Flanke.
    = 1,  „Capture“ erfolgt auf die fallende Flanke.

    CC1E – Capture Compare Channel 1 Enable

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 0 = CC1E Bit = 0,  „Compare“ Ausgang ist deaktiviert.
    = 1,  „Compare“ Ausgang ist aktiviert.

    Der Kanal 1 ist als Eingang geschaltet:

    Bit 0 = CC1E Bit = 0,  „Capture“ Eingang ist deaktiviert.
    = 1,  „Capture“ Eingang ist aktiviert.

    Das Capture Compare Enable Register 2 (TIM1_CCER2)

    Das TIM1_CCER2 Register beinhaltet die Einstellungen für die Kanäle 3 und 4 des Timers 1.

    Die Konfigurations-Bits haben wieder je nach Einstellung (Eingang/Ausgang) unterschiedliche Bedeutungen. Nur die Bits 0 und 1 sind relevant in diesem Register.

    TIM1_CCER2 Register - Cap / Com Enable Register                                      (TIMER1 Adresse = 0x00.525Dh, im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_CCER2 reserviert reserviert CC4P CC4E CC3NP CC3NE CC3P CC3E
    Reset Wert 0 0 0 0 0 0 0 0

    CC4P – Capture Compare Channel 4 Polarity

    Der Kanal 4 ist als Ausgang geschaltet:

    Bit 5 = CC4P Bit = 0,  „Compare“ Ausgang ist „active high“(Polarity).
    = 1,  „Compare“ Ausgang ist „active low“ (Polarity).

    Der Kanal 4 ist als Eingang geschaltet:

    Bit 5 = CC4P Bit = 0,  „Capture“ erfolgt auf die steigende Flanke.
    = 1,  „Capture“ erfolgt auf die fallende Flanke.

    CC4E – Capture Compare Channel 4 Enable

    Der Kanal 4 ist als Ausgang geschaltet:

    Bit 4 = CC4E Bit = 0,  „Compare“ Ausgang ist deaktiviert.
    = 1,  „Compare“ Ausgang ist aktiviert.

    Der Kanal 4 ist als Eingang geschaltet:

    Bit 4 = CC4E Bit = 0,  „Capture“ Eingang ist deaktiviert.
    = 1,  „Capture“ Eingang ist aktiviert.

    CC3NP – Capture Compare Channel 3 Complementary Output Polarity

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 3 = CC3NP Bit = 0,  OC1N Komplementär-Ausgang ist „active high“.
    = 1,  OC1N Komplementär-Ausgang ist „active low“.

    Für Kanäle die einen Komplementär Ausgang besitzen wird dieses Bit durch einen Preload gesetzt. Ist das CCPC Bit im TIM1_CR2 gesetzt, übernimmt das CC1NE Bit den neuen Wert vom Preload Bit wenn ein COM Event generiert wird.

    CC3NE – Capture Compare Channel 3 Complementary Output Enable

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 2 = CC3NE Bit = 0,  OC1N Komplementär-Ausgang ist deaktiviert.
    = 1,  OC1N Komplementär-Ausgang ist aktiviert.

    Für Kanäle die einen Komplementär Ausgang besitzen wird dieses Bit durch einen Preload gesetzt. Ist das CCPC Bit im TIM1_CR2 gesetzt, übernimmt das CC1NE Bit den neuen Wert vom Preload Bit wenn ein COM Event generiert wird.

    CC3P – Capture Compare Channel 3 Polarity

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 1 = CC3P Bit = 0,  „Compare“ Ausgang ist „active high“(Polarity).
    = 1,  „Compare“ Ausgang ist „active low“ (Polarity).

    Der Kanal 1 ist als Eingang geschaltet:

    Bit 1 = CC3P Bit = 0,  „Capture“ erfolgt auf die steigende Flanke.
    = 1,  „Capture“ erfolgt auf die fallende Flanke.

    CC3E – Capture Compare Channel 3 Enable

    Der Kanal 1 ist als Ausgang geschaltet:

    Bit 0 = CC3E Bit = 0,  „Compare“ Ausgang ist deaktiviert.
    = 1,  „Compare“ Ausgang ist aktiviert.

    Der Kanal 1 ist als Eingang geschaltet:

    Bit 0 = CC3E Bit = 0,  „Capture“ Eingang ist deaktiviert.
    = 1,  „Capture“ Eingang ist aktiviert.

    Die Counter Register (TIM1_CNTRH & TIM1_CNTRL)

    Der Zugriff auf den eigentliche Zähler des Timer1 erfolgt über den Zugriff auf die beiden Zählerregister TIM1_CNTRH und TIM1_CNTRL , welche sowohl gelesen als auch geschrieben werden können. Die Sequenz zum Lesen der beiden Register ist, erst das High-Byte dann das Low-Byte, Details dazu findet man unter „2. Der 16 Bit Zähler des Timer 1“.

    Im Abwärtszähler Modus werden die beiden Register nach dem Erreichen des Wertes Null (Update Event) aus den Auto Reload Registern automatisch neu geladen.

    TIM1_CNTRH Register - Counter Register High                                     (TIMER1 Adresse = 0x00.525Eh im STM8S
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_CNTRH CNT[15] CNT[14] CNT[13] CNT[12] CNT[11] CNT[10] CNT[9] CNT[8]
    Reset Wert 0 0 0 0 0 0 0 0

    TIM1_CNTRL Register - Counter Register Low                                  (TIMER1 Adresse = 0x00.525Fh im STM8S
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_CNTRL CNT[7] CNT[6] CNT[5] CNT[4] CNT[3] CNT[2] CNT[1] CNT[0]
    Reset Wert 0 0 0 0 0 0 0 0

    CNT[15:8] – Counter Register High Byte

    Über die Adresse 00.525Eh kann beispielsweise bei einem STM8S105 auf das High-Byte des Timer1 zugegriffen werden.

    CNT[7:0] – Counter Register Low Byte

    Über die Adresse 00.525Eh kann beispielsweise bei einem STM8S105 auf das High-Byte des Timer1 zugegriffen werden.

    Die Prescaler Register (TIM1_PSCRH & TIM1_PSCRL)

    Der 16 Bit Zähler des Timer 1 kann mit internen oder externen Taktsignalen betrieben werden. Der ausgewählte Takt wird über einen 16 Bit Prescaler geführt und kann so den Erfordernissen angepasst werden.

    Die Einstellung des Prescalers erfolgt über die beiden Register TIM1_PSCRH und TIM1_PSCRL. Schreibvorgänge auf diese beiden Register erfolgen über „Schattenregister“ welche erst bei einem Update Event in die Prescaler Register geladen werden.

    Das Prescaler-Registerpaar erlaubt die Einstellung des Teilers von 1 bis 65365.

    TIM1_PSCRH Register - Pre Scaler Register High                                      (TIMER1 Adresse = 0x00.5260h im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_PSCRH PSC[15] PSC[14] PSC[13] PSC[12] PSC[11] PSC[10] PSC[9] PSC[8]
    Reset Wert 0 0 0 0 0 0 0 0

    TIM1_PSCRL Register - Pre Scaler Register Low                                            (TIMER1 Adresse = 0x00.5261h im STM8S)
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_PSCRL PSC[7] PSC[6] PSC[5] PSC[4] PSC[3] PSC[2] PSC[1] PSC[0]
    Reset Wert 0 0 0 0 0 0 0 0

    PSC[15:8] – Prescaler Register High Byte

    Die PSC[15:8] Bits beinhalten die höherwertigeren 8 Bits des Teilerfaktors.

    PSC[7:0] – Prescaler Register Low Byte

    Die PSC[7:0] Bits beinhalten die niedrigwertigeren 8 Bits des Teilerfaktors.

    Die Auto Reload Register (TIM1_ARRH & TIM1_ARRL)

    Parallel zum 16-Bit Zähler befindet sich ein 16-Bit „Auto Reload“ Register-Paar das wie gerade beschrieben, als Referenz-Register für den maximalen Zählerstand genutzt wird. Das Auto-Reload Register ist ebenfalls durch zwei getrennte Zugriffe auf das „High“-Byte, TIMn_ARRHund das „Low“-Byte, TIMn_ARRL sowohl lesbar als auch beschreibbar.

    TIM1_ARRH Register - Auto Reload Register High                                 (TIMER1 Adresse= 0x00.5262h, im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_ARRH ARR[15] ARR[14] ARR[13] ARR[12] ARR[11] ARR[10] ARR[9] ARR[8]
    Reset Wert 1 1 1 1 1 1 1 1

    TIM1_ARRL Register - Auto Reload Register Low                                              (TIMER1 Adresse = 0x00.5263h im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_ARRL ARR[7] ARR[6] ARR[5] ARR[4] ARR[3] ARR[2] ARR[1] ARR[0]
    Reset Wert 1 1 1 1 1 1 1 1

    Wichtig ist in diesem Zusammenhang dass der Zähler durch einen Wert „0x0000h“ im TIMn_ARR Register blockiert wird, da dann Zählerstand und ARR-Wert immer „null“ sind. Neutral verhält sich das ARR-Register wenn ein Wert von 0xFFFFh eingetragen wird, damit der maximal mögliche Zählerstand erreicht wird.

    Zu Beachten:

    Bei einem Schreibvorgang des ARR-Registers muß das TIMn_ARRH Byte zuerst beschrieben werden. Der Update des ARR-Shadow Registers wird blockiert sobald das TIMn_ARRH Byte geschrieben wurde und bleibt blockiert bis das TIMn_ARRL Register beschrieben wird. Diese Vorgabe schließt die Benutzung eines LDW ( Load Word) Befehls aus da dieser erst das Low-Byte beschreibt!

    Das Auto Reload Register ist doppelt gepuffert, d.h. das eigentlich Register das mit dem Zähler verglichen wird ist das parallel liegende „ ARR Shadow“ Register, welches durch einen Update Event aus dem ARR Register geladen wird. Damit wird ein möglicher undefinierter Übergang bei einer Änderung innerhalb eines Zählerzyklus vermieden.

    Keine Regel ohne Ausnahme - das ARPE-Bit (Bit 7) im TIMn_CR1 Register ermöglicht es, wie bereits beschrieben, diese Funktionalität zu umgehen. Wird das Bit ARPE auf „0“ gesetzt so wirkt ein Schreibvorgang unmittelbar auf das „Shadow“-Register, sollte dies von der Anwendung gefordert werden.

    Das Repetition Counter Register (TIM1_RCR)

    Der Inhalt des Repetition Counter Registers wird bei einem Update Event in das Repetition Counter Shadow Register geladen. Der Repetition Counter (Wiederholungszähler) ist ein Abwärtszähler der bei Erreichen des Wertes „Null“ einen UEV und/oder einen Interrupt auslöst. Dabei wird auch das Shadow Register in den Zähler geladen.

    Ist der Repetition Counter nicht „Null“ wird kein UEV (Update Event) erzeugt.

    TIM1_RCR Register - Repetition Counter Register                                          (TIMER1 Adresse = 0x00.5263h im STM8S
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_ARRL REP[7] REP[6] REP[5] REP[4] REP[3] REP[2] REP[1] REP[0]
    Reset Wert 0 0 0 0 0 0 0 0

    Die Capture Compare Register (TIM1_CCRiH, TIM1_CCRiL)

    Für jeden der vier Cap/Com Kanäle „i“ im Timer 1 gibt es zwei 8-Bit Register die den jeweiligen Cap/Com-Wert aufnehmen. Der Zugriff auf diese Register erfolgt, wie bei den anderen 16-Bit Registern in den Timern über jeweils ein High“-Byte und ein „Low“-Byte mit eigenen Adressen.

    TIM1_CCRiH Register - Cap/Com Register High                                 (TIMER1 Adresse = 0x00.5265/67/69/6Bh, im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIMn_CCRiH CCRi[15] CCRi[14] CCRi[13] CCRi[12] CCRi[11] CCRi[10] CCRi[9] CCRi[8]
    Reset Wert 0 0 0 0 0 0 0 0

    TIM1_CCRiL Register - Cap/Com Register Low                                   (TIMER1 Adresse = 0x00.5266/68/6A/6Ch, im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIMn_CCRiL CCRi[7] CCRi[6] CCRi[5] CCRi[4] CCRi[3] CCRi[2] CCRi[1] CCRi[0]
    Reset Wert 0 0 0 0 0 0 0 0

    Die Cap/Com Register sind für Schreib/Lese-Voränge ebenfalls durch ein „Shadow“-Register „gepuffert“.

    In den einzelnen Modi beinhaltet das Cap/Com Registerpaar folgende Werte:

    Modus Signal Beschreibung
    Compare Mode Pause Dauer der Phase 1 eines zyklischen Signals
    One Shot Mode Delay Dauer des Delays nach dem Triggerevent
    PWM Edge Aligned Mode Puls Aktive Phase des PWM Signals
    PWM Center Aligned Mode 0.5 x Pause 50% der passiven Phase des PWM Signals

    Das Break Register (TIM1_BKR)

    TIM1_BKR Register - Event Generation Register                                              (TIMER1 Adresse = 0x00.5257h im STM8S
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_BKR MOE AOE BKP BKE OSSR OSSI LOCK[1] LOCK[0]
    Reset Wert 0 0 0 0 0 0 0 0

    MOE –  Main Output E nable

    Dieses Bit wird asynchron durch die Hardware gelöscht wenn ein aktives „BREAK“ Signal am Pin TIM1_BKIN des Timers 1 auftritt. Das MOE Bit kann durch Software zur Freigabe der Timer Ausgänge gesetzt werden wobei zusätzlich jeder einzelne Ausgang durch das entsprechende „CCiE “ bzw. „CCiEN“ Bit in den TIM1_CCER1 und TIM1_CCER2 Registern freigegeben werden muß.

    Ist das AOE Bit ebenfalls gesetzt so wird automatisch das MOE Bit auch bei einem UEV (Update Event) gesetzt.

    Bit 7 = MOE Bit = 0,  die Timer 1 Ausgänge OCi und OCiN sind global gesperrt bzw. im "Idle" Status
    = 1,  die Timer 1 Ausgänge OCi und OCiN sind freigegeben, falls die jeweiligen Freigabe Bits in den TIM1_CCERi Registern freigegeben sind.

    AOE – Automatic Output E nable

    Ist das AOE Bit gesetzt so wird bei einem Zähler Update Event automatisch das MOE Bit gesetzt.

    Bit 6 = AOE Bit = 0,  kein Einfluß auf das MOE Bit.
    = 1,  das MOE Bit wird automatisch bei einem UEV (Update Event) gesetzt.
    LOCK Level:  Das AOE Bit kann nicht mehr modifiziert werden wenn der „LOCK Level“ in den LOCK Bits grösser 0x00b ist. Wird der LOCK Level gesetzt muß das AOE Bit (falls gewünscht) gleichzeitig gesetzt werden, da danach eine Modifikation nicht mehr möglich ist. Siehe LOCK[1:0] Bits weiter unten.

    BKP – Break Polarity

    Das BKP Bit bestimmt den aktiven Pegel für ein Break-Signal am Eingang TIM1_BKIN.

    Bit 5 = BKP Bit = 0,  das Breaksignal wird durch einen aktiven "low" Pegel erkannt.
    = 1,  das Breaksignal wird durch einen aktiven "high" Pegel erkannt.
    LOCK Level:  Das BKP Bit kann nicht mehr modifiziert werden wenn der „LOCK Level“ in den LOCK Bits grösser 0x00b ist. Wird der LOCK Level gesetzt muß das BKP Bit (falls gewünscht) gleichzeitig gesetzt werden, da danach eine Modifikation nicht mehr möglich ist. Siehe LOCK[1:0] Bits weiter unten.

    BKE – Break Enable

    Das BKE Bit aktiviert oder sperrt ein Break-Signal am Eingang TIM1_BKIN.

    Bit 4 = BKE Bit = 0,  das Breaksignal ist gesperrt.
    = 1,  das Breaksignal ist freigegeben.
    LOCK Level:  Das BKE Bit kann nicht mehr modifiziert werden wenn der „LOCK Level“ in den LOCK Bits grösser 0x00b ist. Wird der LOCK Level gesetzt muß das BKE Bit (falls gewünscht) gleichzeitig gesetzt werden, da danach eine Modifikation nicht mehr möglich ist. Siehe LOCK[1:0] Bits weiter unten.

    OSSR – Off State Select Run

    Das OSSR Bit wird im Run-Modus verwendet wenn das MOE Bit = 1 ist und nimmt Einfluss auf die komplementären Ausgänge OCi/OCiN, sofern diese als Ausgang konfiguriert sind.

    Bit 3 = OSSR Bit = 0,  die jeweiligen Signale OCi bzw. OCiN sind gesperrt. Die Enable Signale CCiE bzw. CCINE im TIM1_CCER1 bzw. TIM1_CCER2 Register sind auf "low" ("0") gesetzt.
    = 1,  die jeweiligen Signale OCi bzw. OCiN sind mit dem eingestellten "inactive" Pegel freigegeben und liefern diesen Pegel an den physikalischen Ausgang. CCiE und CCiNE im entsprechenden Register TIM1_CCER1 bzw. TIM1_CCER2 sind auf "high" gesetzt.
    LOCK Level:  Das OSSR Bit kann nicht mehr modifiziert werden wenn der „LOCK Level“ in den LOCK Bits grösser 0x01b ist. Wird der LOCK Level auf "2" bzw. "3" gesetzt muß das OSSR Bit (falls gewünscht) gleichzeitig gesetzt werden, da danach eine Modifikation nicht mehr möglich ist. Siehe LOCK[1:0] Bits weiter unten.

    OSSI – Off State Select Idle

    Das OSSI Bit wird im Idle-Modus verwendet wenn das MOE Bit = 0 ist. Es ist ebenfalls nur wirksam wenn die Kanäle OCi und OCiN als Ausgänge konfiguriert sind.

    Bit 2 = OSSI Bit = 0,  die OCi Ausgänge sind gesperrt (die entsprechenden CCiE Bits in den TIM1_CCERi Registern sind auf "low" Pegel).
    = 1,  die OCi Ausgänge werden auf die om Register TIM1_OISR definierten "Idle Pegel" gelegtund die CCiE Bits in den TIM1_CCER Registern aktiviert.
    LOCK Level:  Das OSSI Bit kann nicht mehr modifiziert werden wenn der „LOCK Level“ in den LOCK Bits grösser 0x01b ist. Wird der LOCK Level auf "2" bzw. "3" gesetzt muß das OSSI Bit (falls gewünscht) gleichzeitig gesetzt werden, da nach einem ersten Schreibzugriff eine Modifikation nicht mehr möglich ist. Siehe LOCK[1:0] Bits weiter unten.

    LOCK [1:0] – LOCK Bits

    Diese beiden Bits ermöglichen einen Schreibschutz gegen versehentliches Beschreiben und „Umkonfigurieren“ durch die Software. Der Schreibschutz betrifft die Register TIM1_BKR, TIM1_CCER1 und TIM1_CCER2, sowie die Register TIM1_OISR und TIM1_CCMRi Register. Entsprechend der nachfolgenden Tabelle werden die aufgeführten Bits im jeweiligen Register blockiert.

    Einfluß des LOCK-Level auf die Register
    LOCK[1:0) TIM1_BKR TIM1_OISR TIM1_CCERi TIM1_CCMRi
    00 kein lock kein lock kein lock kein lock
    01 BKE/BKP/AOE OISi kein lock kein lock
    10 „plus“ OSSR/OSSI CCiP kein lock
    11 OCiM / OCiPE

    Das Deadtime Register (TIM1_DTR)

    TIM1_DTR Register - Dead Time Register                                                         (TIMER1 Adresse = 0x00.526Eh im STM8S
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_BKR DTG[7] DTG[6] DTG[5] DTG[4] DTG[3] DTG[2] DTG[1] DTG[0]
    Reset Wert 0 0 0 0 0 0 0 0

    DTG [7:0] – Dead Time Generation

    Die 8 Bit dieses Registers definieren die Totzeit zwischen den regulären (TIM1_CHi) und den komplementären Ausgängen (TIM1_CHiN) des Timer 1. Dabei werden die Bits [7:5], zur Auswahl verschiedener Berechnungsformeln benutzt (Details dazu im Kapitel „Totzeiteinstellung der Ausgänge“).

    DTG[7:5]

    DT (Totzeit in Takten)

    mit tdtg

    0XX

    DT = DTG[7:0] * tdtg

    tdtg = 1 * fCK_PSC

    10X

    DT = (64 + DTG[5:0]) * tdtg

    tdtg = 2 * fCK_PSC

    110

    DT = (32 + DTG[4:0]) * tdtg

    tdtg = 8 * fCK_PSC

    111

    DT = (32 + DTG[4:0]) * tdtg

    tdtg = 16 * fCK_PSC

    Ist DTG[7] = 0, so liefern die verbleibenden 7 Bits den Multiplikator für tdig (Taktzeit von fCK_PSC) . Für DTG[7] = 1 und DTG[6] = 0 werden nur noch die 6 niedrigwertigeren Bits als Multiplikator verwendet und für DTG[7] und DTG[[6] = 1 die 5 niedrigwertigeren Bits. Gleichzeitig wird für den Basiswert tdig ein Vielfaches des Taktwertes verwendet, daher kann mit der Einstellung der 8 Bit im Register TIM1_DTR ein grosser Bereich für die Totzeit dargestellt werden.

    Das Idle State Register (TIM1_OISR)

    TIM1_OISR Register - Output Idle State Register                                         (TIMER1 Adresse = 0x00.526Eh im STM8S )
    Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    TIM1_OISR reserviert OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1
    Reset Wert 0 0 0 0 0 0 0 0

    Die 7 aktiven Bits des Idle State Registers definieren den logischen Zustand der Timer Ausgänge wenn das MOE Bit (im Register TIM1_BKR) = 0 gesetzt wird

    OIS4 – Output Idle State (Ausgang 4)

    Bit 6 = OIS4 Bit = 0,  Der Ausgang 4 ist im Idle State auf "low" Pegel.
    = 1,  der Ausgang 4 ist im Idle State auf "high" Pegel.

    OIS3N - Output Idle State (komplementärer Ausgang 3)

    Bit 5 = OIS3N Bit = 0,  Der komplementäre Ausgang 3 ist im Idle State auf "low" Pegel.
    = 1,  der komplementäre Ausgang 3 ist im Idle State auf "high" Pegel.

    OIS3 – Output Idle State (Ausgang 3)

    Bit 4 = OIS3 Bit = 0,  Der Ausgang 3 ist im Idle State auf "low" Pegel.
    = 1,  der Ausgang 3 ist im Idle State auf "high" Pegel.

    OIS2N - Output Idle S tate (komplementärer Ausgang 2)

    Bit 3 = OIS2N Bit = 0,  Der komplementäre Ausgang 2 ist im Idle State auf "low" Pegel.
    = 1,  der komplementäre Ausgang 2 ist im Idle State auf "high" Pegel.

    OIS2 – Output Idle S tate (Ausgang 2)

    Bit 2 = OIS2 Bit = 0,  Der Ausgang 2 ist im Idle State auf "low" Pegel.
    = 1,  der Ausgang 2 ist im Idle State auf "high" Pegel.

    OIS1N - Output Idle State (komplementärer Ausgang 1)

    Bit 1 = OIS1N Bit = 0,  Der komplementäre Ausgang 1 ist im Idle State auf "low" Pegel.
    = 1,  der komplementäre Ausgang 1 ist im Idle State auf "high" Pegel.

    OIS1 – Output Idle S tate (Ausgang 1)

    Bit 1 = OIS1 Bit = 0,  Der Ausgang 1 ist im Idle State auf "low" Pegel.
    = 1,  der Ausgang 1 ist im Idle State auf "high" Pegel.

    Copyright Notiz

    Dieses Dokument sowie dessen Inhalte, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2020) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.