Serieporter i TIKI-100 Rev C
----------------------------

TIKI-100 benytter seg av en Z80 DART som inneholder to asynkrone RS-232
serieporter.

DART kontrolleres gjennom 4 I/O porter:

I/O port 04H: Seriekanal A, dataord

Gjennom denne porten leses og skrives data til serieport A. 

I/O port 05H: Seriekanal B, dataord

Gjennom denne porten leses og skrives data til serieport B. 

I/O port 06H: Seriekanal A, statusord/styreord

Ved skriving er dette kommandoregisteret til port A, ved lesing er det
statusregisteret.

I/O port 07H: Seriekanal B, statusord/styreord

Ved skriving er dette kommandoregisteret til port B, ved lesing er det
statusregisteret.

DART's interne registre

Hver seriekanal har 3 leseregistre og 6 skriveregistre. Disse kan ns gjennom to
etterflgende lese/skrive-operasjoner til kanalens kommandoregister. Frst
skrives en peker til kommandoregisteret som angir hvilket register som nskes,
deretter skrives/leses det aktuelle registeret gjennom den samme I/O
porten. Dersom en lese/skrive operasjon ikke kommer etter en gyldig peker, vil
register 0 benyttes. 

Leseregister 0

Bit 7 = 1: BRK. Seriekanalen ligger p +V i mer enn 2 tegnlengder. 
Bit 6:          Ikke i bruk. 
Bit 5 = 1: CTS. Modemsignalet CTS er satt. 
Bit 3-4:        Ikke i bruk.
Bit 2 = 1: TBE. Transmit Buffer Empty. Sender har sendt tegn og er klar for et
                nytt. Rett etter initialisering av seriekanal kan et tegn
                skrives til dataporten uten  sjekke denne biten frst. Dette
                fordi denne biten settes frst etter at et tegn har blitt sendt,
                og vil derfor ikke vre satt fr frste tegn er sendt. 
Bit 1 = 1: INT. Interrupt er satt
Bit 0 = 1: RXA. Receive Character Available, dvs. nytt tegn mottatt og kan leses
                ut av dataporten. Denne biten blir nullstilt etter at dataporten
                har blitt lest. 

Leseregister 1

Bit 7:          Ikke i bruk.
Bit 6 = 1: FF.  Format feil, f.eks feil antall stopbits. 
Bit 5 = 1: RXO. Receiver Overflow, dvs innkommende tegn har kommet fortere enn
                de har blitt lest ut av dataporten. 
Bit 4 = 1: PF.  Paritetsfeil. 
Bit 1-3:        Ikke i bruk. 
Bit 0 = 1: AS.  Alt sendt. 

Leseregister 2

Interruptvektor kan leses ut av dette registeret. Bit 0-3 kan variere, avhengig
av status dersom "Status affects vector" er satt. 

Skriveregister 0

I skriveregister 0 settes peker for det neste registeret man vil n gjennom
denne porten. 

Bit 6-7:        Ikke i bruk
Bit 3-5:        Peker til neste register som skal ns
                Bit 5   Bit 4   Bit 3   Register
                0       0       0       0
                0       0       1       1
                0       1       0       2
                0       1       1       3
                1       0       0       4
                1       0       1       5
Bit 0-2:        Nullstillingskommando
                Bit 2   Bit 1   Bit 0   Funksjon
                0       1       0       Nullstill status interrupt
                0       1       1       Nullstill hele kanalen
                1       0       0       Sett interrupt nr neste serietegn
                                        mottas
                1       0       1       Nullstill senderinterrupt
                1       1       0       Nullstill feilmelding
                1       1       1       Retur fra interrupt (bare kanal A)

Skriveregister 1

Bit 5-7:        Ikke i bruk.
Bit 3-4:   RXI. 
                Bit 4   Bit 3   Type mottakerinterrupt
                0       0       Ingen mottaker interrupt
                0       1       Sett mottaker interrupt ved frste mottatte tegn 
                1       0       Interrupt p alle mottatte tegn, paritet endrer
                                vektor (aner ikke hva det vil si)
                1       1       Interrupt p alle mottatte tegn, paritet endrer
                                ikke vektor
Bit 2 = 1: SAV. Status Affects Vector, dvs interruptvektoren endres avhengig av
                rsaken til interruptet.
Bit 1 = 1: TXI. Sett interrupt nr senderen er klar for neste tegn. 
Bit 0 = 1: EXI. Sett interrupt ved endring av eksterne signaler. 

Skriveregister 2

Interruptvektor, skriv inn nsket interruptvektor her. Interruptvektoren er delt
mellom begge seriekanalene. 

Skriveregister 3

Bit 6-7:        Antall bits pr. tegn i mottakeren
                Bit 6   Bit 5   Antall bits
                0       0       5
                0       1       6
                1       0       7
                1       1       8
Bit 5 = 1: AE.  Auto Enable, dvs senderen sls automatisk av og p med signalet
                CTS. 
Bit 1-4:        Ikke i bruk. 
Bit 0 = 1: RXE. Receiver Enable, dvs starter mottakerfunksjon. 

Skriveregister 4

Bit 6-7:        Neddeling av klokkefrekvensen, dvs hvilket tall innkommende
                klokkefrekvens skal deles med for  f antall baud. 
                Bit 7   Bit 6   Neddeling
                0       0       1
                0       1       16
                1       0       32
                1       1       64
Bit 4-5:        Ikke i bruk. 
Bit 2-3:        Antall stopbits
                Bit 3   Bit 2   Antall
                0       0       Ugyldig
                0       1       1
                1       0       1,5
                1       1       2
Bit 1 = 1: PN.  Like paritet. 
Bit 0 = 1: P.   Paritet skal benyttes. 

Skriveregister 5

Bit 7:          Ikke i bruk.
Bit 5-6: TN     Antall bits pr. tegn i senderen
                Bit 6   Bit 5   Antall
                0       0       5
                0       1       7
                1       0       6
                1       1       8
Bit 4 = 1: SB.  Send Break, dvs legg serieutgangen p -V.
Bit 3 = 1: TXE. Start senderfunksjonen. 
Bit 2:          Ikke i bruk. 
Bit 1 = 1: RTS. Sl p Request To Send. 
Bit 0:          Ikke i bruk. 

Interrupts

Jeg er usikker p en del av DART's interruptgenerering. Dette er hva jeg tror: 

Interruptvektor deles mellom kanalene.
Dersom "Status Affects Vector" er satt, vil interruptvektoren som benyttes
forandres avhengig av status. Vektoren forandres slik:

Sender B, normal:   Bit 3 = 0, bit 2 = 0, bit 1 = 0
Sender B, feil:     Bit 3 = 0, bit 2 = 0, bit 1 = 1
Mottaker B, normal: Bit 3 = 0, bit 2 = 1, bit 1 = 0
Mottaker B, feil:   Bit 3 = 0, bit 2 = 1, bit 1 = 1

Sender A, normal:   Bit 3 = 1, bit 2 = 0, bit 1 = 0
Sender A, feil:     Bit 3 = 1, bit 2 = 0, bit 1 = 1
Mottaker A, normal: Bit 3 = 1, bit 2 = 1, bit 1 = 0
Mottaker A, feil:   Bit 3 = 1, bit 2 = 1, bit 1 = 1

---
28 juni 2001
Asbjrn Djupdal, djupdal@stud.ntnu.no

