Die vorliegende Erfindung bezieht sich auf ein Zeitgeber-Modul zur
Erzeugung von Interrupts für ein System, das einen Echtzeit-Interrupt zur Verfügung
stellt.
In einem mit einem Microcontroller ausgerüsteten System, das
einen Echtzeit-Interrupt (RTI) zur Verfügung stellt, können Interrupts
periodisch oder basierend auf Vergleichswerten erzeugt werden, unabhängig von
der Softwareschleife oder dem CPU-Zustand. Primäre Funktion des RTI ist es,
eine programmierbare Taktperiode zur Verfügung zu stellen, die von der Systemtaktdomäne
getrennt ist. Damit kann der RTI benutzt werden, um periodische Interrupts für
ein Betriebssystem zur Verfügung zu stellen. Er kann auch zum Messen der vergangenen
Zeit innerhalb einer Anwendung oder zur Messung von Zeitintervallen für das
Benchmarking von Programmcode verwendet werden.
In einer Umgebung, in der eine Kommunikationssteuerung allen Knoten,
die an einen Bus (z.B. TTCAM, TTP/C, Flexray) angeschlossen sind, eine globale Zeit
zur Verfügung stellt, müssen zeitgetriggerte Anwendungen mit einer solchen
globalen Zeit synchronisiert sein. Falls die globale Zeit jedoch aufgrund eines
Bus-Problems ausfällt, sollte die Anwendung ohne große Beeinträchtigung
des Betriebsablaufs weiterlaufen.
Betriebssysteme in einer solchen Umgebung erfordern verschiedene Zeitbasen
mit unterschiedlichen Auflösungen, die zwischen wenigen hundert Nanosekunden
und Stunden liegen. Herkömmlicherweise müssen große Zähler (>
64 Bit) verwendet werden, um den gesamten Bereich mit einem für kurze Zeitbasen
benötigten Hochfrequenztakt abzudecken. Für manche Anwendungen, die in
einer derartigen Umgebung laufen, beispielsweise sicherheitsrelevante Automobil-Steuerungsanwendungen,
besteht eine weitere Erfordernis darin, genau zu wissen, wann bestimmte periphere
Ereignisse auftreten.
In dem Buch „PC Hardware" (Hans-Peter Messmer, Addison-Wesley,
5. Auflage 1998, Seiten 693 bis 705) ist ein programmierbarer Intervalltimer (PIT)
beschreiben, mit dem drei unabhängige Interrupts erzeugt werden können.
Der PIT enthält drei separate Abwärts-Zähler, die unabhängig
voneinander mit unterschiedlichen Taktraten angesteuert werden können
Die US 5 708 817 zeigt eine
Schaltung zur Verzögerung eines Interrupt-Signals. Die Schaltung weist einen
Zähler auf, der solange aufwärts zählt, bis er bei Erreichen eines
in einem Register gespeicherten Vergleichswerts von einem Komparator gestoppt wird.
US 5 975 739 offenbart einen Steuerprozessor
mit einem Zeitgeber-Modul mit freilaufendem Zähler. Ein Komparator gibt ein
Interrupt-Signal ab, wenn der Wert des freilaufenden Zählers einen in einem
Vergleichsregister gespeicherten Wert erreicht.
Aufgabe der vorliegenden Erfindung ist es, ein Zeitgeber-Modul zur
Erzeugung von Interrupts zur Verfügung zu stellen, welches auf eine globale
Zeit synchronisiert ist, aber bei Ausfall des globalen Zeitsignals ohne große
Beeinträchtigung weiterläuft.
Insbesondere ist ein Zeitgeber-Modul nach Anspruch 1 vorgesehen. Da
der freilaufende Zähler mit dem Vorskalierungszähler kaskadiert ist und
die Interrupt-Erzeugungseinheiten jeweils einen konfigurierbaren Vergleichswert
verwenden, können Interrupts in einem großen Bereich von Zeitbasen auch
mit nur zwei Zählern mäßiger Größe, beispielsweise 32-Bit-Zählern,
erzeugt werden.
Wenigstens ein Zählerblock wird wahlweise entweder von einem
internen Takt, dem Echtzeit-Interrupt-Taktsignal, oder von einem externen Takt gesteuert,
der beispielsweise von einer Kommunikationssteuerung, wie sie manche zeitgetriggerte
Anwendungen benötigen, zur Verfügung gestellt wird. Der externe Takt wird
überwacht, indem geprüft wird, ob der externe Takt innerhalb eines Zeitfensters
eintrifft, welches durch eine untere Grenze, die in einem Register für einen
unteren Zeitbasis-Vergleichswert gespeichert ist, und einer oberen Grenze, die in
einem Register für einen oberen Zeitbasis-Vergleichswert gespeichert ist, definiert
ist. Wenn der Wert des Vorskalierungszählers das vorherbestimmte Zeitfenster
verläßt, bevor der externe Takt detektiert ist, so zeigt dies an, daß
der externe Takt ausgefallen ist, und die Inkrementierung des freilaufenden Zählers
in dem Zählerblock wird von extern auf intern umgeschaltet. Um den durch das
Zurückschalten auf den internen Takt in das Betriebssystem eingebrachten Jitter
zu minimieren, sollten externe und interne Takte synchronisiert sein. Die Synchronisierung
zwischen den externen und internen Takten kann durch Software erfolgen.
Bei der Verwendung von zwei Zählerblöcken arbeiten beide
Zählerblöcke unabhängig voneinander und können so konfiguriert
werden, daß sie unterschiedliche Zeitauflösungen zur Verfügung stellen.
In jedem Zählerblock ist der freilaufende Zähler mit dem Vorskalierungszähler
kaskadiert. Die Interrupt-Erzeugungseinheiten verwenden jeweils einen konfigurierbaren
Vergleichswert. Folglich können Interrupts in einem weiten Bereich von Zeitbasen
bei unterschiedlichen Zeitauflösungen erzeugt werden, selbst wenn in jedem
Zählerblock Zähler mäßiger Größe, beispielsweise 32-Bit-Zähler,
verwendet werden.
In bevorzugten Ausführungsformen ist der Vorskalierungszähler
ein Aufwärtszähler, der mit einem Vergleichsregister kombiniert ist. Der
freilaufende Zähler ist ebenfalls ein Aufwärtszähler und wird jedes
Mal inkrementiert, wenn der Vorskalierungszähler den Vergleichswert erreicht.
Die Ausgestaltung mit Aufwärtszählern vereinfacht die Bestimmung der Ortszeit
in großem Maße, da eine derartige Bestimmung im wesentlichen nur das Auslesen
der beiden Zählerstände der kaskadierten Zähler beinhaltet und eine
Softwareberechnung zur Bestimmung der Anzahl der Taktzyklen, wie es bei Abwärtszählern
erforderlich wäre, vermieden wird.
Wenn zwei Zählerblöcke vorgesehen sind, können die
Vergleichsregister in den Interrupt-Erzeugungseinheiten für die beiden Zählerblöcke
individuell konfiguriert werden. Für Betriebssysteme, die periodische Zeitintervalle
benötigen, bieten bevorzugte Ausführungsformen eine automatische Aktualisierungsmöglichkeit
für den Vergleichsregisterinhalt. Bei jeder Vergleichsübereinstimmung
wird ein Aktualisierungswert, der in einem Aktualisierungsvergleichsregister gespeichert
ist, zu dem Vergleichswert in dem Vergleichsregister addiert. Der Wert, welcher
in dem Aktualisierungsvergleichsregister gespeichert ist, bestimmt das Zeitintervall,
bis der nächste Interrupt erzeugt wird.
In weiteren bevorzugten Ausführungsformen ist eine Zeitstempelfunktionalität
verwirklicht, indem jedem der Zähler ein Erfassungsregister zugeordnet ist,
um die jeweiligen augenblicklichen Zählerstände als Reaktion auf ein externes
Ereignis festzuhalten. Da die Zähler als Aufwärtszähler ausgeführt
sind, ist es einfach, die lokale Zeit aus den Zählerständen zu bestimmen,
die in den Erfassungsregistern gespeichert sind.
Weitere Merkmale und Vorteile der Erfindung gehen aus der folgenden
detaillierten Beschreibung mit Bezug auf die Zeichnungen hervor. In den Zeichnungen
zeigt:
1 ein Schaltbild eines Zeitgeber-Moduls gemäß
der Erfindung mit zwei Zählerblöcken;
2 ein Schaltbild der Zeitbasissteuereinheit des Zeitgeber-Moduls
aus 1;
3 ein erstes Zeitdiagramm für den Zählerstand
vom Vorskalierungszähler des Zeitgeber-Moduls aus 1
in bezug auf ein externes Taktsignal; und
4 ein zweites Zeitdiagramm für den Zählerstand
vom Vorskalierungszähler des Zeitgeber-Moduls aus 1
in bezug auf ein externes Taktsignal.
In 1 ist ein Schaltbild eines dualen
Zeitgeber-Moduls 110 zur Erzeugung von Interrupts für ein System mit
einem Microcontroller dargestellt, das ein dediziertes Echtzeit-Interrupt-Taktsignal
RTICLK verwendet. Das duale Zeitgeber-Modul 110 weist einen ersten Zählerblock
CB0 und einen zweiten Zählerblock CB1 auf.
Der erste Zählerblock CB0 besitzt einen ersten Vorskalierungszähler
PSC0, der von dem Echtzeit-Interrupt-Taktsignal RTICLK inkrementiert wird, welches
vom System zur Verfügung gestellt wird und ein erstes Vorskalierungs-Vergleichswert-Register
PCVR0 zum Speichern eines ersten konfigurierbaren Wertes PCV0. Ein erster Komparator
112 vergleicht den augenblicklichen Zählerstand des ersten Skalierungszählers
PSC0 mit dem konfigurierbaren Wert PCV0. Wenn der augenblickliche Zählerstand
des ersten Vorskalierungszählers PSC0 mit dem konfigurierbaren Wert PCV0 übereinstimmt,
gibt der erste Komparator 112 ein erstes internes Taktsignal CLKINT0 aus
und setzt den ersten Vorskalierungszähler PSC0 auf Null zurück.
Der erste Zählerblock CB0 weist weiterhin einen ersten freilaufenden
Zähler FRC0 auf, der wahlweise entweder von dem ersten internen Taktsignal
CLKINT0 oder von einem externen Taktsignal NTU inkrementiert werden kann. Welches
dieser Signale den ersten freilaufenden Zähler FRC0 inkrementiert, ist durch
einen Wahlschalter 114 bestimmt, der von einer Zeitbasis-Steuereinheit
TBCU gesteuert wird, die weiter unten ausführlich beschrieben ist. Wenn der
freilaufende Zähler FRC0 überläuft, wird ein Interrupt für einen
vektorisierten Interruptmanager erzeugt, der in 1 nicht
gezeigt ist.
Der zweite Zählerblock weist einen zweiten Vorskalierungszähler
PSC1 auf, der ebenfalls von dem Echtzeit-Interrupt-Taktsignal RTICLK inkrementiert
wird. In einem zweiten Vorskalierungs-Vergleichswert-Register PCVR1 ist ein zweiter
konfigurierbarer Wert PCV1 gespeichert, der von einem zweiten Komparator
212 mit dem augenblicklichen Zählerstand des zweiten Vorskalierungszählers
PSC1 verglichen wird. Der zweite Zählerblock CB1 weist weiterhin einen zweiten
freilaufenden Zähler FRC1 auf, der von einem zweiten internen Taktsignal CLKINT1
aus dem zweiten Komparator 212 inkrementiert wird, wenn der augenblickliche
Zählerstand des zweiten Vorskalierungszählers PSC1 mit dem konfigurierbaren
Wert PCV1 übereinstimmt. Bei einer Übereinstimmung wird der zweite Vorskalierungszähler
PSC1 auf Null zurückgesetzt.
Da der erste Vorskalierungszähler PSC0 und der zweite Vorskalierungszähler
PSC1 durch Konfigurieren der Werte in dem ersten Vorskalierungs-Vergleichswert-Register
PCVR0 und dem zweiten Vorskalierungs-Vergleichswert-Register PCVR1, jeweils getrennt
programmierbar sind, stellen der erste Zählerblock CB0 und
der zweite Zählerblock CB1 unterschiedliche unabhängige Zeitbasen für
das Zeitgeber-Modul 110 zur Verfügung, obwohl sie dasselbe Echtzeit-Interrupt-Taktsignal
RTICLK verwenden.
Das duale Zeitgeber-Modul 110 umfaßt weiterhin vier
Interrupt-Erzeugungseinheiten IGU0, IGU1, IGU2, IGU3, zur Bereitstellung von Interrupt-Signalen
INT0, INT1, INT2, INT3 und Anforderungssignalen für einen Speicher-Direktzugriff
DMAREQ0, DMAREQ1, DMAREQ2, DMAREQ3.
Jede dieser Interrupt-Erzeugungseinheiten IGU0, IGU1, IGU2, IGU3 umfaßt
ein Vergleichswert-Register CVR0, CVR1, CVR2, CVR3 zum Speichern eines Vergleichswertes,
und einen Komparator 120, 122, 124, 126, zum
Vergleichen des Vergleichswertes aus dem jeweiligen Vergleichswert-Register mit
dem augenblicklichen Zählerstand eines ausgewählten freilaufenden Zählers
FRC0, FRC1. Jede der Interrupt-Erzeugungseinheiten IGU0, IGU1, IGU2, IGU3 umfaßt
weiterhin ein Aktualisierungswert-Register UVR0, UVR1, UVR2, UVR3, zum Speichern
eines Aktualisierungswertes, und einen Addierer 130, 132,
134, 136, zum Addieren des Aktualisierungswertes zu dem im jeweiligen
Vergleichswert-Register CVR0, CVR1, CVR2, CVR3 gespeicherten Vergleichswert.
Um die Eingänge der Interrupt-Erzeugungseinheiten IGU0, IGU1,
IGU2, IGU3 wahlweise mit einem der Zählerblöcke CB0, CB1 zu verbinden,
weist das duale Zeitgeber-Modul 110 einen Multiplexer MUX auf, der unten
ausführlich beschrieben ist.
Die Funktion der Interrupt-Erzeugungseinheiten IGU0, IGU1, IGU2, IGU3
wird nun anhand der ersten Interrupt-Erzeugungseinheit IGU0 erklärt.
Angenommen, daß der erste freilaufende Zähler FRC0 des ersten
Zählerblocks CB0 mit der ersten Interrupt-Erzeugungseinheit IGU0 über
die Wählereinheit 140 verbunden ist, vergleicht der Komparator
120 den augenblicklichen Zählerstand des ersten freilaufenden Zählers
FRC0 mit dem Wert aus dem Vergleichswert-Register CVR0. Wenn der aktuelle Zählerstand
mit dem Wert aus dem Vergleichswert-Register CVR0 übereinstimmt, erzeugt der
Komparator 120 ein Interrupt-Signal INT0 und ein Anforderungssignal für
einen Speicher-Direktzugriff DMAREQ0. Dann wird der Aktualisierungswert, der in
dem Aktualisierungswert-Register UVR0 gespeichert ist, automatisch aktualisiert,
indem der Addierer 130 den Wert des Aktualisierungswert-Registers UVR0
zu dem Vergleichswert im Vergleichswert-Register CVR0 addiert. Dies gestattet der
Interrupt-Erzeugungseinheit IGU0 die Bereitstellung eines periodischen Interrupt-Signals
INT0, ohne die Notwendigkeit, einen neuen Wert im Vergleichswert-Register CVR0 per
Software zu berechnen. Die Periode des Interrupt-Signals INT0 wird einfach durch
Programmierung des Aktualisierungswertes in dem Aktualisierungswert-Register UVR0
konfiguriert. Darüber hinaus kann der Interrupt INT0 aktiviert oder deaktiviert
werden.
In gleicher Weise werden die anderen Interrupts INT1, INT2, INT3 und
die anderen Anforderungssignale für den Speicher-Direktzugriff DMAREQ0, DMAREQ1,
DMAREQ2, DMAREQ3 von den anderen Interrupt-Erzeugungseinheiten IGU1, IGU2, IGU3
erzeugt.
Die konfigurierbaren Werte PCV0 und PCV1, die in den Vergleichswert-Registern
PCVR0 und PCVR1 gespeichert sind, gestatten die Programmierung der Vorskalierungszähler
PSC0 und PSC1, das heißt die Programmierung eines Verhältnisses zwischen
dem Interrupttaktsignal RTICLK und einem Zwischentakt, mit welchem die freilaufenden
Zähler FRC0 und FRC1 inkrementiert werden. Dadurch kann das Zeitgeber-Modul
einfach konfiguriert werden, beispielsweise für die Verwendung in unterschiedlichen
Systemen mit unterschiedlichen Taktsignalen.
Mit dem Zeitgeber-Modul 110 kann wegen der kaskadierten Vorskalierungszähler
PSC0, PSC1 und den freilaufenden Zählern FRC0, FRC1 ein sehr weiter Periodenbereich
für die Interrupt-Signale INT0, INT1, INT2, INT3 erzielt werden, ohne daß
die Notwendigkeit für große Zähler (zum Beispiel > 64 Bit) besteht.
Mit 32-Bit-Zählern kann ein Periodenbereich von einigen Nanosekunden bis zu
Stunden oder Tagen verwirklicht werden, wobei die minimale Zeitauflösung von
der Frequenz des Interrupttaktsignals RTICLK abhängt, welche typischerweise
bis zu 400 MHz oder mehr betragen kann. Damit kann das Taktsignal im System wählbar
vom VBUS oder vom Systemtakt abgeleitet werden.
Die vier Interrupt-Erzeugungseinheiten IGU0, IGU1, IGU2, IGU3 gestatten
es dem Zeitgeber-Modul 110, vier unabhängige Interrupt-Signale INT0,
INT1, INT2, INT3 mit unterschiedlichen Perioden, die einfach konfiguriert werden
können, zur Verfügung zu stellen. Selbstverständlich ist die Anzahl
von vier Interrupt-Erzeugungseinheiten nur beispielhaft.
Die lokale Zeit kann dadurch bestimmt werden, daß einfach die
Werte des Vorskalierungszählers PSC0, bzw. PSC1 und des freilaufenden Zählers
FRC0, bzw. FRC1 ausgelesen werden. Der freilaufende Zähler muß zuerst
gelesen werden. Dies gewährleistet, daß beim CPU-Lesezyklus der Wert des
Vorskalierungszählers PSC0, bzw. PSC1 in einem Zählerregister gespeichert
wird. Der zweite Lesevorgang wird auf dieses Vorskalierungszählerregister angewandt,
welches dann den Wert vom Zählerzyklus des vorhergehenden
Lesevorgangs im Register des freilaufenden Zählers FRC0, bzw. FRC1 enthält,
wodurch gewährleistet ist, daß die Werte aus beiden Zählern exakt
demselben Zeitpunkt entsprechen. Da sowohl der Vorskalierungszähler PSC0, bzw.
PSC1 als auch der freilaufende Zähler FRC0, bzw. FRC1 Aufwärtszähler
sind, ist keine Softwareberechnung erforderlich, um die augenblickliche Zeit zu
erhalten, wie dies bei Verwendung von Abwärtszählers erforderlich wäre.
Der Multiplexer MUX besitzt vier Wählereinheiten 140,
142, 144, 146, welche in einer Vergleichssteuereinheit
CCU gesteuert werden. Jede dieser Wählereinheiten 140, 142,
144, 146 ist mit einer der Interrupt-Erzeugungseinheiten IGU0,
IGU1, IGU2, IGU3 verbunden und besitzt zwei Eingänge, die mit den freilaufenden
Zählern FRC0, FRC1 verbunden sind. Die Wählereinheiten 140,
142, 144, 146 werden einzeln gesteuert, um den Eingang
der Interrupt-Erzeugungseinheiten IGU0, IGU1, IGU2, IGU3 entweder mit dem ersten
Zählerblock CB0 oder mit dem zweiten Zählerblock CB1 zu verbinden. Jede
der Interrupt-Erzeugungseinheiten IGU0, IGU1, IGU2, IGU3 kann mit einem anderen
der beiden Zählerblocks CB0 und CB1 verbunden werden, beispielsweise können
die Eingänge von IGU0 und IGU3 mit FRC0 und die Eingänge von IGU1 und
IGU2 mit FRC1 verbunden werden oder der Eingang von IGU0 kann mit FRC0 und die Eingänge
von IGU1, IGU2 und IGU3 können mit FRC1 verbunden werden, usw.
Da jeder der beiden Zählerblocks CB0 und CB1 eine unterschiedliche
Zeitbasis zur Verfügung stellen kann, gestattet der Multiplexer MUX dem dualen
Zeitgeber-Modul 110 eine einfache und schnelle Konfiguration für die
Bereitstellung vierer unterschiedlicher Interrupt-Signale, INT0, INT1, INT2, INT3
und Anforderungssignale für einen Speicher-Direktzugriff DMAREQ0, DMAREQ1,
DMAREQ2, DMAREQ3, mit Perioden, die auf unterschiedlichen Zeitauflösungen basieren.
Daher können die Perioden innerhalb desselben dualen Zeitgeber-Moduls unter
Verwendung nur eines Taktsignales, d.h. RTICLK, einen großen Bereich von Nanosekunden
bis Stunden überdecken.
Um die Entwicklung eines Betriebssystems zu vereinfachen und den Bedarf
an CPU-Ressourcen zu verringern, wenn zeitgetriggerte Funktionalität benötigt
wird, besitzt der erste Zählerblock CB0 zusätzliche Fähigkeiten.
Der erste freilaufende Zähler FRC0 kann entweder von dem ersten internen Taktsignal
CLKINT0 oder von einer externen Taktquelle NTU getriggert werden, die beispielsweise
von einem externen Bus wie etwa TTCAN oder Flexray abgeleitet wird. Die Auswahl
zur Bestimmung, welche dieser Quellen verwendet wird, wird durch Software getroffen.
Um Sicherheitsanforderungen zu erfüllen, ist es jedoch notwendig, eine Rückfallösung
zu bieten, falls die externe Taktquelle beispielsweise wegen eines Busfehlers ausfällt.
Zu diesem Zweck ist der erste Zählerblock CB0 mit einer Zeitbasissteuereinheit
TBCU versehen, die in 2 im Detail dargestellt ist.
Die Zeitbasis-Steuereinheit TBCU weist ein Register für einen
unteren Zeitbasis-Vergleichswert TBCPLR und ein Register für einen oberen Zeitbasis-Vergleichswert
TBCPHR auf. Die Werte TBCPL und TBCPH in diesen beiden 32-Bit-Registern definieren
die obere und untere Grenze eines Zeitfensterintervalls, in welchem eine Flanke
in dem externen Taktsignal NTU erwartet wird. Ein erster Zeitbasiskomparator
150 ist vorgesehen, um den augenblicklichen 32-Bit-Zählerstand des
ersten Vorskalierungszählers PSC0 mit dem unteren Zeitbasisvergleichswert TBCPL
zu vergleichen, und ein zweiter Zeitbasiskomparator 152 ist vorgesehen,
um den Zählerstand des ersten Vorskalierungszählers PSC0 mit dem oberen
Zeitbasis-Vergleichswert TBCPH zu vergleichen.
Die Zeitbasissteuereinheit TBCU weist weiterhin einen Flankendetektor
EDTC auf, der das externe Taktsignal NTU auf eine ansteigende Flanke überwacht.
Der Flankendetektor EDTC ist aktiviert, während der Wert des ersten Vorskalierungszählers
PSC0 innerhalb der Grenzen des Zeitfensters liegt, wobei dieser Fall von dem ersten
und dem zweiten Zeitbasiskomparator 150, 152 erfaßt wird.
Bezugnehmend auf 3, die ein Zeitdiagramm
mit dem Zählerstand des ersten Vorskalierungszählers PSC0 und ein Zeitdiagramm
für das externe Taktsignal NTU zeigt, ist nun die Funktion der Zeitbasissteuereinheit
TBCU beim Umschalten von interner auf externe Zeitbasis beschrieben.
Bei t = t0 entscheidet eine Anwendung, die Triggerquelle
für den ersten freilaufenden Zähler FRC0 per Software von intern auf extern
zu schalten. Mit dieser Wahl wird der Multiplexer 114 von dem ersten internen
Taktsignal CLKINT0, das von dem ersten Komparator 112 kommt, auf das externe
Taktsignal NTU umgeschaltet, und der erste Vorskalierungszähler PSC0 wird auf
Null zurückgesetzt. Nun ist der Flankendetektor EDTC aktiv während eines
Anfangs-Synchronisations-Intervalls, welches eine Periode des internen Taktsignals
CLKINT0 plus den Wert des oberen Zeitbasisvergleichswertes TBCPH beträgt, oder
solange, bis eine Flanke in dem externen Taktsignal NTU detektiert wird. Dies dient
der Synchronisation der Phase des internen und des externen Taktsignals. Nicht zu
vergessen ist, daß die Periode des internen Taktsignals CLKINT0 vom Komparator
112 durch den ersten konfigurierbaren Wert PCV0 in dem ersten Vorskalierungs-Vergleichswert-Register
PCVR0 definiert ist.
Da eine Flanke des externen Taktsignals NTU des Anfangs-Synchronisations-Intervalls
bei t = t1 auftritt, wird der erste Vorskalierungszähler PSC0 wieder
auf Null gesetzt und der freilaufende Zähler FRC0 inkrementiert. Wenn die nächste
Flanke im externen Taktsignal NTU bei t = t2 auftritt, wird der erste
Vorskalierungszähler PSC0 wieder auf Null gesetzt und der freilaufende Zähler
FRC0 inkrementiert. Um die Perioden des internen Taktsignals CLKINT0 und des externen
Taktsignals NTU zu synchronisieren, muß der erste konfigurierbare Wert PCV0
jedoch per Software angepaßt werden, um die Periode des internen Taktsignals
CLKINT0 zu verändern.
Mit Bezug auf 4 wird nun die Funktion
der Zeitbasis-Steuereinheit TBCU beschrieben, wenn das externe Steuersignal NTU
ausfällt.
Bei t = t4 tritt eine Flanke im externen Taktsignal NTU
innerhalb des Zeitfensters auf, welches durch den unteren Zeitbasisvergleichswert
TBCPL und den oberen Zeitbasisvergleichswert TBCPH definiert ist, welche auf der
Zeitachse als t4 TBL bzw. t4 TBL markiert sind.
Bei t = t5 TBL wird der Flankendetektor EDTC wieder aktiviert,
um das externe Taktsignal NTU zu überwachen. Bei t = t5 erreicht
der Zählerstand des Vorskalierungszählers PSC0 den ersten konfigurierbaren
Wert PCV0, der für die Periode des internen Taktsignals CLKINT0 steht. Da der
Multiplexer immer noch auf "extern" geschaltet ist, wird der erste Vorskalierungszähler
PSC0 auf Null gesetzt, aber der erste freilaufende Zähler FRC0 wird nicht inkrementiert.
Der Flankendetektor überwacht jedoch weiterhin das externe Taktsignal NTU bis
zum Ende des Zeitfensters bei t = t5 TBH, wenn der erste Vorskalierungszähler
PSC0 den oberen Zeitbasisvergleichswert TBCPH erreicht. Es ist zu beachten, daß
der obere Zeitbasisvergleichswert TBCPH geringer ist als der erste konfigurierbare
Wert PCV0, ansonsten wäre der erste Vorskalierungszähler PSC0 nicht in
der Lage, diesen Wert jemals zu erreichen. Dies deshalb, weil zur Vermeidung von
Jitter der erste Vorskalierungszähler PSC0 auf Null gesetzt wird, wenn er den
ersten Vorskalierungsvergleichswert PCVR0 erreicht.
Da bis t = t5 TBH keine Flanke in dem externen Taktsignal
NTU detektiert wurde, schaltet der Flankendetektor EDTC den Multiplexer
114 zur Auswahl des internen Taktsignals CLKINT0 zurück. Optional
kann ein Interrupt TBINT erzeugt werden, und der erste freilaufende Zähler
FRC0 kann, falls dies beispielsweise in einem Register INC so konfiguriert ist,
inkrementiert werden, um den fehlenden Taktzyklus des externen Taktsignals NTU zu
kompensieren.
Um eine Zeitmarkenfunktionalität zu bieten, sind die Vorskalierungszähler
PSC0, PSC1 und die freilaufenden Zähler FRC0, FRC1 Erfassungsregistern PSCCR0,
PSCCR1, FRCCR0, FRCCR1 zugeordnet, um die jeweiligen augenblicklichen Zählerstände
als Reaktion auf ein externes Ereignis zu erfassen. Diese Erfassungsregister PSCCR0,
PSCCR1, FRCCR0, FRCCR1 werden von einer Erfassungssteuereinheit CCP gesteuert.
Die Erfassungssteuereinheit CCP kann so konfiguriert werden, daß
sie bei externen Ereignissen CAP0, CAP1 das Erfassen der Zählerwerte vom ersten
Zählerblock CB0 oder vom zweiten Zählerblock CB1 oder von beiden auslöst.
Ein Interruptmanager, der in 1 nicht gezeigt ist, erzeugt
diese Erfassungsereignisse CAP0, CAP1 für die Erfassungssteuereinheit CCP,
wenn ein peripheres Modul einen Interrupt erzeugt hat. Der Interruptmanager ist
außerdem so konfiguriert, daß er feststellen kann, welche Peripheriegeräte
Erfassungsereignisse erzeugen dürfen.
Wenn ein Auslöseereignis CAP0, beispielsweise für den ersten
Zählerblock CB0, empfangen wird, läßt die Erfassungssteuereinheit
CCP den Wert des Vorskalierungszählers PSC0 in dem ersten Vorskalierungszähler-Auffangregister
PSCCR0 speichern und den Wert des ersten freilaufenden Zählers FRC0 in dem
Erfassungsregister des ersten freilaufenden Zählers FRCCR0 speichern. Die Erfassungsregister
müssen in einer bestimmten Reihenfolge gelesen werden, und zwar zuerst das
Erfassungsregister des ersten freilaufenden Zählers FRCCR0 und dann das Erfassungsregister
des Vorskalierungszählers PSCCR0.
Da die Zähler PSC0, FRC0, PSC1, FRC1 Aufwärtszähler
sind, kann eine Zeitmarke einfach durch Kombination der Werte aus den Erfassungsregistern
erhalten werden, ohne daß wie bei Abwärtszählern eine Softwareberechnung
durchgeführt werden muß. Die Zeitmarkenfunktionalität, welche die
Erfassungsregister bieten, kann beispielsweise zum Benchmarking bestimmter Bereiche
von Programmcode benutzt werden, indem die Zählerinhalte am Beginn und am Ende
des gewünschten Programmcodebereichs gelesen und die Differenz zwischen den
Werten berechnet wird.