Presentation laddar. Vänta.

Presentation laddar. Vänta.

2 June 20152G1502, föreläsning 5, ht20031 2G1502 Datorteknik allmän kurs Föreläsning 5 In- och utmatning, I/O Programstyrd pollning.

Liknande presentationer


En presentation över ämnet: "2 June 20152G1502, föreläsning 5, ht20031 2G1502 Datorteknik allmän kurs Föreläsning 5 In- och utmatning, I/O Programstyrd pollning."— Presentationens avskrift:

1 2 June 20152G1502, föreläsning 5, ht G1502 Datorteknik allmän kurs Föreläsning 5 In- och utmatning, I/O Programstyrd pollning

2 2 June 20152G1502, föreläsning 5, ht20032 Föreläsning 5 Innehåll, rubriker zI/O-enheter allmänt read och write, adressering zParallellport, funktion, pollning zSerieport, funktion, pollning zTimer, funktion, pollning zEko-program zKommunikations-program zParitetskontroll

3 2 June 20152G1502, föreläsning 5, ht20033 Litteraturhänvisningar Kursbokens avsnitt z1.4 Maskinvara z2.6 Bussar och enkel I/O-hantering z5.2 Koppling till omvärlden, sid z9.4 Kommunikation mellan processor... z4.5 Subrutiner och stack z4.6 Praktisk assemblerprogrammering

4 2 June 20152G1502, föreläsning 5, ht20034 Viktiga delar i en dator CPU MEM BUS I/O

5 2 June 20152G1502, föreläsning 5, ht20035 Programexekvering i två steg EXECUTE FETCH (update PC) (decode)

6 2 June 20152G1502, föreläsning 5, ht20036 Bus Data Transfer Memory Read zMaster t.ex. CPU zSlave t.ex. Memory zMaster levererar Adress zMaster levererar Rd-Request zSlave levererar Data zSlave levererar en Rd-Acknowledge

7 2 June 20152G1502, föreläsning 5, ht20037 Bus Data Transfer Memory Read Address Rd Data RdAck Vad händer om RdAck uteblir ?

8 2 June 20152G1502, föreläsning 5, ht20038 Bus Data Transfer Memory Write zMaster t.ex. CPU zSlave t.ex. Memory zMaster levererar Adress zMaster levererar Data zMaster levererar Wr-Request zSlave levererar en Wr-Acknowledge

9 2 June 20152G1502, föreläsning 5, ht20039 Bus Data Transfer Memory Write Address Wr Data WrAck Vad händer om WrAck uteblir ?

10 2 June 20152G1502, föreläsning 5, ht Två minnen kan man ha ! På olika adresser ! CPU MEM BUS MEM Adress dittenAdress datten

11 2 June 20152G1502, föreläsning 5, ht Två minnen kan man ha ! På olika adresser ! CPU MEM BUS MEM Adress dittenAdress datten ?? Adress-avkodare

12 2 June 20152G1502, föreläsning 5, ht Flera Slave kan man ha ! På olika adresser ! CPU MEM BUS I/O Adress dittenAdress datten ?? Adress-avkodare

13 2 June 20152G1502, föreläsning 5, ht Flera Master kan man ha ! På olika vadådå! Master MEM BUS I/O Adress dittenAdress datten ?? Adress-avkodare Master

14 2 June 20152G1502, föreläsning 5, ht Bus-ledningar zAdress, för att kunna peka ut varje byte zData, lagom bred minst 8 bitar zKontroll Read och Write eller RD/WR och DS Ack för Rd och Write, kan vara gemensam zÖvrigt som jord, Vcc, Reset etc.

15 2 June 20152G1502, föreläsning 5, ht Bus-ledningar (forts.) zLångsam Slave kan bromsa Fördröj Acknowledge eller Inför speciell Hold-signal zInför tidövervakning, Time-Out zTime-Out för Ack är Bus Error (el.dyl.)

16 2 June 20152G1502, föreläsning 5, ht Bus-ledningar (forts.) zOm det finns fler än en Master krävs Bus Arbiter (bus-fördelare) zVarje Slave måste ha adressavkodare så att högst en enhet svarar på request zReferens av oanvänd adress medför ???

17 2 June 20152G1502, föreläsning 5, ht Två typer av adressering zMemory Mapped zMemory och I/O har olika adresser zSamma kontroll- signaler används till minne och I/O z I/O Mapped z Memory och I/O kan ha samma adresser z Olika kontroll-signaler används till minne och I/O

