181 lines
6.5 KiB
Plaintext
181 lines
6.5 KiB
Plaintext
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 nås gjennom to
|
|
etterfølgende lese/skrive-operasjoner til kanalens kommandoregister. Først
|
|
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 først. Dette
|
|
fordi denne biten settes først etter at et tegn har blitt sendt,
|
|
og vil derfor ikke være satt før første 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 nås
|
|
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 når 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 første 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 når 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 slås 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
|
|
Asbjørn Djupdal, djupdal@stud.ntnu.no
|
|
|