|
||||||||||||||||||||||||||||||||||||||||||||||
Infineon C167 ( SAB 80C167CR-LM) Timer + Interrupt Beispiel
geschrieben von Andreas Amann. Der Microcontroller besitzt diverse Timer / Counter, es sind 2 Genereal Purpose Timer Units ( GPT1 und GPT2) vorhanden. GPT1 besitzt 3 Timer / Counter mit einer maximalen Auflösung von fcpu / 8 und GPT2 besitzt 2 Timer / Counter mit einer maximalen Auflösung von fcpu / 4. In diesem Konkreten Beispiel wollen wir auf dem Phytec Phycore 167CR -Board eine LED im Sekunden Rhytmus blinken zu lassen. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Nun folgt die Initialisierung der LED, wie entnommen werden kann befindet sich die LED an Port 2, Bit 0. /* LED initialisieren */ Der Reload Wert ist ein Muliplikator mit dem die "Timer Resolution" Multipliziert wird. mit diesem Multiplikator erreichen wir einen Timerintervall von 1ms. Die genaue Ermittlung der Werte erfolgt weiter unten. #define RELOAD 1250; Die Funktion timer_tic wird durch den Timer-Interrupt aufgerufen. Aus dem Datasheet (Abs. 5-3, Tabelle5-2) entnehmen wir, dass der GPT Timer 3 die TrapNumber 23h bzw. 34d besitzt. Durch RELOAD laden wir den Timer wieder auf den entsprechenden Startwert (1250). Von diesem Wert wird dann in der Entsprechenden Periode herunter gezählt (in unserem Fall wird alle 800ns ein herunter gezählt, 800ns * 1250 = 1ms). Alle 1000 aufrufe (entspricht 1 sek , 1000*1ms) wird der Status der LED gewechselt. void timer_tic(void) interrupt 0x23 Dies ist die Hauptroutine, hier wird DP2_0 gesetzte, dies ist der Anfangswert der LED. T3 ist bekanntlich der Startwert des Timers. Mit dem Timer-Control-Register setzen wir spezielle Eigenschaften des Timers T3CON (Abs 10-3 / 10-4, Tabelle 10-0 / 10-1) ![]()
T3I ist ein spezielles Register in dem die Auflösung / Frequenz des Timers entsprechend eingestellt wird (Abs 10-6, Tabelle 10-2). Diese Tabelle gilt nur für die 20Mhz Chips, wird eine höhere Frequenz benutzt, so muss in diesem Abschnitt auf die anderen Tabellen verwiesen werden. ![]() Das Register T3IC ist ein Interrupt Control Register für den Timter 3. Hierbei kann die Priorität und die Gruppenzugehörigkeit definiert werden. ![]() void main (void) |
||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||