18 2 June 20152G1502, föreläsning 5, ht Parallell-port zParallellport brukar vara multipel av 8 signaler/pinnar zSignalriktning kan vara programmerbar separat för varje signal/pinne zInport består normalt av grindar zUtport består normalt av register zHandskakningssignaler kan finnas

19 2 June 20152G1502, föreläsning 5, ht IN-port &&& RD IN-PORT IBFWRIN-DATA RD IBF Adress Data Control CPU-BUSS IN 0 IN n DnDn D0D0 IN 1 D1D1 Q Q’ set clear IBF WR RD

20 2 June 20152G1502, föreläsning 5, ht UT-port UT-PORT OBERDUT-DATA WR OBE Adress Data Control CPU-BUSS Q Q’ D cl Q Q’ D cl Q Q’ D cl DnDn D0D0 D1D1 UT 0 UT n UT 1 WR Q Q’ set clear OBE RD WR

21 2 June 20152G1502, föreläsning 5, ht Nios button_pio Memory Mapped Addresses 0x470 0x474 0x478 0x47C DIP 1..8 Text som beskriver button_pio0x470-0x47F SW7 SW6 SW5 SW4 Read only

22 2 June 20152G1502, föreläsning 5, ht Nios button_pio Memory Mapped Addresses 0x470 0x474 0x478 0x47C DIP 1..8 Adresser: button_pio0x470-0x47F (ej komplett information) SW7 SW6 SW5 SW4 0x470 Read only SW7SW6SW5SW4 SW2 SW3 släppt knapp ger värdet 1

23 2 June 20152G1502, föreläsning 5, ht Nios seven_seg_pio Memory Mapped Addresses 0x420 0x424 0x428 0x42C Adresser: seven_seg_pio0x420-0x42F (ej komplett information) Write only0 tänder ett segment

24 2 June 20152G1502, föreläsning 5, ht Parallell-port (forts.) Handskakningssignaler zIBF - Input Buffer Full zOBE - Output Buffer Empty zIBF och OBE är tillgängliga för program zIBF och OBE är tillgängliga för hårdvara

25 2 June 20152G1502, föreläsning 5, ht Parallell-port (forts.) Handskakningssignaler zIBF - Input Buffer Full zOBE - Output Buffer Empty zAktiv signal IBF (full inport) är en begäran om åtgärd av CPU/program zAktiv signal OBE (tom utport) är en begäran om åtgärd av CPU/program

26 2 June 20152G1502, föreläsning 5, ht Parallell-port (forts.) Handskakningssignaler zIBF ettställs normalt då omgivningen levererar nya data till inporten zIBF nollställs/kvitteras av program, t.ex. vid läsning av inport

27 2 June 20152G1502, föreläsning 5, ht Parallell-port (forts.) Handskakningssignaler zOBE ettställs normalt då omgivningen har tagit hand om utdata zOBE nollställs/kvitteras av program, t.ex. vid skrivning av utport

28 2 June 20152G1502, föreläsning 5, ht 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

29 2 June 20152G1502, föreläsning 5, ht 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:= -1PÅHOPP AVHOPP OBE=1? Nollställ OBE och PAR SKRIV UTDATA LÄS OBE JA NEJ PAR:= -1

30 2 June 20152G1502, föreläsning 5, ht getdata från Inport rutin med pollning av statusbit (blockerande I/O) ;getdata(reg) defineindata 0x... definestatus 0x... defineibfmask 0x... getdata:loadreg1 <-- status andreg1 <-- ibfmask beqgetdata loadreg <-- indata return

31 2 June 20152G1502, föreläsning 5, ht ;putdata(data) defineutdata 0x... definestatus 0x... defineobemask 0x... putdata:loadreg1 <-- status andreg1 <-- obemask beqputdata storeutdata <-- data return putdata till Utport rutin med pollning av statusbit (blockerande I/O)

32 2 June 20152G1502, föreläsning 5, ht Serie-port zAnvänds för seriell kommunikation zVanligt är asynkron kommunikation, ett tecken kan komma när som helst zSynkron kommunikation finns även, det kommer alltid en ström av bitar

33 2 June 20152G1502, föreläsning 5, ht Serieport Sändare Mottagare Parallella data in Parallella data ut skiftregister Seriell kabel skiftregister

