RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
6) De intelligente I/O-controller “IOsys”. Om de I/O mogelijkheden van het RIOT bord aanzienlijk te vergroten werd een, als intelligente I/O-controller geprogrammeerde, AVRmega 128 microcontroller op het bord geïntegreerd. Deze chip (met intern gestockeerde firmware “Riotavr0”) geven we verder doorheen deze tekst de benaming “IOsys”. Het is de bedoeling van IOsys om de gebruiker van het RIOT bord op een eenvoudige manier een uitgebreide waaier van complexe IO-mogelijkheden te verschaffen, die niet aanwezig zijn op de IPC@CHIP controller. En dit zonder de gebruiker op te zadelen met de gebruikelijke zelf te implementeren software van de I/O processor. De gebruiker kan wel indien dit nodig is IOsys van eigen software voorzien (ISP programmeerbaar). De functies die IOsys voor de gebruiker kan uitvoeren zijn oa. : • • • •
Simpele bitprogrammeerbare digitale I/O (24 bits I/O, 8bits Input). Complete matrix-keyboard scanner en decoder. LCD driver voor het aansturen van een standaard alfanumerische LCD-displaymodule. Analoge input 8 kanalen/ 10 bit resolutie.
IOsys is met de IPC@CHIP verbonden via een 8bit Dual Port Ram (DPRAM) van 1Kbyte die werkt als een data-doorgeefluik tussen beide processoren. In de memorymap van IOsys is deze DPRAM opgenomen in het adresbereik 8000h tot 83FFh. De DPRAM is opgenomen in de memorymap van de IPC@CHIP als 4 memorybanken van 255 bytes. Het adresbereik van één bank gaat telkens van 100h tot 1FFh. De programmeerbare lijnen PIO3 en PIO2 van de IPC@CHIP werken als bankselectlijnen en hiermee kan telkens slechts één van de 4 memorybanken worden geselecteerd. Met de in tabel 4.3 gegeven combinaties van PIO3, PIO2 stelt men de aangegeven bank in. Tabel 4.3: Geheugenbank selectie PIO3,PIO2 Mem. Bank IPC@CHIP adressen 00b 0 100h – 1FFh 01b 1 100h – 1FFh 10b 2 100h – 1FFh 11b 3 100h – 1FFh Banken 0 t.e.m. 2 worden in deze firmware versie niet gebruikt, en zijn voorzien voor toekomstige uitbreidingen. In bank 3 worden door IOsys softwarematig een aantal controleregisters geïmplementeerd, die de besturing en de instellingen van de I/O verzorgen, en die kunnen ingesteld worden door de IPC@CHIP. Het algemeen principe van IOsys is dit van een I/O controller met een bepaalde cyclustijd, te vergelijken met een PLC. Op IOsys gebeuren de meeste acties op het ritme van een door de gebruiker in te stellen cyclustijd (instelbaar tussen 1 en 255 millisec, in een controleregister (CI) in DPRAM). Zo worden op het ritme van deze cyclustijd de analoge ingangen gesampled en geconverteerd naar een 10-bit digitale waarde, waarna ze samen met de ingelezen waarden van de digitale ingangen in de DPRAM worden opgeslagen in resp. de analoge inputbuffer (AIBR0-7) en de poortinput registers (IRB,IRD,IRE,IRF). Ook worden de digitale uitgangen op dit ritme aangepast aan de (al dan niet nieuw opgegeven) waarden in de poortoutput registers (ORB,ORD,ORE) van de DPRAM. Zo kan men vanuit de Versie 1.0
87
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
IPC@CHIP een aantal digitale uitgangswaarden “klaarzetten” in een Poort Output Register dat bij een poort hoort. De informatie zal pas effectief naar buiten worden gestuurd bij het verstrijken van de ingestelde cyclustijd zoals aangegeven in figuur 4.8. De IPC@CHIP kan van het verstrijken van de cyclustijd op de hoogte gebracht worden a.d.h.v. een interrupt die wordt gegenereerd door de DPRAM (indien dit werd ingesteld in het interrupt enable register IER). Cyclus tijd
Cyclus tijd
Cyclus tijd
t
Alle datatransfers gebeuren op het ritme van de instelbare cyclustijd van de IOsys. Dit omvat oa. het lezen en opslaan van digitale als analoge inputwaarden en het naar buiten sturen van outputdata.
“IOsys” Digitale outputport
Dual Port Ram Poort Output Register
(Orx)
Digitale data naar een toepassing.
Digitale inputport
Poort Input Register ( Irx)
Digitale data van een toepassing.
Analog Inputregister
Analoge Inputport
Analog Inputregister Analog Inputregister Analog Inputregister
8 Analoge kanalen van een toepassing
Analog Inputregister Analog Inputregister Analog Inputregister Analog Inputregister
Figuur 4.8: Verwerking van gegevens door IOsys na de cyclustijd.
Versie 1.0
88
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Mogelijkheden en functies van de IOsys. POORT B / H6 Deze poort kan gebruikt worden als digitale parallelle I/O poort die op bit per bit basis instelbaar is. De gebruiker kan de werking van deze poort instellen langs de IPC@CHIP, door in de DPRAM op specifieke locaties de nodige controledata te schrijven. De gebruikte locaties (registers) die de werking van POORT B instellen, en hun functie op bitbasis worden hieronder aangegeven. Tabel 4.4: Mogelijkheden met poort B IPC@CHIP adres Registerfunctie Bank3- 102H Instelling van de Mode of functie van POORT B. (MRB) 00H→ POORT B wordt niet gebruikt, de uitgangen worden niet aangepast bij het verstrijken van de cyclustijd, er worden geen ingangen gelezen. 01H→ POORT B wordt gebruikt als digitale I/O. Bank3-103H
Dit is het Data Direction Register van POORT B. (DDRB) Bit=1→De overeenkomstige poortbit zal als input werken. Bit=0→De overeenkomstige poortbit zal als output werken.
Bank3-104H
POORT B Input Register. (IRB) Dit register bevat de digitale ingangen van de POORT B, deze worden door IOsys gelezen bij het verstrijken van de cyclustijd . Ook de poortbits die als output zijn ingesteld zullen worden gelezen en opgeslagen. De IPC@CHIP kan dan deze data lezen. IOsys kan ook een interrupt genereren bij de IPC@CHIP waarmee wordt aangegeven dat de cyclustijd is afgelopen, en er recente data ter beschikking is.
Bank3- 105H
POORT B Output Register. (ORB) Dit register bevat de data die naar de overeenkomende als outputpin ingestelde poortpinnen moet gestuurd worden bij het aflopen van de cyclustijd. Poortpinnen die als input ingesteld zijn zullen in pull-up mode worden geschakeld door er een ‘1’ naartoe te schrijven ongeacht de bitwaarde in dit register. In dit register kan door de IPC@CHIP data geschreven worden.
Versie 1.0
89
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
POORT D / H7 Deze poort kan gebruikt worden als digitale parallelle I/O poort die op bit per bit basis instelbaar is, en als keyboard encoder voor een eenvoudig matrix keyboard van 4 rijen op 4 kolommen. De gebruikte locaties (registers) die de werking van POORT D instellen, en hun functie op bitbasis worden hieronder aangegeven. Tabel 4.5: Mogelijkheden met poort D IPC@CHIP adres Registerfunctie Bank3- 106H Instelling van de Mode of functie van POORT D. (MRD) 00H→ POORT D wordt niet gebruikt, de uitgangen worden niet aangepast bij het verstrijken van de cyclustijd, er worden geen ingangen gelezen. 01H→ POORT D wordt gebruikt als digitale I/O. 02H→ POORT D wordt gebruikt als keyboard encoder voor een 4x4 matrix keyboard. De vier laagste bits van de poort vormen de scanlijnen, de vier hoogste bits vormen de leeslijnen. Pull-ups zijn niet nodig. Onderstaande tabel geeft de keycodes weer van de schakelaars i.f.v. de fysische plaats in de matrix. POORT D-4 POORT D-5 POORT D-6 POORT D-7
Bank3- 107H
POORT D-0 00H 04H 08H 0CH
POORT D-1 01H 05H 09H 0DH
POORT D-2 02H 06H 0AH 0EH
POORT D-3 03H 07H 0BH 0FH
Dit is het Data Direction Register van POORT D (DDRD) voor mode 1( MRD=01H). Bit=1→De overeenkomstige poortbit zal als input werken. Bit=0→De overeenkomstige poortbit zal als output werken.
Bank3- 108H
POORT D Input Register (IRD). Dit register bevat de digitale ingangen van de POORT D, deze worden door IOsys gelezen bij het verstrijken van de cyclustijd . Ook de poortbits die als output zijn ingesteld zullen worden gelezen en opgeslagen. De IPC@CHIP kan dan deze data lezen. IOsys kan ook een interrupt genereren bij de IPC@CHIP waarmee wordt aangegeven dat de cyclustijd is afgelopen, en er recente data ter beschikking is.
Bank3- 109H
Versie 1.0
POORT D Output Register. (ORD) Dit register bevat de data die naar de overeenkomende als outputpin ingestelde poortpinnen moet gestuurd worden bij het aflopen van de cyclustijd. Poortpinnen die als input ingesteld zijn zullen in pull-up mode worden geschakeld door er een ‘1’ naartoe te schrijven ongeacht de bitwaarde in dit register. In dit register kan door de IPC@CHIP data geschreven worden.
90
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal .
Gebruikers handleiding v1.0 IPC@CHIP adres Registerfunctie Bank3- 10AH Niet gebruikt in deze versie (gereserveerd voor uitbreidingen) Bank3- 10BH
KeyCode register bij gebruik van POORT D in mode 2. (KC) Dit register bevat de keycode van de ingedrukte toets. - Indien de gebruiker geen keyboard-interrupt heeft ge-enabled zal dit de keycode zijn van de toets die bij het verstrijken van de cyclustijd is ingedrukt . Indien geen toets is ingedrukt zal de waarde FFh worden aangegeven. Op deze manier kan een continue ingedrukte toets worden gelezen. - Indien de gebruiker een keyboard-interrupt heeft ge-eneabled zal dit de keycode zijn van de laatst gedrukte nieuwe toets. De IPC@CHIP krijgt nu immers een interrupt van IOsys om aan te geven dat er een nieuwe toets is ingedrukt.
POORT E / H5 Deze poort kan gebruikt worden als digitale parallelle I/O poort die op bit per bit basis instelbaar is ( bit 4 kan niet worden gebruikt). Bovendien is deze poort ook instelbaar als zelfstandige driver voor een standaard LCD module volgens de in tabel 4.6 gegeven instelwaarden. Tabel 4.6: Mogelijkheden met poort E IPC@CHIP adres Registerfunctie Bank3- 10CH Instelling van de Mode of functie van POORT E. (MRE) (Opgelet: POORT E, bit4 is niet beschikbaar!) 00H→ POORT E wordt niet gebruikt, de uitgangen worden niet aangepast bij het verstrijken van de cyclustijd, er worden geen ingangen gelezen. 01H→ POORT E wordt gebruikt als digitale I/O. 02H→ POORT E werkt als standaard LCD displaymodule driver. Voor het aansturen van een standaard LCD module in 4bit mode zijn volgende aansluitingen nodig. Voor gegevens van standaard LCD modules wordt verwezen naar www.xmocular.com
Versie 1.0
Display functie
POORT E bitnr.
D4 D5 D6 D7 No connection E R/W RS
PE bitnr.0 PE bitnr.1 PE bitnr.2 PE bitnr.3 PE bitnr.4 PE bitnr.5 PE bitnr.6 PE bitnr.7
91
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Bank3- 10DH
Voor de LCD displaymodule is een karakterbuffer voorzien van 80 te displayen karakters. Afhankelijk van het type LCD module zal deze buffer gedeeltelijk of helemaal gebruikt worden. In deze buffer wordt door de IPC@CHIP de te displayen tekstboodschap geplaatst afgesloten door een null (00H) karakter. Deze karakterstring zal door IOsys dan naar de displaymodule gestuurd worden, op de manier zoals het wordt aangegeven in het Display Control Register (DCR) Dit is het Data Direction Register van POORT E (DDRE) voor mode 1( MRE=01H). Bit=1→De overeenkomstige poortbit zal als input werken. Bit=0→De overeenkomstige poortbit zal als output werken.
Bank3- 10EH
POORT E Input Register (IRE). Dit register bevat de digitale ingangen van de POORT E, deze worden door IOsys gelezen bij het verstrijken van de cyclustijd . Ook de poortbits die als output zijn ingesteld zullen worden gelezen en opgeslagen. De IPC@CHIP kan dan deze data lezen. IOsys kan ook een interrupt genereren bij de IPC@CHIP waarmee wordt aangegeven dat de cyclustijd is afgelopen, en er nieuwe data ter beschikking is.
Bank3- 10FH
Bank3- 113H
POORT E Output Register. (ORE) Dit register bevat de data die naar de overeenkomende als outputpin ingestelde poortpinnen moet gestuurd worden bij het aflopen van de cyclustijd. Poortpinnen die als input ingesteld zijn zullen in pull-up mode worden geschakeld door er een ‘1’ naartoe te schrijven ongeacht de bitwaarde in dit register. In dit register kan door de IPC@CHIP data geschreven worden. Display Type Register (DTR). Hier selecteert men het type display module dat men gebruikt. 00H→ 1lijn 16/20/24/40 karakters. 01H→ 2 lijnen 8 karakters (sommige 16 karakters). 02H→ 2 lijnen 16 karakters . 03H→ 2 lijnen 20 karakters. 04H→ 2 lijnen 40 karakters. 05H→ 4 lijnen 20 karakters.
Tabel 4.6: Mogelijkheden met poort E (vervolg)
Versie 1.0
92
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Tabel 4.6: Mogelijkheden met poort E (vervolg) Bank3- 114H Display Control Register (DCR). 00H→ Geen karakterbuffer verzenden naar de displaymodule. 01H→ Buffer afdrukken op display zonder display te clearen. 02H→ Buffer afdrukken op display met display clearing. 03H→ Cursor inschakelen ( karakterbuffer wordt niet verwerkt). 04H→ Cursor uitschakelen (karakterbuffer wordt niet verwerkt). Deze codes worden na het verwerken door IOsys op 00H gereset Opgelet: Een eerste schrijfactie naar de LCD-module moet steeds met CLEAR gebeuren, daar anders de LCD-module niet wordt geïnitialiseerd. Display Control Register (DCR) = 02H. Bank3- 115H
Display KarakterBuffer (DKB). Dit is het startadres van de 81 karakters lange display karakterbuffer (80 karakters +1 extra locatie voor de null afsluitkarakter).
POORT F / H3 Deze poort kan gebruikt worden als digitale input of als analoge input, een selectie hiertussen kan op bit per bit basis gebeuren volgens de in tabel 4.7 aangegeven instellingen. De analoge ingangen worden naar een 10bit digitale waarde geconverteerd. Tabel 4.7: Mogelijkheden met poort F IPC@CHIP adres Registerfunctie Bank3- 110H Instelling van de Mode of functie van POORT E. (MRE) 00H→ POORT F wordt niet gebruikt, de uitgangen worden niet aangepast bij het verstrijken van de cyclustijd, er worden geen ingangen gelezen. 01H→ POORT F wordt gebruikt als digitale en analoge Input. Bank3- 111H
Analog/ Digital Selection Register (ADSR). Bit=1→ De overeenkomstige poortbit wordt analoog gesampled. Bit=0→ De overeenkomstige poortbit wordt digiaal verwerkt.
Bank3- 112H
POORT F Input Register (IRF). Dit register bevat de digitale ingangen van de POORT E, deze worden door IOsys gelezen bij het verstrijken van de cyclustijd . Van de ingangen die als analoge ingang werden geselecteerd in ADSR zal ook de logische waarde worden aangegeven in dit register.
Versie 1.0
93
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal .
Gebruikers handleiding v1.0 Tabel 4.7: Mogelijkheden met poort F (vervolg) Bank3- 166H Analog Input Buffer Registers 0-7 (AIBR0-7). tot Bank3- 175H Deze registers bestaan telkens uit twee bytes. Hier worden de analoge samples opgeslagen die door IOsys genomen worden na iedere cyclustijd. De samples heben een resolutie van 10 bits, en worden opgeslagen in binair formaat. De MSByte van elke sample zal op het hoogste adres van het bijhorende Analog Input Buffer Register geplaatst worden, de LSByte op het laagste adres van hetzelfde register. Buffer adressen Bank3-167H/166H Bank3-169H/168H Bank3-16BH/16AH Bank3-16DH/16CH Bank3-16FH/16EH Bank3-171H/170H Bank3-173H/172H Bank3-175H/174H
Versie 1.0
Analog input channel Analog input 0 / POORT F bit 0/ H3 pin 1 Analog input 0 / POORT F bit 1/ H3 pin 2 Analog input 0 / POORT F bit 2/ H3 pin 3 Analog input 0 / POORT F bit 3/ H3 pin 4 Analog input 0 / POORT F bit 4/ H3 pin 5 Analog input 0 / POORT F bit 5/ H3 pin 6 Analog input 0 / POORT F bit 6/ H3 pin 7 Analog input 0 / POORT F bit 7/ H3 pin 8
94
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
POWER ON SITUATIE EN DETECTIE VAN IOsys. Na POWER-ON kan de IPC@CHIP een aanwezigheidsdetectie van IOsys uitvoeren. In de volgende registers staat nl. ID-info na een power on situatie. Tabel 4.8: Power-on informatie IPC@CHIP adres Registerfunctie Bank3- 1FCH Firmware Version Number Register (FVNR) Bevat een waarde tussen 00H en 255H die het versie nummer aangeeft. Bank3- 1FDH
IOsys Detection Code register0 (IDCR0). Deze locatie bevat de code 55H.
Bank3- 1FAH
IOsys Detection Code register 1(IDCR1). Deze locatie bevat de code AAH.
Na POWER ON blijft IOsys wachten op een interruptsignaal van de IPC@CHIP. Dit kan gegeven worden door naar het Interrupt Register (IR) te schrijven. Dit interruptsignaal is nodig om de instellingen die in de controle registers zijn gemaakt te activeren en daarna de IOsys op te starten. Opgelet: De cyclustijd die is ingesteld in het Cyclustijd Instelling register (CI) wordt alléén met de eerste interrupt van de IPC@CHIP geactiveerd, en kan daarna niet meer worden aangepast! Andere instellingen worden daarna telkens opnieuw geactiveerd bij het aflopen van de cyclustijd, en kunnen dus steeds worden aangepast. Het is dus voldoende dat de IPC@CHIP de nieuwe instellingen maakt in de nodige controleregisters van de DPR, om ze te laten activeren op het ritme van de cyclustijd, hiervoor hoeven geen bijkomende interrupts vanuit de IPC@CHIP gegeven te worden aan IOsys. Wil men echter ogenblikkelijk nieuwe instellingen forceren, en wil men dus het aflopen van de cyclustijd niet afwachten, dan kan men dit doen door deze instellingen eerst in te stellen in de verschillende controleregisters in DPRAM . Daarna zal men een interrupt geven aan IOsys door het Interrupt Register (IR) te schrijven. De instellingen worden nu onmiddellijk geactiveerd, en de nodige acties uitgevoerd. Indien men van het beëindigen hiervan een terugmelding wil naar de IPC@CHIP, aan de hand van een interrupt, dan kan men dit aangeven met een logische “1” in het Interrupt Enable Register (IER) op bitpositie 2
Versie 1.0
95
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
CYCLUSTIJD EN INTERRUPT CONTROLE REGISTERS VAN IOSYS. Deze registers in tabel 4.9 laten toe de algemene werking van IOsys in te stellen wat betreft cyclustijd en interrupt generatie naar de IPC@CHIP toe. Tabel 4.9: Interrupt controleregisters IPC@CHIP adres Registerfunctie Bank3- 100H Cyclustijd Instelling (CI). Hier wordt de gebruikte cyclustijd ( in msec ) van IOsys ingesteld als een getal tussen 00H en FFH. 00H=256msec, 01H=1msec, …FFH=255msec. Dit kan alleen bij de eerste interrupt vanuit de IPC@CHIP (zie IR). Bank3- 101H
Interrupt Enable Register (IER). De verschillende mogelijke interrupts vanuit de IOsys naar de IPC@CHIP kunnen hier worden ge-enabled. Bit0 =1→ Enable interrupt na cyclustijd . Deze interrupt kan niet als tijdbasis gebruikt worden. Bit1 =1→ Enable interrupts na toets die gedrukt wordt op POORT D in keyboard mode. Bit2 =1→ Enable interrupts van IOsys naar IPC@CHIP na de verwerking van een opdracht vanuit de IPC@CHIP naar de IOsys controller, zonder cyclustijd af te wachten.
Bank3- 1FEH
Het interruptsignaal van IOsys naar de IPC@CHIP kan worden geacknowledged door deze laatste door het Interrupt Ackn. Register (IACK) te lezen. Hierdoor valt het interruptsignaal weer weg. Dit moet vanuit de IPC@CHIP gebeuren voor de volgende interrupt door IOsys wordt gegenereerd. Interrupt Acknowledge Register (IACK).
Bank3- 1FFH
Dit register moet gelezen worden door de IPC@CHIP om het interruptsignaal te laten wegvallen ( vóór de volgende interrupt conditie zich voordoet). De inhoud van dit register geeft aan welke de interruptbron is in IOsys. IACK=01H Cycle time interrupt. IACK=02H Keyboard interrupt. IACK=03H Verwerkte taak op IOsys, op aanvraag van een interrupt vanuit de IPC@CHIP . Interrupt Register (IR). De IPC@CHIP kan langs dit register een interrupt geven aan IOsys. Dit kan, door dit register te schrijven met een willekeurige waarde. De bedoeling hiervan is, om hetzelfde effect te bekomen als het beëindigen van de cyclustijd. De ingangen worden gesampled, de uitgangen aangestuurd en de nieuwe instellingen in de controleregisters worden geactiveerd. Na reset moet hiermee bij de eerste interrupt de cyclustijd ingesteld worden!
Versie 1.0
96
[dp] D. Pauwels