Timer PulseAccu
Funktionen
Das Pulse-Accumulator-Modul bietet die Möglichkeit, entweder die Impulse am Eingangs-Pin oder die RTI-Impulse bis zu einem Impuls am Eingang zu zählen. In ersterem Modus läuft der Zähler immer weiter und kann aus dem Datenregister gelesen werden oder durch einen Zugriff auf das Steuerregister zurückgesetzt werden. Im anderen Modus hält der Zähler bei Eingehen eines Impulses am Eingang an. Wird das Datenregister gelesen, nachdem der Zähler angehalten ist, wird dieser anschliessend zurückgesetzt und zählt erneut bis zu einem Impuls am Eingangs-Pin. Auch hier setzt ein Zugriff auf das Steuerregister den Zähler zurück.Register
Offset | Register | Funktion | Zugriff | |
0 | PA_CTRL | Steuerregister | read/write | |
1 | PA_DAT | Zählerstand | read |
Das Datenregister PA_DAT enthält den Zählerstand des Pulse-Accumulators. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register kann nur lesend zugegriffen werden.
Das Steuerregister PA_CTRL enthält alle zur Steuerung der Funktionen des Pulse-Accumulator-Moduls nötigen Bits. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register kann lesend und schreibend zugegriffen werden.
PA_CTRL | Funktion | |||
Bit 0: | Pulse-Accumulator enable: 0 = disable, 1 = enable | |||
Bit 1: | Mode select: | |||
0 = Impulse am Eingang zählen | ||||
1 = RTI bis Impuls am Eingang zählen | ||||
Bit 2 bis 17: | nicht benutzt |
counter.h
#ifndef __COUNTER_H #define __COUNTER_H #define COUNTER_EN (1 << 0) #define COUNTER_MODE (1 << 1) #define COUNTER_INPMODE (COUNTER_MODE * 0) #define COUNTER_RTIMODE (COUNTER_MODE * 1) typedef struct pacc { volatile unsigned int control; // (r/w) reset conter volatile unsigned int counter; // (r) } counter_regs_t; #endif
Konfiguration und Instanziierung
Bei der Instanziierung eines Pulse-Accumulator-Moduls wird der Parameter BASE_ADR vom jConfig automatisch eingestellt. BASE_ADR gibt den Offset der Adresse des Moduls zur Basisadresse aller Peripherieregister an. Der Wert besteht aus den oberen sieben Bit der zehn Bit-Adresse eines Moduls (die unteren drei Bit werden nur modulintern benutzt).Der Eingang für RTI_Impulse muss an die entsprechende Leitung angeschlossen werden und der Input-Pin an den Eingang des Top Level Moduls. Dieser muss dann noch den Pins des FPGA zugeordnet werden (z.B. in der .ucf-Datei des ISE-Projekts).
Einstellungen für den Timer PulseAccu
SpartanMC 18 Testmonitor vom 17.10.07 :H Modify (h) :M (daddr) Display 18 Bit :D (start1) [end1] Display 9 Bit :D9 (start1) [end1] Fill 9 Bit :F (start1) (end1) (wert) Move 18 Bit :MO (start1) (end1) (start2) Compare 18 Bit :C (start1) (end1) (start2) Search 18 Bit :SE (start1) (end1) (wert) Goto :G (paddr) Goto DataAddr :GD (daddr) Load *.sph :LS [daddr] :M 34090 34090 00000 / 3d 34092 00000 : 340A0 340A0 00000 / d 340A2 00000 : 340B0 340B0 00000 / 1 340B2 00000 / 80 340B4 00000 . 340B4 00079 . 340B4 00056 : 340C0 340C0 00000 / 3d 340C2 00000 / 40 340C4 00000 - 340C2 00040 - 340C0 0003D . 340C0 0003D . 340C0 0007D . 340C0 0007D : 34100 34100 00000 / 1 34102 00000 . 34102 00000 . 34102 00005 - 34100 00001 / 3 34102 00000 . 34102 00002 . 34102 00006 . 34102 0000C . 34102 00012 . 34102 00015 . 34102 00018 . 34102 00002 . 34102 00004 . 34102 00005 . 34102 00007 . 34102 0000E . 34102 0001B . 34102 001B0 . 34102 001B3 .