Port Output
Funktion
Ein Port Out-Modul umfasst bis zu 18 Ausgänge. Die Ausgänge des Moduls können einzeln aktiviert oder gesetzt werden, indem das jeweils korrespondierende Bit des entsprechenden Steuerregisters verändert wird.
Register
Offset | Register | Funktion | Zugriff |
0 | PIN_OUT_DAT | Daten | read/write |
1 | PIN_OUT_OE | Output Freigabe für jedes Bit | read/write |
Im Steuerregister PIN_OUT_OE können für die einzelnen Pins des Port Out-Moduls die Ausgänge aktiviert werden. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register kann lesend und schreibend zugegriffen werden.
Das Datenregister PIN_OUT_DAT enthält die Daten der Pins des Port Out-Moduls. Bei einem Reset werden alle Bits mit Null initialisiert. Auf das Register kann lesend und schreibend zugegriffen werden.
port_out.h
#ifndef __PORT_OUT_H #define __PORT_OUT_H #define PORT_OUTBIT_0 (1<<0) #define PORT_OUTBIT_1 (1<<1) #define PORT_OUTBIT_2 (1<<2) #define PORT_OUTBIT_3 (1<<3) #define PORT_OUTBIT_4 (1<<4) #define PORT_OUTBIT_5 (1<<5) #define PORT_OUTBIT_6 (1<<6) #define PORT_OUTBIT_7 (1<<7) #define PORT_OUTBIT_8 (1<<8) #define PORT_OUTBIT_9 (1<<9) #define PORT_OUTBIT_10 (1<<10) #define PORT_OUTBIT_11 (1<<11) #define PORT_OUTBIT_12 (1<<12) #define PORT_OUTBIT_13 (1<<13) #define PORT_OUTBIT_14 (1<<14) #define PORT_OUTBIT_15 (1<<15) #define PORT_OUTBIT_16 (1<<16) #define PORT_OUTBIT_17 (1<<17) typedef struct port_out { volatile unsigned int data; // (r/w) volatile unsigned int oe; // (r/w) } port_out_regs_t; #endif
Konfiguration und Instanziierung
Bei der Instanziierung eines IO-Moduls gibt es zwei Parameter, die man einstellen muss: BASE_ADR und PORT_WIDTH. BASE_ADR gibt den Offset der Adresse des Moduls zur Basisadresse der Peripherieregister an. Der Wert besteht aus den oberen sieben Bit der zehn Bit-Adresse eines Moduls (die unteren drei Bit werden nur modulintern benutzt). PORT_WIDTH bezeichnet die Breite des jeweiligen Ports, sie kann von 1 Bit bis 18 Bit eingestellt werden.
Die Output-Pins müssen an die Ausgänge des Top Level Moduls angeschlossen werden. Diese müssen dann noch den Pins des FPGA zugeordnet werden (z.B. in der .ucf-Datei des ISE-Projekts).