Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier. |
Home Mikroprozessoren Programmierung eines Mikrocomputers FIFO | ||||
Siehe auch: LIFO oder Stack | ||||
|
||||
FIFO
Der FIFO-Puffer oder Ringpuffer ist die zweite wichtige Pufferstruktur. Die Abkürzung FIFO steht für die Bezeichnung 'First In, First Out'. Wie der Name des FIFOs sagt, wird der zuerst abgespeicherte Wert auch wieder zuerst ausgegeben. Man kann sich ein FIFO auch als 'Durchlaufspeicher' vorstellen, in dem die abgespeicherten Werte eine gewisse Zeit verweilen und dann in derselben Reihenfolge wieder ausgelesen werden.
Beim Erhöhen der Pointer ist darauf zu achten, dass die Pointer in zyklischer Weise erhöht werden. Das heißt, dass der Pointer auf den Anfang des Speicher bereichs gesetzt wird, wenn er das Ende des Bereichs überschreitet. Sind Input- und Output-Pointer gleich, so ist das FIFO leer. FIFOs werden überall dort eingesetzt, wo es notwendig ist, in einen Datenstrom eine Verzögerung einzubauen. So kommen zum Beispiel die Zeichen auf einer seriellen Schnittstelle zu beliebigen Zeiten im Computer an, können aber nur zu bestimmten Zeiten weiterverarbeitet werden. In diesem Fall leitet man den Strom der Daten in ein FIFO, aus dem dann die eingelangten Zeichen asynchron ausgelesen werden können.
Der folgende kleine Programmausschnitt zeigt die Implementation eines FIFOs in Z80-Assembler. Es sind vier Funktionen als Unterprogramme implementiert: FIFO lesen, FIFO beschreiben, FIFO-Zustand überprüfen und FIFO löschen. Das hier gezeigte FIFO ist 256 Byte lang, die Input- und Outputpointer stehen als Bytevariable zu Beginn des Datenpuffers. Das FIFO benötigt also insgesamt 258 Bytes. ;=================================================== ;----- 8-Bit-Zeichen in FIFO schreiben ------------- ;=================================================== ; ;ENTRY: HL zeigt auf Beginn des FIFOs, ; AKKU enthält Zeichen ;EXIT: CF=0 --> Zeichen in FIFO eingetragen ; CF=1 --> FIFO ist voll, Zeichen nicht ; eingetragen ; ;Struktur des FIFOs: ; 1. Byte: FIFO input pointer (0..255) ; 2. Byte: FIFO output pointer (0..255) ; 3.-258.Byte: FIFO Datenfeld ; ---> Gesamtlänge: 258 Byte ; .GLOBAL WRFIFO WRFIFO: PUSH HL PUSH BC PUSH AF LD C,(HL) ;Eingangspointer INC HL LD A,(HL) ;Ausgangspointer DEC A ;FIFO voll ? CP C JR Z,FIFFUL ;ja POP AF DEC HL INC (HL) ;neuer Pointer INC HL INC HL ;Datenadresse LD B,0 ; berechnen ADD HL,BC LD (HL),A POP BC POP HL OR A ;Carry Flag rücksetzen RET ; FIFFUL: POP AF ;FIFO voll POP BC POP HL SCF ;Carry Flag setzen RET ; ;=================================================== ;------ 8-Bit-Zeichen von FIFO lesen --------------- ;=================================================== ; ;ENTRY: HL zeigt auf Beginn des FIFOs ;EXIT: CF=0, Daten in AKKU sind gültig ; CF=1, FIFO ist leer ; .GLOBAL RDFIFO RDFIFO: PUSH HL PUSH BC LD A,(HL) ;FIFO Eingangspointer INC HL LD C,(HL) ;FIFO Ausgangspointer CP C ;FIFO leer ? JR Z,FIFMPT INC (HL) INC HL ;Datenadresse LD B,0 ; berechnen ADD HL,BC LD A,(HL) POP BC POP HL OR A ;CF=0 ---> Daten OK RET ; FIFMPT: POP BC POP HL SCF ;CF=1 ---> Daten RET ; ungültig ; ;=================================================== ;----- FIFO löschen -------------------------------- ;=================================================== ; ;ENTRY: HL zeigt auf Beginn des FIFOs ;EXIT: FIFO ist gelöscht und leer ; .GLOBAL CLRFIF CLRFIF: PUSH AF XOR A LD (HL),A INC HL LD (HL),A DEC HL POP AF RET ; ;=================================================== ;----- FIFO Status testen -------------------------- ;=================================================== ; ;ENTRY: HL zeigt auf Beginn des FIFOs ;EXIT: CF=1 ---> FIFO voll ; ZF=1 ---> FIFO leer ; AKKU enthält Zahl der Zeichen in FIFO ; .GLOBAL TSTFIF TSTFIF: LD A,(HL) INC HL SUB (HL) JR Z,TFE ;FIFO leer CP 0FFH JR Z,TFF ;FIFO voll SCF ;FIFO weder voll noch CCF ; leer DEC HL RET ; TFE: SCF CCF DEC HL ;CF=0, ZF=1 RET ; TFF: XOR A LD A,0FFH SCF ;CF=1, ZF=0 DEC HL RET Da FIFOs sehr vielfältig eingesetzt werden können, werden von manchen Herstellern auch integrierte Schaltungen angeboten.
|
||||
Home Mikroprozessoren Programmierung eines Mikrocomputers FIFO |