34 2 June 20152G1502, föreläsning 5, ht Serie-port Asynkron kommunikation zVarje tecken (bokstav) sänds för sig zEtt tecken kodas ofta med 7 bitars ASCII zDessutom tillkommer 1 startbit 1 paritetsbit (opt) udda eller jämn paritet 1 eller 2 stoppbitar

35 2 June 20152G1502, föreläsning 5, ht Serie-port Asynkron kommunikation 0x x xxxxxP1 1 7-bitars ASCII 1 startbit (0) 1 Paritetsbit (P) Stoppbit(ar) (1) Synkroniseringsflank Avkänningstidpunkter

36 2 June 20152G1502, föreläsning 5, ht Serie-port Asynkron kommunikation zBithastighet (kallas felaktigt för baudrate) zTeckenlängd (5, 6, 7, 8, …) zParitet On/Off, Even/Odd zAntal Stoppbitar (1, 1½, 2) (antal perioder mellan sända tecken)

37 2 June 20152G1502, föreläsning 5, ht getchar från serieport rutin med pollning av statusbit ;int getchar(void) definedata... definestatus... defineibfmask... getchar:load*tmpreg <-- status andi*tmpreg <-- ibfmask beq*getchar load*outreg <-- data return* ;* betyder macro

38 2 June 20152G1502, föreläsning 5, ht putchar till serieport rutin med pollning av statusbit ;putchar(data in inreg) definedata... definestatus... defineobemask... putchar:load*tmpreg <-- status andi*tmpreg <-- obemask beq*putchar store*data <-- inreg return*

39 2 June 20152G1502, föreläsning 5, ht Nios uart_0 Memory Mapped Addresses 0x400 0x404 0x408 TxRdy (OBE) RxRdy (IBF) TxDATA (WR) RxDATA (RD) uart_1_debug0x4C0-4DF uart_serialport 0x4E0-4EF uart_0 STATUS

40 2 June 20152G1502, föreläsning 5, ht getchar från serieport syntetisk Nios-kod ;getchar(data).equindata, 0x400;0x4C0.equoutdata, 0x404;0x4C4.equstatus, 0x408;0x4C8.equibfmask, 0x80;0x80 getchar: SAVE %sp, 0 LOAD * %L0, status ANDIP * %L0, ibfmask BEQ * getchar LOAD* %i0, indata RET RESTORE

41 2 June 20152G1502, föreläsning 5, ht putchar till serieport syntetisk Nios-kod ;putchar(data).equindata, 0x400;0x4C0.equoutdata, 0x404;0x4C4.equstatus, 0x408;0x4C8.equobemask, 0x40;0x40 putchar: SAVE %sp, 0 LOAD * %L0, status ANDIP * %L0, obemask BEQ * putchar STORE* outdata, %i0 RET RESTORE

42 2 June 20152G1502, föreläsning 5, ht Föreläsning 5 Sammanfattning zPollning av Parallell-port zPollning av Serieport zEko-program zKommunikation

43 2 June 20152G1502, föreläsning 5, ht Laboration 2 EKO-program zSkriv ett progam som ekar tecken från tangentbord till terminalfönster start:bsrinitserie main:bsrgetchar bsrputchar bramain ; och en del NOP:ar

44 2 June 20152G1502, föreläsning 5, ht Flödesschema för EKO-program START getcharputcharinit

45 2 June 20152G1502, föreläsning 5, ht Flödesschema för korsvis kommunikation START getcharx ?senchar JA NEJ reccharx ?putchar NEJ JA

46 2 June 20152G1502, föreläsning 5, ht EKO-program fast korsvis kommunikation start:bsrinitserie;initera serieportar gettst:bsrgetcharx;tecken från tangentbord ? ifnrz%o0;i så fall brsend;hopp till send rectst:bsrreccharx;tecken mottaget ? ifrz%o0;om inte brgettst;hopp till gettst put:bsrputchar;annars skrivut motaget tecken brgettst;loopa send:bsrsendchar;sänd ett tecken brrectst;och tillbaka in i loopen ; nop är utelämnade,ska skrivas till...

47 2 June 20152G1502, föreläsning 5, ht Flödesschema för korsvis kommunikation med paritetskontroll START getcharx ?parmake JA NEJ reccharx ?partest NEJ JA errmakesencharputchar

