William Sandqvist william@kth.se Övning 6 Seriekommunikation - serieport William Sandqvist william@kth.se.

Slides:



Advertisements
Liknande presentationer
BAS-M Hur du på ett enkelt sätt administrerar din båtklubbs register.
Advertisements

Hur går det till att rapportera in betyg idag?
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Några moln tillgängliga gratis på Internet
Videokonsultation med medborgare
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Många studenter använder en LCD-display till sin programmeringsuppgift
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Minnesteknologier Teknologi Accesstid Kostnad $/GB SRAM 1 ns 1000 DRAM
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
C-programmering ID120V William Sandqvist Länkad lista
Kretselement på grafisk form
Programkodens uppbyggnad
Kommunikation Först några nya PIC-instruktioner
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Programmering B PHP Lektion 2
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 11 Arrayer.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
William Sandqvist C:s minnesmodell.
Operativsystem Vad är det för något ? Varför har man operativsystem ?
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
IF1330 Ellära F/Ö1 F/Ö2 F/Ö3 Strömkretslära Mätinstrument Batterier
Modulär programutveckling
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 2 Skolan för Datavetenskap och kommunikation.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
William Sandqvist Lab 1 Några slides att repetera inför Lab 1 William Sandqvist
6558/G558 DATAKOMMUNIKATION Kapitel 3: Nätverk, ruttning.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Markus Enkvist John-Eric Saxén. Innehåll  Allmänt  Bakgrund  Standarder  Nätverkstopologi  Fysisk struktur  Dataöverföring  För- och nackdelar.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Emulatorkonstruktion Schema Inledning Andra metoder Mina metoder Demonstration av min C64-emulator Sammanfattning och frågor.
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
Programmeringsteknik Föreläsning 17 Skolan för Datavetenskap och kommunikation.
William Sandqvist Lab 2 Några slides att repetera inför Lab 2 William Sandqvist
Anders Sjögren Deklarationsområde och funktioner.
William Sandqvist Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */
2G1518 Datorteknik Föreläsning 5 Bussar In- och utmatning (Input/Output, I/O) Programstyrd pollning hösten 2005 för D3 och CLMDA m fl.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer och synkroniseringsmeddelanden.
William Sandqvist Binärkod och Graykod 7 Bitars Kodskiva för avkodning av vridningsvinkel. Skivans vridnings-vinkel finns tryckt som binära.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
Kronljusströmställaren 0, 1, 2, 3
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
DA-omvandling, oftast PWM William Sandqvist En DA-omvandlare tar stor plats på processor- chippet. Den vanligaste DA-lösningen är i stället.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
IE1206 Inbyggd Elektronik F1 F2
William Sandqvist Låskretsar och Vippor Låskretsar (latch) och vippor (flip-flop) är kretsar med minnesfunktion. De ingår i datorns minnen.
Engångsbatchar/kompletterings- batchar för registervård Hans Persson
Anders Sjögren Funktioner något in och något annat ut.
Operativsystem Vad är det för något ? Varför har man operativsystem ? Vilka finns det ?
Kombinatoriska byggblock
Kombinatoriska byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

William Sandqvist william@kth.se Övning 6 Seriekommunikation - serieport William Sandqvist william@kth.se

William Sandqvist william@kth.se

William Sandqvist william@kth.se 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”. William Sandqvist william@kth.se

William Sandqvist william@kth.se 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. William Sandqvist william@kth.se

William Sandqvist william@kth.se snaptime() William Sandqvist william@kth.se

William Sandqvist william@kth.se 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! William Sandqvist william@kth.se

William Sandqvist william@kth.se Kommunikation William Sandqvist william@kth.se

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

Seriekommunikation parallell-serie-parallell omvandling William Sandqvist william@kth.se

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, 38400 ... Vi använder och 115200 bit/sek. William Sandqvist william@kth.se

William Sandqvist william@kth.se UART-enhet Ex. UART-chip 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. William Sandqvist william@kth.se

William Sandqvist william@kth.se 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). William Sandqvist william@kth.se

William Sandqvist william@kth.se Skicka ett tecken … ’W’ = 0b01010111 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. William Sandqvist william@kth.se

William Sandqvist william@kth.se 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! William Sandqvist william@kth.se

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

William Sandqvist william@kth.se 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. William Sandqvist william@kth.se

William Sandqvist william@kth.se Serieport Nios II Läsning av RxData nollställer IBF Skrivning till TxData (vad som helst) nollställer OBE William Sandqvist william@kth.se

6.3 Eko/(Krypto) - program William Sandqvist william@kth.se

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

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

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 William Sandqvist william@kth.se

(Main – Krypto-evighetsslinga) 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! För att testa seriekommunikation brukar man skriva ett eko-program. Ser man vad man skriver i terminalfönstret så fungerar kommunikationen! .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 William Sandqvist william@kth.se

William Sandqvist william@kth.se main() eko i C William Sandqvist william@kth.se

William Sandqvist william@kth.se 6.3 funktionen in_char() int in_char( void ); William Sandqvist william@kth.se

6.3 funktionen out_char() void out_char( int ); William Sandqvist william@kth.se

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 */ } William Sandqvist william@kth.se

6.5 Non-blocking funktioner William Sandqvist william@kth.se

Non-blocking in_charx() int in_charx( void ); William Sandqvist william@kth.se

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; } William Sandqvist william@kth.se

Non-blocking out_charx() int out_charx( int ); William Sandqvist william@kth.se

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) William Sandqvist william@kth.se

6.6 Korsvis kommunikation 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 B A A B William Sandqvist william@kth.se

6.6 Korsvis kommunikation 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. Här behövs det non-blocking funktioner! William Sandqvist william@kth.se

William Sandqvist william@kth.se send_char() William Sandqvist william@kth.se

William Sandqvist william@kth.se rec_charx() William Sandqvist william@kth.se

William Sandqvist william@kth.se Registeranvändning William Sandqvist william@kth.se