Presentation laddar. Vänta.

Presentation laddar. Vänta.

William Sandqvist Övning 6 Seriekommunikation - serieport.

Liknande presentationer


En presentation över ämnet: "William Sandqvist Övning 6 Seriekommunikation - serieport."— Presentationens avskrift:

1 William Sandqvist Övning 6 Seriekommunikation - serieport

2 William Sandqvist

3 snaptime() Man måste kunna mäta hur lång tid olika kodavsnitt tar att exekvera. Timern kan därför också användas som ett ”tidtagarur”.

4 William Sandqvist snaptime() stw Snap-funktionen är jämförbar med att ta en ”mellantid” på ett tidtagarur. genom att skriva något (vad som helst) till register snapl så lagras ”mellantiden” i snap-registren.

5 William Sandqvist snaptime()

6 William Sandqvist Lab 2 Assembler: inittimer, checktimer ( eller valbart i C ) C: PutTime_hex Dessa funktioner skriver Du själv. { Hur många cykler tar ett tick? Gör jämförande mätningar med simulatorn och med labutrustningen!

7 William Sandqvist Kommunikation

8 William Sandqvist Parallell och Serie -kommunikation Seriekommunikation behöver få ledningar, men går därför långsammare än parallell kommunikation.

9 William Sandqvist Seriekommunikation parallell-serie-parallell omvandling

10 William Sandqvist Asynkron seriekommunikation Vid seriekommunikation är det nödvändigt att sändare och mottagare opererar med samma i förväg överenskomna hastighet. Den hastighet med vilken bitarna överförs kallas för Bitrate [bit/sek]. Vanliga Bitrate´s är multiplar av 75 bit/sek som: 75, 150, 300, 600, 1200, 9600, 19200, Vi använder och bit/sek.

11 William Sandqvist UART-enhet Serie/Parallell-omvandlingen på bitnivå tas ofta om hand med en specialkrets UART (Universal Asynchronous Reciever/ Transmitter), så att processorn kan leverera/mottaga hela tecken. Flera sådana enheter finns konfigurerade inuti Cyclone II chippet på DE2 kortet. Ex. UART-chip

12 William Sandqvist Bitar och extrabitar Den asynkrona överföringstekniken innebär att man för varje byte lägger till extra bitar som ska göra det möjligt att skilja ut byten från bitströmmen. Ofta lägger man dessutom till en bit för felindikering. En nackdel med detta arrangemang är att dessa extra bitar sänker den effektiva överföringshastigheten (det vill säga antalet överförda bytes/sek).

13 William Sandqvist Skicka ett tecken … Dataöverföringens startar med att datalinjen hålls låg "0" under ett tidsintervall som är en bit långt (T = 1/Baudrate). Detta är startbiten. Under 8 lika långa tidsintervall följer sedan databitarna, ettor eller nollor, med den minst signifikantabiten först och den mest signifikanta biten sist. Därefter kan följa en paritetsbit, ett hjälpmedel vid detekteringen av överföringsfel. Överföringen avslutas slutligen av att datalinjen för åtminstone ett bit- tidsintervall är hög. Det är stoppbiten. ’W’ = 0b

14 William Sandqvist Mottaga ett tecken Mottagningen av data sker genom att man först inväntar startbitens negativa flank, för att därefter registrera datalinjen vid tidpunkterna 3T/2, 5T/2,... 17T/2 relativt startflanken (dessa tider är databitarnas "mittpunkter"). Mottagaren "synkroniseras om" på nytt av varje startflank. Detta medför att relativt stora avvikelser från överens- kommen bauderate kan förekomma, hos både mottagare och sändare, innan dataöverföringen misslyckas!

15 William Sandqvist Baudratefel Mindre än 0,5 bit fel på 10 bitar fungerar. Baudratefel < 5%. Vid serie- kommu- nikation är ”1” -12V och ”0” +12V

16 William Sandqvist Paritetsbit/9:e bit En sedan länge använd metod för feldetektering är den s.k. paritets-kontrollen. Till den byte som överförs lägger man en extra s.k. paritetsbit som är så vald att det totala antalet ettor är jämnt vid jämn paritet (J), eller udda vid udda paritet (U). Sedan det överenskommits om vilken paritet J/U som ska gälla, kan mot- tagaren upptäcka om någon av de överförda bitarna "bytt" värde till följd av en störning. Paritetsbiten härstammar från automatiseringsteknikens barndom, då data överfördes med stansade hålremsor. De mekaniska stansutrustningarna "hängde sig" ibland, men att två stanspinnar skulle kärva samtidigt var obefintlig. En alternativ användning för en nionde bit är att låta den betyda ”allmänt anrop”. De åtta vanliga bitarna tolkas då som den anropades adress.

17 William Sandqvist Serieport Nios II  Läsning av RxData nollställer IBF  Skrivning till TxData (vad som helst) nollställer OBE

18 William Sandqvist 6.3 Eko/(Krypto) - program

19 William Sandqvist Terminalprogram till XP Hyperterminalen (ingår i Windows XP) PC:ns serieport (sällsynt numera) USB till serieport adapter finns vid lab. OBS! behöver drivrutin. (tag inte med en egen!) USB-port

20 William Sandqvist Terminalprogram till Vista PuTTY Om Du använder USB-virtuell serieport – tag reda på COM-portens nummer först (med Enhetshanteraren/Device Manager) … PuTTY

21 William Sandqvist Main – Eko-evighetsslinga.text.align 2.global main main: call in_char # hämta mottaget tecken mov r4,r2 # returvärde till parameter call out_char # lämna tecken för sändning br main # omigen, evighetsslinga

22 William Sandqvist (Main – Krypto-evighetsslinga).text.align 2.global main main: call in_char # hämta mottaget tecken mov r4,r2 # returvärde till parameter addi r4,r4,1 # svag kryptering införs call out_char # lämna tecken för sändning br main # omigen, evighetsslinga För att testa seriekommunikation brukar man skriva ett eko-program. Ser man vad man skriver i terminalfönstret så fungerar kommunikationen! Ett ändå bättre test är att ”kryptera” de ekade tecknen. Då vet man säkert att ekot inte bara beror på ”överhörning” mellan ledningarna!

23 William Sandqvist main() eko i C

24 William Sandqvist 6.3 funktionen in_char() int in_char( void );

25 William Sandqvist 6.3 funktionen out_char() void out_char( int );

26 William Sandqvist C-funktion out_char() #define uart0 ( ( volatile unsigned int *) 0x860 ) #define UART_RECIEVE_BIT 0x80 /* RXRDY */ #define UART_TRANSMIT_BIT 0x40 /* TXRDY */ void out_char( int ch) { unsigned int tmp = 0; while(!tmp) { tmp = uart0[2] & UART_TRANSMIT_Bit; } uart0[1] = ch & 0x7f; /* 7-bitars ASCII */ }

27 William Sandqvist 6.5 Non-blocking funktioner

28 William Sandqvist Non-blocking in_charx() int in_charx( void );

29 William Sandqvist C-funktion in_charx() #define uart0 ( ( volatile unsigned int *) 0x860 ) #define UART_RECIEVE_BIT 0x80 /* RXRDY */ #define UART_TRANSMIT_BIT 0x40 /* TXRDY */ int in_charx( void ) { unsigned int tmp = uart0[2] & UART_RECIEVE_Bit; if(tmp) return ( uart0[0] & 0x7f ); else return –1; }

30 William Sandqvist Non-blocking out_charx() int out_charx( int );

31 William Sandqvist 6.5 Eko, med non-blocking funktioner Nu blockeras man i vänteloopar i main i stället för i funktionerna. (finns egentligen ingen anledning att ha non-blocking funktioner i ett eko- program)

32 William Sandqvist 6.6 Korsvis kommunikation A A B B Chatta med en kompisgrupp! Om det inte finns någon annan grupp som är färdig, så låna en ”studsplugg” och chatta med dig själv! A

33 William Sandqvist 6.6 Korsvis kommunikation Här behövs det non-blocking funktioner! Två nya subrutiner behövs rec_charx() send_char() Som in_charx() och send_char(), fast för annan serieport. Dom skriver Du i C. send_char() och out_char() är så snabba, 100  s, så dom kan utan risk vara blockerande.

34 William Sandqvist send_char()

35 William Sandqvist rec_charx()

36 William Sandqvist Registeranvändning


Ladda ner ppt "William Sandqvist Övning 6 Seriekommunikation - serieport."

Liknande presentationer


Google-annonser