48 2 June 20152G1502, föreläsning 5, ht Korsvis kommunikation med paritetskontroll start:bsrinitserie;initera ev. serieportar gettst:bsrgetcharx;tecken från tangentbord ? ifnrz%o0;i så fall brsend;hopp till send rectst:bsrreccharx;tecken mottaget ? ifrz%o0;om inte brgettst;hopp till gettst put:bsrpartest;kolla paritet bsrputchar;skriv ut motaget tecken brgettst;loopa send:bsrparmake;inför paritet bsrerrmake;inför error bsrsendchar;sänd ett tecken brrectst;och tillbaka in i loopen ; nop är utelämnade,ska skrivas till...

49 2 June 20152G1502, föreläsning 5, ht Timer zAnvänds för exaktare tidmätning zalt1: Counter räknar upp från 0 till value zalt2: Counter räknar ner från value till 0 zCounter framme kallas Time-Out zVid Time-Out ettställs en vippa vars värde finns tillgängligt för program och elektriskt zVippan kan nollställas (hur?)

50 2 June 20152G1502, föreläsning 5, ht Counter som räknar upp Flödesschema för väntan arrive return TimeOut=1?Read TimeOut YES NO Clear TimeOut

51 2 June 20152G1502, föreläsning 5, ht Flödesschema DELAY med PROGRAM-LOOP N := startN := N - 1N = 0 ? IN-hopp UT-hopp JA NEJ K := msekK := K - 1K = 0 ? IN-hopp UT-hopp JA NEJ Byt ut program-loop mot timer-loop Program-loop 1 millisekund inparameter Laboration 1

52 2 June 20152G1502, föreläsning 5, ht Flödesschema DELAY med TIMER K := K - 1K = 0 ? IN-hopp UT-hopp JA NEJ arrive return TimeOut=1? Clear TimeOut Read TimeOut YES NO Timer-loop 1 millisekund K := msek inparameter Laboration 2

53 2 June 20152G1502, föreläsning 5, ht Timer med Counter som räknar ner zCounter laddas med period zCounter minskas med ett vid clockflank zCounter=0 medför ettställ Time-Out zCounter laddas om vid Time-Out zperiod kan väljas med program

54 2 June 20152G1502, föreläsning 5, ht Timer Statusvippa Time-Out zStatusvippa som kallas Time-Out ettställs vid Time-Out kan pollas av program ska nollställas av program tillgänglig som elektrisk signal

55 2 June 20152G1502, föreläsning 5, ht Timer Statusvippa Run zStatusvippa som kallas Run ettställs av program nollställs av program kan pollas av program tillgänglig som elektrisk signal ?

56 2 June 20152G1502, föreläsning 5, ht Nios Timer Hårdvaru-figur counter clock period load write from program run start time-out Q Q’ D cl set clear stop zero snap-shot read from program load Q Q’ D cl

57 2 June 20152G1502, föreläsning 5, ht Nios Timer Memory Mapped Addresses 0x440 0x444 0x448 0x44C 0x450 0x454 0x458 0x45C

58 2 June 20152G1502, föreläsning 5, ht x440 status 0x444 control 0x448 periodl 0x44C periodh 0x450 snapl 0x454 snaph Nios Timer Status / Control etc Run TI Time-Out ITO cont start stop 15 0

59 2 June 20152G1502, föreläsning 5, ht Nios Timer Hokus Pokus zTI - Time Out, bit 0 på adress 0x440 zRun, bit 1 på adress 0x440 zClear Time Out, Write anything to 0x440 zContinous Counting, ”set” bit 1 at 0x444 zStart Run,”set” bit 2 at 0x444 zStop Counting, ”set” bit 3 at 0x444 zWR to snapshot, copy Counter to SnapShot (ej komplett information)

60 2 June 20152G1502, föreläsning 5, ht Serieport Sändare Mottagare Parallella data in Parallella data ut skiftregister Seriell kabel skiftregister

61 2 June 20152G1502, föreläsning 5, ht Paritet i ett n-bitars ord jämn eller udda paritet zJämn paritet = jämnt antal ettor i ordet zUdda paritet = udda antal ettor i ordet zFeldetektering Detekterar alla ”udda-bits-fel” dvs om ett udda antal bitar har växlat värde zFelkorrigering, hur då ??? zOmsändning !!!

62 2 June 20152G1502, föreläsning 5, ht Paritetskontroll vid kommunikation zSä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 zMottagaren kontrollerar att det är rätt paritet i det mottagna ordet

