Ladda ner presentationen
Presentation laddar. Vänta.
1
2G1502 Datorteknik allmän kurs
16 apr -17 2G1502 Datorteknik allmän kurs Föreläsning 5 In- och utmatning, I/O Programstyrd pollning 16 April 2017 2G1502, föreläsning 5, ht2003
2
Föreläsning 5 Innehåll, rubriker
I/O-enheter allmänt read och write, adressering Parallellport, funktion, pollning Serieport, funktion, pollning Timer, funktion, pollning Eko-program Kommunikations-program Paritetskontroll 16 April 2017 2G1502, föreläsning 5, ht2003
3
Litteraturhänvisningar
Kursbokens avsnitt 1.4 Maskinvara 2.6 Bussar och enkel I/O-hantering 5.2 Koppling till omvärlden, sid 9.4 Kommunikation mellan processor ... 4.5 Subrutiner och stack 4.6 Praktisk assemblerprogrammering 16 April 2017 2G1502, föreläsning 5, ht2003
4
Viktiga delar i en dator
CPU BUS I/O MEM 16 April 2017 2G1502, föreläsning 5, ht2003
5
Programexekvering i två steg
EXECUTE FETCH (update PC) (decode) 16 April 2017 2G1502, föreläsning 5, ht2003
6
Bus Data Transfer Memory Read
Master t.ex. CPU Slave t.ex. Memory Master levererar Adress Master levererar Rd-Request Slave levererar Data Slave levererar en Rd-Acknowledge 16 April 2017 2G1502, föreläsning 5, ht2003
7
Bus Data Transfer Memory Read
Address Rd Data RdAck Vad händer om RdAck uteblir ? 16 April 2017 2G1502, föreläsning 5, ht2003
8
Bus Data Transfer Memory Write
Master t.ex. CPU Slave t.ex. Memory Master levererar Adress Master levererar Data Master levererar Wr-Request Slave levererar en Wr-Acknowledge 16 April 2017 2G1502, föreläsning 5, ht2003
9
Bus Data Transfer Memory Write
Address Wr Data WrAck Vad händer om WrAck uteblir ? 16 April 2017 2G1502, föreläsning 5, ht2003
10
Två minnen kan man ha ! På olika adresser !
CPU BUS MEM MEM Adress ditten Adress datten 16 April 2017 2G1502, föreläsning 5, ht2003
11
Två minnen kan man ha ! På olika adresser !
CPU BUS ? ? MEM MEM Adress ditten Adress datten Adress-avkodare 16 April 2017 2G1502, föreläsning 5, ht2003
12
Flera Slave kan man ha ! På olika adresser !
CPU BUS ? ? I/O MEM Adress ditten Adress datten Adress-avkodare 16 April 2017 2G1502, föreläsning 5, ht2003
13
Flera Master kan man ha ! På olika vadådå!
BUS ? ? I/O MEM Adress ditten Adress datten Adress-avkodare 16 April 2017 2G1502, föreläsning 5, ht2003
14
Bus-ledningar Adress, för att kunna peka ut varje byte
Data, lagom bred minst 8 bitar Kontroll Read och Write eller RD/WR och DS Ack för Rd och Write, kan vara gemensam Övrigt som jord, Vcc, Reset etc. 16 April 2017 2G1502, föreläsning 5, ht2003
15
Bus-ledningar (forts.)
Långsam Slave kan bromsa Fördröj Acknowledge eller Inför speciell Hold-signal Inför tidövervakning, Time-Out Time-Out för Ack är Bus Error (el.dyl.) 16 April 2017 2G1502, föreläsning 5, ht2003
16
Bus-ledningar (forts.)
Om det finns fler än en Master krävs Bus Arbiter (bus-fördelare) Varje Slave måste ha adressavkodare så att högst en enhet svarar på request Referens av oanvänd adress medför ??? 16 April 2017 2G1502, föreläsning 5, ht2003
17
Två typer av adressering
Memory Mapped Memory och I/O har olika adresser Samma kontroll-signaler används till minne och I/O I/O Mapped Memory och I/O kan ha samma adresser Olika kontroll-signaler används till minne och I/O 16 April 2017 2G1502, föreläsning 5, ht2003
18
Parallell-port Parallellport brukar vara multipel av 8 signaler/pinnar
Signalriktning kan vara programmerbar separat för varje signal/pinne Inport består normalt av grindar Utport består normalt av register Handskakningssignaler kan finnas 16 April 2017 2G1502, föreläsning 5, ht2003
19
IN-port & & & . . . IN-DATA IBF WR IBF WR RD INn Dn RD IN-PORT IBF IN1
Q Q’ set clear IBF WR RD INn & Dn RD IN-PORT . . . IBF IN1 & D1 Data IN0 & D0 Control CPU-BUSS Adress RD 16 April 2017 2G1502, föreläsning 5, ht2003
20
UT-port . . . OBE RD WR UT-DATA OBE RD Dn UTn WR UT-PORT D1 UT1 OBE
Q Q’ set clear OBE RD WR UT-DATA OBE RD Dn Q Q’ D cl UTn . . . WR UT-PORT D1 Q Q’ D cl UT1 OBE Data Control CPU-BUSS D0 Q Q’ D cl UT0 Adress WR 16 April 2017 2G1502, föreläsning 5, ht2003
21
Nios button_pio Memory Mapped Addresses
Read only SW7 SW6 SW5 SW4 DIP 1..8 0x470 0x474 0x478 0x47C Text som beskriver button_pio 0x470-0x47F 16 April 2017 2G1502, föreläsning 5, ht2003
22
släppt knapp ger värdet 1
Nios button_pio Memory Mapped Addresses SW4 SW5 SW6 SW7 SW7 SW6 SW5 SW4 SW3 SW2 0x470 Read only släppt knapp ger värdet 1 DIP 1..8 0x470 0x474 0x478 0x47C Adresser: button_pio 0x470-0x47F (ej komplett information) 16 April 2017 2G1502, föreläsning 5, ht2003
23
Nios seven_seg_pio Memory Mapped Addresses
1 2 3 4 5 6 7 5 3 4 2 1 6 . 7 5 3 4 2 1 6 . 7 Write only0 tänder ett segment 0x420 0x424 0x428 0x42C Adresser: seven_seg_pio 0x420-0x42F (ej komplett information) 16 April 2017 2G1502, föreläsning 5, ht2003
24
Parallell-port (forts.) Handskakningssignaler
IBF - Input Buffer Full OBE - Output Buffer Empty IBF och OBE är tillgängliga för program IBF och OBE är tillgängliga för hårdvara 16 April 2017 2G1502, föreläsning 5, ht2003
25
Parallell-port (forts.) Handskakningssignaler
IBF - Input Buffer Full OBE - Output Buffer Empty Aktiv signal IBF (full inport) är en begäran om åtgärd av CPU/program Aktiv signal OBE (tom utport) är en begäran om åtgärd av CPU/program 16 April 2017 2G1502, föreläsning 5, ht2003
26
Parallell-port (forts.) Handskakningssignaler
IBF ettställs normalt då omgivningen levererar nya data till inporten IBF nollställs/kvitteras av program, t.ex. vid läsning av inport 16 April 2017 2G1502, föreläsning 5, ht2003
27
Parallell-port (forts.) Handskakningssignaler
OBE ettställs normalt då omgivningen har tagit hand om utdata OBE nollställs/kvitteras av program, t.ex. vid skrivning av utport 16 April 2017 2G1502, föreläsning 5, ht2003
28
Handskakning med IBF/OBE Flödes-schema, invänta ready (blockerande I/O)
PÅHOPP AVHOPP IBF=1? Nollställ IBF LÄS INDATA LÄS IBF JA NEJ INHOPP UTHOPP OBE=1? Nollställ OBE SKRIV UTDATA LÄS OBE JA NEJ 16 April 2017 2G1502, föreläsning 5, ht2003
29
Handskakning med IBF/OBE Flödes-schema, direkt retur (icke blockerande I/O)
PÅHOPP AVHOPP IBF=1? Nollställ IBF PAR:= INDATA LÄS IBF JA NEJ PAR:= -1 PÅHOPP AVHOPP OBE=1? Nollställ OBE och PAR SKRIV UTDATA LÄS OBE JA NEJ PAR:= -1 16 April 2017 2G1502, föreläsning 5, ht2003
30
getdata från Inport rutin med pollning av statusbit (blockerande I/O)
; getdata(reg) define indata 0x... define status 0x... define ibfmask 0x... getdata: load reg1 <-- status and reg1 <-- ibfmask beq getdata load reg <-- indata return 16 April 2017 2G1502, föreläsning 5, ht2003
31
putdata till Utport rutin med pollning av statusbit (blockerande I/O)
; putdata(data) define utdata 0x... define status 0x... define obemask 0x... putdata:load reg1 <-- status and reg1 <-- obemask beq putdata store utdata <-- data return 16 April 2017 2G1502, föreläsning 5, ht2003
32
Serie-port Används för seriell kommunikation
Vanligt är asynkron kommunikation, ett tecken kan komma när som helst Synkron kommunikation finns även, det kommer alltid en ström av bitar 16 April 2017 2G1502, föreläsning 5, ht2003
33
Serieport Sändare Mottagare Parallella data in skiftregister
Seriell kabel skiftregister Parallella data ut 16 April 2017 2G1502, föreläsning 5, ht2003
34
Serie-port Asynkron kommunikation
Varje tecken (bokstav) sänds för sig Ett tecken kodas ofta med 7 bitars ASCII Dessutom tillkommer 1 startbit 1 paritetsbit (opt) udda eller jämn paritet 1 eller 2 stoppbitar 16 April 2017 2G1502, föreläsning 5, ht2003
35
Avkänningstidpunkter Synkroniseringsflank
Serie-port Asynkron kommunikation Avkänningstidpunkter x x x x x x x P 7-bitars ASCII 1 startbit (0) 1 Paritetsbit (P) Stoppbit(ar) (1) Synkroniseringsflank 16 April 2017 2G1502, föreläsning 5, ht2003
36
Serie-port Asynkron kommunikation
Bithastighet (kallas felaktigt för baudrate) Teckenlängd (5, 6, 7, 8, …) Paritet On/Off, Even/Odd Antal Stoppbitar (1, 1½, 2) (antal perioder mellan sända tecken) 16 April 2017 2G1502, föreläsning 5, ht2003
37
getchar från serieport rutin med pollning av statusbit
; int getchar(void) define data ... define status ... define ibfmask ... getchar: load* tmpreg <-- status andi* tmpreg <-- ibfmask beq* getchar load* outreg <-- data return* ;* betyder macro 16 April 2017 2G1502, föreläsning 5, ht2003
38
putchar till serieport rutin med pollning av statusbit
; putchar(data in inreg) define data define status define obemask ... putchar:load* tmpreg <-- status andi* tmpreg <-- obemask beq* putchar store* data <-- inreg return* 16 April 2017 2G1502, föreläsning 5, ht2003
39
Nios uart_0 Memory Mapped Addresses
TxDATA (WR) RxDATA (RD) uart_0 0x4000x404 0x408 STATUS TxRdy (OBE) RxRdy (IBF) uart_1_debug 0x4C0-4DF uart_serialport 0x4E0-4EF 16 April 2017 2G1502, föreläsning 5, ht2003
40
getchar från serieport syntetisk Nios-kod
; getchar(data) .equ indata, 0x400 ;0x4C0 .equ outdata, 0x404 ;0x4C4 .equ status, 0x408 ;0x4C8 .equ ibfmask, 0x80 ;0x80 getchar: SAVE %sp, 0 LOAD* %L0, status ANDIP* %L0, ibfmask BEQ* getchar LOAD* %i0, indata RET RESTORE 16 April 2017 2G1502, föreläsning 5, ht2003
41
putchar till serieport syntetisk Nios-kod
; putchar(data) .equ indata, 0x400 ;0x4C0 .equ outdata, 0x404 ;0x4C4 .equ status, 0x408 ;0x4C8 .equ obemask, 0x40 ;0x40 putchar: SAVE %sp, 0 LOAD* %L0, status ANDIP* %L0, obemask BEQ* putchar STORE* outdata, %i0 RET RESTORE 16 April 2017 2G1502, föreläsning 5, ht2003
42
Föreläsning 5 Sammanfattning
Pollning av Parallell-port Pollning av Serieport Eko-program Kommunikation 16 April 2017 2G1502, föreläsning 5, ht2003
43
Laboration 2 EKO-program
Skriv ett progam som ekar tecken från tangentbord till terminalfönster start: bsr initserie main: bsr getchar bsr putchar bra main ; och en del NOP:ar 16 April 2017 2G1502, föreläsning 5, ht2003
44
Flödesschema för EKO-program
START init getchar putchar 16 April 2017 2G1502, föreläsning 5, ht2003
45
Flödesschema för korsvis kommunikation
START getcharx ? JA senchar NEJ reccharx ? JA putchar NEJ 16 April 2017 2G1502, föreläsning 5, ht2003
46
EKO-program fast korsvis kommunikation
start: bsr initserie ;initera serieportar gettst: bsr getcharx ;tecken från tangentbord ? ifnrz %o0 ;i så fall br send ;hopp till send rectst: bsr reccharx ;tecken mottaget ? ifrz %o0 ;om inte br gettst ;hopp till gettst put: bsr putchar ;annars skrivut motaget tecken br gettst ;loopa send: bsr sendchar ;sänd ett tecken br rectst ;och tillbaka in i loopen ; nop är utelämnade,ska skrivas till ... 16 April 2017 2G1502, föreläsning 5, ht2003
47
Flödesschema för korsvis kommunikation med paritetskontroll
START getcharx ? JA parmake errmake senchar NEJ reccharx ? JA partest putchar NEJ 16 April 2017 2G1502, föreläsning 5, ht2003
48
Korsvis kommunikation med paritetskontroll
start: bsr initserie ;initera ev. serieportar gettst: bsr getcharx ;tecken från tangentbord ? ifnrz %o0 ;i så fall br send ;hopp till send rectst: bsr reccharx ;tecken mottaget ? ifrz %o0 ;om inte br gettst ;hopp till gettst put: bsr partest ;kolla paritet bsr putchar ;skriv ut motaget tecken br gettst ;loopa send: bsr parmake ;inför paritet bsr errmake ;inför error bsr sendchar ;sänd ett tecken br rectst ;och tillbaka in i loopen ; nop är utelämnade,ska skrivas till ... 16 April 2017 2G1502, föreläsning 5, ht2003
49
Timer Används för exaktare tidmätning
alt1: Counter räknar upp från 0 till value alt2: Counter räknar ner från value till 0 Counter framme kallas Time-Out Vid Time-Out ettställs en vippa vars värde finns tillgängligt för program och elektriskt Vippan kan nollställas (hur?) 16 April 2017 2G1502, föreläsning 5, ht2003
50
Counter som räknar upp Flödesschema för väntan
arrive Read TimeOut TimeOut=1? NO YES Clear TimeOut return 16 April 2017 2G1502, föreläsning 5, ht2003
51
Flödesschema DELAY med PROGRAM-LOOP
IN-hopp K := msek inparameter Program-loop 1 millisekund N := start IN-hopp K = 0 ? N = 0 ? Byt ut program-loop mot timer-loop JA JA NEJ NEJ K := K - 1 N := N - 1 Laboration 1 UT-hopp UT-hopp 16 April 2017 2G1502, föreläsning 5, ht2003
52
Flödesschema DELAY med TIMER
arrive return TimeOut=1? Clear TimeOut Read TimeOut YES NO K := msek inparameter Timer-loop 1 millisekund IN-hopp K = 0 ? JA NEJ K := K - 1 Laboration 2 UT-hopp 16 April 2017 2G1502, föreläsning 5, ht2003
53
Timer med Counter som räknar ner
Counter laddas med period Counter minskas med ett vid clockflank Counter=0 medför ettställ Time-Out Counter laddas om vid Time-Out period kan väljas med program 16 April 2017 2G1502, föreläsning 5, ht2003
54
Timer Statusvippa Time-Out
Statusvippa som kallas Time-Out ettställs vid Time-Out kan pollas av program ska nollställas av program tillgänglig som elektrisk signal 16 April 2017 2G1502, föreläsning 5, ht2003
55
Timer Statusvippa Run Statusvippa som kallas Run
ettställs av program nollställs av program kan pollas av program tillgänglig som elektrisk signal ? 16 April 2017 2G1502, föreläsning 5, ht2003
56
Nios Timer Hårdvaru-figur
write from program load period start load zero counter Q Q’ D cl run set -1 load clock Q Q’ D cl time-out snap-shot stop clear read from program 16 April 2017 2G1502, föreläsning 5, ht2003
57
Nios Timer Memory Mapped Addresses
0x440 0x444 0x448 0x44C 0x450 0x454 0x458 0x45C 16 April 2017 2G1502, föreläsning 5, ht2003
58
Nios Timer Status / Control etc
Run TI Time-Out 0x440 status 0x444 control 0x448 periodl 0x44C periodh 0x450 snapl 0x454 snaph ITO cont start stop 16 April 2017 2G1502, föreläsning 5, ht2003
59
Nios Timer Hokus Pokus TI - Time Out, bit 0 på adress 0x440
Run, bit 1 på adress 0x440 Clear Time Out, Write anything to 0x440 Continous Counting, ”set” bit 1 at 0x444 Start Run,”set” bit 2 at 0x444 Stop Counting, ”set” bit 3 at 0x444 WR to snapshot, copy Counter to SnapShot (ej komplett information) 16 April 2017 2G1502, föreläsning 5, ht2003
60
Serieport Sändare Mottagare Parallella data in skiftregister
Seriell kabel skiftregister Parallella data ut 16 April 2017 2G1502, föreläsning 5, ht2003
61
Paritet i ett n-bitars ord jämn eller udda paritet
Jämn paritet = jämnt antal ettor i ordet Udda paritet = udda antal ettor i ordet Feldetektering Detekterar alla ”udda-bits-fel” dvs om ett udda antal bitar har växlat värde Felkorrigering, hur då ??? Omsändning !!! 16 April 2017 2G1502, föreläsning 5, ht2003
62
Paritetskontroll vid kommunikation
Sändaren kompletterar med en extra bit vars värde sätts så att man får rätt paritet i det ord som sänds Mottagaren kontrollerar att det är rätt paritet i det mottagna ordet 16 April 2017 2G1502, föreläsning 5, ht2003
63
Kartbild av minnet Adress MEM / IO 0 - 3FF boot_monitor_rom
400-41F uart_0 (”main”) 420-42F seven_seg_pio 440-45F timer_0 460-46F led-pio 470-47F button_pio 480-48F lcd-pio 4A0-4BF dma 16 April 2017 2G1502, föreläsning 5, ht2003
64
Kartbild av minnet 4C0-4DF uart_1_debug (debug)
4E0-4FF uart_serialport (komm) 500-5FF memory_mapped_io ?-? ext_ram_bus FFFF ext_ram, 256 kByte 7FF00-7FFFF ”int. vector_table” FFFFF ext_flash, 1 Mbyte 16 April 2017 2G1502, föreläsning 5, ht2003
65
4.5 Subrutiner och stack Gränssnitt mot funktion/subrutin
placering av parametrar till rutinen placering av lokala variabler placering av returvärden 16 April 2017 2G1502, föreläsning 5, ht2003
66
Variabler i minnet (register) Viktiga aspekter att ta med
Allokering av minne vid kompilering at compile-time Allokering av minne vid exekvering at run-time global / lokal variabel code-area, data-area, heap-area, stack-area push och pop för stacken malloc och free för heapen 16 April 2017 2G1502, föreläsning 5, ht2003
67
Allokering av minne at compile time
Vid kompilering allokeras minne för Programkoden - code eller text Globala data initialized (.data) uninitialized (.bss) Heaparea Stackarea 16 April 2017 2G1502, föreläsning 5, ht2003
68
Allokering av minne at execution/run time
Vid exekvering allokeras minne från stacken och används för Parametrar vid funktionsanrop Returadress vid funktionsanrop Lokala variabler i anropad funktion Skydd av register vid registerbrist 16 April 2017 2G1502, föreläsning 5, ht2003
69
Allokering av minne at execution/run time
Vid exekvering allokeras minne från heapen och används för Static variables i instanser av objects Dynamiska data-strukturer 16 April 2017 2G1502, föreläsning 5, ht2003
70
Kartbild av minnet code data heap stack 7 0 adress 0 adressrymd
adress 0 PC +2 code (fetch-execute) data (load-store) heap (malloc-free) adressrymd SP +2 -2 stack adress 2n -1 (push-pop) 16 April 2017 2G1502, föreläsning 5, ht2003
71
STACK operationer PUSH och POP
PUSH op: SP <- sp - n mem(sp) <- op POP dst: dst <- mem(sp) SP <- sp + n n = antal bytes - Stack Pointer SP + före funktionsanrop 16 April 2017 2G1502, föreläsning 5, ht2003
72
Funktionsanrop Parametrar på stacken
PUSH paramk … PUSH param2 PUSH param1 CALL funk ADDI #n*k, SP - param1 param2 ... paramk Stack Pointer SP + efter lagring av parametrar 16 April 2017 2G1502, föreläsning 5, ht2003
73
Funktionsanrop Returadress på stacken
… ret return param1 param2 ... paramk - Stack Pointer SP + efter funktionsanrop 16 April 2017 2G1502, föreläsning 5, ht2003
74
Funktionsanrop frame pointer
funk: save %sp,0 … ret restore Stack Pointer return param1 param2 ... paramk - SP Frame Pointer FP + efter funktionsanrop och save %sp,0 16 April 2017 2G1502, föreläsning 5, ht2003
75
Funktionsanrop Lokala variabler på stacken
locvar2 locvar1 return param1 param2 ... paramn funk: save %SP,-2 … ret restore Stack Pointer - SP Frame Pointer FP + efter save %sp,-2 16 April 2017 2G1502, föreläsning 5, ht2003
76
Funktionsanrop Lokala variabler på stacken
locvar2 locvar1 return param1 param2 ... paramn funk: save %SP,-2 … ret restore Stack Pointer - SP + efter ret/restore 16 April 2017 2G1502, föreläsning 5, ht2003
77
Adressering adress relativt frame pointer
locvar2 locvar1 return param1 param2 … paramn param1 = 1n(fp) param2 = 2n(fp) paramk = kn(fp) ... locvar1 = -1n(fp) locvar2 = -2n(fp) Stack Pointer - SP Frame Pointer FP + 16 April 2017 2G1502, föreläsning 5, ht2003
78
Editering Exempel på C-kod
/* typexempel på program skrivet i c-kod */ #include ”nios.h” #define plussa = sum /* macrodefinition */ int TIME = 0x5959; /* globala initierade variabler, placeras i .data */ int a, b, c; /* globala oinitierade variabler, placeras i .bss */ int sum (int par1, par2) /* functions definition */ int tmp; /* lokal variabel, placeras på stack */ { tmp = par1 + par 2; return (tmp) } /* returadress på stack */ main () int talA talB, talC; /* lokala variabler i main, placeras på stack */ { /* själva programkoden i huvudprogrammmet /* ... talC = plussa (talA, talB) /* anrop av function, parametrar på stack */ printf(…) } 16 April 2017 2G1502, föreläsning 5, ht2003
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.