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