63 2 June 20152G1502, föreläsning 5, ht Kartbild av minnet zAdressMEM / IO z0 - 3FFboot_monitor_rom z400-41Fuart_0 (”main”) z420-42Fseven_seg_pio z440-45Ftimer_0 z460-46Fled-pio z470-47Fbutton_pio z480-48Flcd-pio z4A0-4BFdma

64 2 June 20152G1502, föreläsning 5, ht Kartbild av minnet z4C0-4DFuart_1_debug (debug) z4E0-4FFuart_serialport (komm) z500-5FFmemory_mapped_io z?-?ext_ram_bus z FFFFext_ram, 256 kByte z7FF00-7FFFF”int. vector_table” z FFFFFext_flash, 1 Mbyte

65 2 June 20152G1502, föreläsning 5, ht Subrutiner och stack Gränssnitt mot funktion/subrutin zplacering av parametrar till rutinen zplacering av lokala variabler zplacering av returvärden

66 2 June 20152G1502, föreläsning 5, ht Variabler i minnet (register) Viktiga aspekter att ta med zAllokering av minne vid kompilering at compile-time zAllokering av minne vid exekvering at run-time zglobal / lokal variabel zcode-area, data-area, heap-area, stack-area zpush och pop för stacken zmalloc och free för heapen

67 2 June 20152G1502, föreläsning 5, ht Allokering av minne at compile time Vid kompilering allokeras minne för zProgramkoden - code eller text zGlobala data initialized (.data) uninitialized (.bss) zHeaparea zStackarea

68 2 June 20152G1502, föreläsning 5, ht Allokering av minne at execution/run time Vid exekvering allokeras minne från stacken och används för zParametrar vid funktionsanrop zReturadress vid funktionsanrop zLokala variabler i anropad funktion zSkydd av register vid registerbrist

69 2 June 20152G1502, föreläsning 5, ht Allokering av minne at execution/run time Vid exekvering allokeras minne från heapen och används för zStatic variables i instanser av objects zDynamiska data-strukturer

70 2 June 20152G1502, föreläsning 5, ht Kartbild av minnet adress 0 adress 2 n data code heap PC +2 stack adressrymd (fetch-execute) (malloc-free) (push-pop) (load-store) SP +2 -2

71 2 June 20152G1502, föreläsning 5, ht STACK operationer PUSH och POP Stack Pointer SP PUSH op: SP <- sp - n mem(sp) <- op POPdst: dst <- mem(sp) SP <- sp + n n = antal bytes + - före funktionsanrop

72 2 June 20152G1502, föreläsning 5, ht Funktionsanrop Parametrar på stacken Stack Pointer SP PUSH paramk … PUSH param2 PUSH param1 CALL funk ADDI #n*k, SP + - param1 param2... paramk efter lagring av parametrar

73 2 June 20152G1502, föreläsning 5, ht Funktionsanrop Returadress på stacken Stack Pointer SP + - funk:... … ret return param1 param2... paramk efter funktionsanrop

74 2 June 20152G1502, föreläsning 5, ht Funktionsanrop frame pointer funk: save %sp,0 … ret restore + - Frame Pointer FP Stack Pointer SP return param1 param2... paramk efter funktionsanrop och save %sp,0

75 2 June 20152G1502, föreläsning 5, ht Funktionsanrop Lokala variabler på stacken funk: save %SP,-2 … ret restore + - Frame Pointer FP Stack Pointer SP locvar2 locvar1 return param1 param2... paramn efter save %sp,-2

76 2 June 20152G1502, föreläsning 5, ht Funktionsanrop Lokala variabler på stacken funk: save %SP,-2 … ret restore + - Stack Pointer SP locvar2 locvar1 return param1 param2... paramn efter ret/restore

77 2 June 20152G1502, föreläsning 5, ht Adressering adress relativt frame pointer Frame Pointer FP param1 = 1n(fp) param2 = 2n(fp) paramk = kn(fp)... locvar1 = -1n(fp) locvar2 = -2n(fp) + - locvar2 locvar1 return param1 param2 … paramn Stack Pointer SP

78 2 June 20152G1502, föreläsning 5, ht 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(…)... }


Ladda ner ppt "2 June 20152G1502, föreläsning 5, ht20031 2G1502 Datorteknik allmän kurs Föreläsning 5 In- och utmatning, I/O Programstyrd pollning."

Liknande presentationer


Google-annonser