Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier. |
Home Periphere Bausteine Serielle Schnittstelle Programmierung des DART | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Siehe auch: Serielle Schnittstelle, Z80-DART (Z8470) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programmierung des DART
Die beiden Kanäle des DART sind identisch und werden auch durch die gleichen Kommandos programmiert. Welcher Kanal angesprochen wird, hängt alleine vom Signal am Pin 'A/B' ab. Einzige Ausnahme stellt das Register für den Interruptvektor dar, da dieser nur für Kanal B geladen wird, aber für beide Kanäle gilt. Die folgende Beschreibung behandelt daher nur die Programmierung von Kanal B.
Da für jeden Kanal nur eine Adressleitung zur Verfügung steht, ist von außen nur das Register Null erreichbar. Alle anderen Register werden angesprochen, indem man zuerst die Nummer des gewünschten Registers ins Register Null schreibt. Dadurch wird intern der Baustein vorbereitet, so dass der nächste Wert, der hineingeschrieben wird, in das spezifizierte Register gelangt. Die untenstehende Tabelle führt alle Register eines Kanals an: Leseregister
Schreibregister
Da die Möglichkeiten der DART-Programmierung sehr groß sind, sollen hier nur die wichtigsten Steuercodes anhand eines Beispiels erklärt werden. Die Programmierung des DART teilt sich immer in zwei Phasen, die Initialisierung und die Einstellung von Arbeitsparametern. Bei der Initialisierung werden der Interruptmodus, der Interruptvektor, die Betriebsart des DART u.ä. festgelegt. Sie wird im Allgemeinen nur einmal während des Kaltstarts durchgeführt. Die Einstellung der Parameter wird öfter benötigt und sollte davon getrennt programmiert sein. Initialisierung: Eine typische Initialisierungssequenz könnte wie folgt aussehen: ; ; Register 2: Interruptvektor, niederwertiges Byte ; LD A,2 OUT (DARTB),A ;Register 2 anwählen LD A,ILOW OUT (DARTB),A ;Interruptvektor laden ; ; Register 1: Betriebsart und Interruptmodus. ; Wait ein, Ready aus, Status beeinflusst ; Interruptvektor, Interrupt bei jedem ; empfangenen Zeichen, Senderinterrupt ; ein. ; LD A,1 OUT (DARTB),A ;Register 1 anwählen LD A,07CH OUT (DARTB),A ;Betriebsmodus setzen ; ; Register 3: Empfänger einstellen ; Empfänger ein, 8 Datenbits, ; Auto-Modus aus ; LD A,003H OUT (DARTB),A ;Register 3 anwählen LD A,0C1H OUT (DARTB),A ;Empfänger einstellen ; ; Register 4: Stoppbits, Parity und Takt ; 1 Stoppbit, Parity aus, x16-Modus ; LD A,004H OUT (DARTB),A ;Register 4 anwählen LD A,044H OUT (DARTB),A ;Stoppbits und Parity ; ; Register 5: Sender und Steuerleitungen einstellen ; DTR=1, RTS=0, Sender ein, 8 Datenbits ; LD A,005H OUT (DARTB),A ;Register 5 anwählen LD A,0E8H OUT (DARTB),A ;Sender einstellen Einstellung der Parameter: Die Einstellung der Parameter bezieht sich in erster Linie auf die Einstellung des Übertragungsprotokolls, wobei die Baudrate nur in geringem Maße durch Veränderung des Teilungsfaktors des Vorteilers (x1, x16, x32, x64) innerhalb des DART eingestellt werden kann. Das folgende Programm zeigt für den Kanal A des DART eine Möglichkeit, das Protokoll einzustellen. Dabei wird angenommen, dass Kanal 2 des CTC den erforderlichen Takt für die Baudrate erzeugt (1.536 MHz). Als Parameter wird ein 8-Bit-Wert im Akkumulator übergeben. Die Kombination dieser acht Bits bestimmt die Einstellung der Schnittstelle (siehe Kommentar im Programm). ;=================================================== ;--- setup protocol of DART-A ---------------------- ;=================================================== ; ;Eingang: AKKU enthält Steuerzeichen ;Ausgang: Protokoll von DART-A eingestellt ; ; 8,7,6 ... Baudrate: ; OFF OFF OFF = 150 Baud ; OFF OFF ON = 300 Baud ; OFF ON OFF = 600 Baud ; OFF ON ON = 1200 Baud ; ON OFF OFF = 2400 Baud ; ON OFF ON = 4800 Baud ; ON ON OFF = 9600 Baud ; ON ON ON = 19200 Baud ; 5 ..... Number of data bits: ; OFF = 7 data bits ; ON = 8 data bits ; 4 ..... parity enable: ; ON = parity bit wird erzeugt ; OFF = kein parity bit ; 3 ..... parity: ; OFF = even ; ON = odd ; 2 ..... Zahl der Stoppbits ; ON = 2 Stoppbits ; OFF = 1 Stoppbit ; 1 ..... unbenutzt ; .GLOBAL SETPDA SETPDA: PUSH AF PUSH HL LD (PROTBK),A SRL A ;Baudrate SRL A SRL A SRL A AND 0EH PUSH AF ;speichern für CLK-mode LD HL,BAUDTB ADDHLA ; LD A,3 ; OUT (CTC2),A ;Timer stoppen LD A,(HL) OUT (CTC2),A ;Modus laden INC HL LD A,(HL) OUT (CTC2),A ;Zeitkonstante laden ; LD HL,PROTBK ;Parität POP AF CP 4 ;Baudrate <= 300 ? LD A,044H ;x16 Modus JR NC,$6 LD A,0C4H ;x64 Modus $6: BIT 2,(HL) ;Parität even/odd JR NZ,$1 SET 1,A $1: BIT 3,(HL) ;Parität aus/ein JR Z,$2 SET 0,A $2: BIT 1,(HL) ;Zahl der Stoppbits JR Z,$5 SET 3,A $5: PUSH AF ;DART register laden LD A,4 OUT (DARTAC),A POP AF OUT (DARTAC),A ; LD A,5 ;Sender Datenbits OUT (DARTAC),A LD A,0AAH BIT 4,(HL) JR Z,$3 SET 6,A $3: OUT (DARTAC),A LD (DAREG5),A ;Register 5 enthält RTS ; LD A,3 ;Empfänger Datenbits OUT (DARTAC),A LD A,041H BIT 4,(HL) JR Z,$4 SET 7,A $4: OUT (DARTAC),A ; POP HL POP AF RET ; .DATA PROTBK: DEFB 0 ;Steuerbits DAREG5: DEFB 0 ;RTS-Kontrolle Reg.5 .CODE ; BAUDTB: DEFB 47H,160 ; 150 BAUD DEFB 47H,80 ; 300 Baud DEFB 47H,160 ; 600 BAUD DEFB 47H,80 ; 1200 DEFB 47H,40 ; 2400 DEFB 47H,20 ; 4800 DEFB 47H,10 ; 9600 DEFB 47H,5 ; 19200 Baud
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Home Periphere Bausteine Serielle Schnittstelle Programmierung des DART |