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



OffsetRegisterFunktionZugriff
0PIN_OUT_DATDatenread/write
1PIN_OUT_OEOutput Freigabe für jedes Bitread/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).


SpartanMC