Tentamen med lösningsförslag

Relevanta dokument
Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Maskinorienterad programmering

Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4

Tentamen med lösningsförslag

Assemblerprogrammering för ARM del 2

GPIO - General Purpose Input Output

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Assemblerprogrammering för ARM del 3

Tentamen med lösningsförslag

Assemblerprogrammering, ARM-Cortex M4 del 3

Assemblerprogrammering för ARM del 1

Tentamen med lösningsförslag

Assemblerprogrammering - fördjupning

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Assemblerprogrammering för ARM del 1

Tentamen med lösningsförslag

LEU500-Maskinorienterad programmering LP3-2016/2017

Seriekommunikation. Ur innehållet: Nätverkstopologier Nätverksprotokoll Asynkron/synkron seriell överföring Programmering av USART-krets

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Tentamen med lösningsförslag

Maskinorienterad programmering

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

LEU240 Mikrodatorsystem

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen. EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU. Onsdag 12 Januari 2011, kl

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Maskinorienterad programmering

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Exempel 3 på Tentamen

Tentamen med lösningsförslag

Undantag, avbrott. Avsnitt 7. Undantag, avbrott

Maskinorienterad Programmering LP2-2017/2018

Tentamen. DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU. Tisdag 15 december 2009, kl

Maskinorienterad Programmering LP3-2017/2018

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Tentamen med lösningsförslag

Exempel 2 på Tentamen med lösningar

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Datorteknik 2 (AVR 2)

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Assemblerprogrammering för ARM del 1

Tentamen. EDA452 Grundläggande Datorteknik, D DIT790 Digital- och datorteknik, GU. Måndag 17 December 2012, kl

Tentamen 3. EDAxxx Grundläggande Datorteknik DIT791 Grundläggande Datorteknik, GU. Måndag xx Oktober 20xx, kl

Maskinorienterad programmering

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

GPIO - General Purpose Input Output

Maskinorienterad programmering

Maskinorienterad Programmering IT2, LP2-2016/2017

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

Tentamen. EDA485 Maskinorienterad programmering Z DAT015 Maskinorienterad programmering IT. Tisdag xx yyyy 2006, kl

Digital- och datorteknik

Assemblerprogrammering, ARM-Cortex M4 del 1

Digital- och datorteknik

Projektlaboration 4, synkronisering av klockan

Tentamen (Svar och lösningsförslag)

(Lösningsförslag finns sist i denna fil.)

Exempel på tentamen 1

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

IS1500 Lösningar övning CE_O CE_O7. Programmerad in/utmatning. Serieport. Förberedelser till nios2io.

Exempel 1 på Tentamen med lösningar

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

Tentamen. EDA432 Digital och datorteknik IT INN790 Digital och datorteknik GU. Måndag 23 oktober 2006, kl i V-salar

Tentamen med lösningar

Övning2 Datorteknik, HH vt12 - Programmering

Programmering av inbyggda system 2014/2015

Tentamen med lösningsförslag

Kontrollskrivning Mikrodatorteknik CDT S2-704

Enkla datatyper minne

CHALMERS TEKNISKA HÖGSKOLA

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte" ARM-instruktioner", A4-format, 17 sidor. Maxpoäng: 60p

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Datorprojekt, del 1. Digitala system 15 p

Tentamen med lösningsförslag

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen.

D2 och E3. EDA321 Digitalteknik-syntes. Fredag den 13 januari 2012, fm i M-salarna

Maskinorienterad programmering

A-del motsvarande KS1

Övning 7. Timer, serieport

Tentamen PC-teknik 5 p

Lösningar till tentamen i EIT070 Datorteknik

Modbus Seriell Kommunikation

Tentamen med lösningsförslag

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Tentamen i Programmering

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

Tentamen. EDA432 Digital- och datorteknik, IT DIT790 Digital- och datorteknik, GU. Måndag 18 Oktober 2010, kl

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Tentamen. DAT015 Maskinorienterad programmering IT. Fredag 21 april 2006, kl i V-salar

Tentamen PC-teknik 5 p Lösningar och kommentarer

Transkript:

Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen med lösningsförslag EDA482 (EDA481) Maskinorienterad programmering D EDA487 (EDA486) Maskinorienterad programmering Z DAT017 (DAT016) Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU LEU500 Maskinorienterad programmering D,E,ME (hing) Fredag 24 augusti, kl. 8.30-12.30 Examinator Roger Johansson, tel. 772 57 29 Kontaktperson under tentamen: Roger Johansson, tel. 772 57 29 Tillåtna hjälpmedel Utgåvor som distribuerats inom ramen för kursen, häftet: Quick Guide, Laborationsdator MD407 med tillbehör Inget annat än understrykningar ( överstrykningar ) får vara införda i dessa häften. Tabellverk eller miniräknare får ej användas. Lösningar anslås senast dagen efter tentamen via kursens hemsida. Granskning Tid och plats anges på kursens hemsida. Allmänt Siffror inom parentes anger full poäng på uppgiften. För full poäng krävs att: redovisningen av svar och lösningar är läslig och tydlig. Ett lösningsblad får endast innehålla redovisningsdelar som hör ihop med en uppgift. lösningen ej är onödigt komplicerad. du har motiverat dina val och ställningstaganden assemblerprogram är utformade enligt de råd och anvisningar som getts under kursen. C-program är utformade enligt de råd och anvisningar som getts under kursen. I programtexterna skall raderna dras in så att man tydligt ser programmens struktur. Betygsättning För godkänt slutbetyg på kursen fordras att både tentamen och laborationer är godkända. Maximal poäng är 50 och tentamenspoäng ger slutbetyg enligt: (EDA/DAT/LEU): 20p betyg 3 < 30p betyg 4 < 40p betyg 5 respektive (DIT): 20p betyg G < 35p VG

Uppgift 1 (10p) Maskinorienterad programmering - Tentamen 24 augusti 2018 2(5) a) (4p) Visa hur adressen till uttrycket: vs[i+j+2] evalueras till register R0 i ARM v6 assemblerspråk då följande deklarationer gjors på toppnivå : int, i,j; short vs[54]; b) (6p) Följande funkion är given i C, visa hur funktionen kan kodas i ARM v6 assemblerspråk. Använd GCC:s kompilatorkonventioner. int f( int p) int rv = reval( p << 2 ); if( rv > 0) return rv 1; if( rv < 0) return rv & 1; return 0; Uppgift 2 (15p) En 8-bitars omkopplare ansluts till port PE0-PE7 hos MD407. En diodramp ansluts till PE8-PE15. Bit 7 från omkopplaren ska anslutas till processorns avbrottsmekanism via EXTI-modulen, bit3-bit0 hos omkopplaren utgör ett 4-bitars ord (INP4). Då bit 7 slås till (0 1) ska INP4 läsas från omkopplaren och teckenutvidgas till unsigned char. Då bit 7 slås från (1 0) ska INP4 läsas från omkopplaren och teckenutvidgas till signed char. Övergångarna ska detekteras med avbrottsmekanismen. Det får förutsättas att inga kontaktstudsar förekommer. Det teckenutvidgade värdet ska skrivas till diodrampen vid varje ändring hos bit 7. a) (4p) Visa med en funktion void app_init(void) hur port E ska initieras för applikationen. Ingångar ska vara flytande och utgångar av typ push/pull. b) (5p) Visa med en funktion void irq_init(void) hur SYSCFG/EXTI/NVIC modulerna ska konfigureras för användning enligt uppgiftens beskrivning. c) (6p) Det konverterade värdet från INP4 ska visas på diodrampen. Uppdatering ska ske vid varje ändring av bit 7, dvs. vid varje avbrott. Visa ett huvudprogram void main(void), och en avbrottsfunktion void irq_handler(void). För full poäng krävs att dina lösningar är tydliga, fullständiga och att du använt lämpliga makrodefinitioner för registeradresser. Samla alla sådana definitioner under uppgift a). Uppgift 3 (6p) Två DIL-strömbrytare och en 7-segments indikator kopplas enligt: DIL1 till Port E (0-7), DIL2 till Port E (8-15) Display till port D (0-7): Skriv ett program i ARM/Thumb assemblerspråk som: Initierar portar D och E. Kontinuerlig läser de inställda värdena från DIL-strömbrytarna, adderar dessa och skriver resultatet till displayen. Om summan är större än 255 ska FF skrivas till indikatorn.

Uppgift 4 (8p) Maskinorienterad programmering - Tentamen 24 augusti 2018 3(5) Visa en funktion swap som skiftar två pekare i minnet. Om det exempelvis från början gäller att a och b är pekare ska funktionen anropas enligt swap( &a, &b ) och vi dessutom har att: *a = 1 och *b = 2, ska det efter funktionen gälla att *b = 1 och *a = 2. Uppgift 5 (11p) a) Varför behöver vi i bland använda det reserverade ordet volatile? (2p) b) Ange 2D-index för talvärdet 6 i följande deklaration. (1p) int arrayofarrays[3][4] = 1,2,3,4, 5,6,7,8, 9,10,11,12 ; c) Beskriv principen för startbitsdetektering vid asynkron seriell överföring. (4p) d) Hur kan man tolerera en mindre drift hos klockorna hos sändare och mottagare vid asynkron seriekommunikation? (4p)

Lösningsförslag Uppgift 1a: LDR R0,i @ R0 <- i LDR R1,j @ R1 <- j ADD R0,R0,R1 @ R0 <- i+j ADD R0,R0,#2 @ R0 <- i+j+2 LSL R0,R0,#1 @ R0 <- (i+j+2) * sizeof(short) LDR R1,=vs @ R1 <- &vs ADD R0,R0,R1 @ R0 <- &vs + [(i+j+2) * sizeof(short)] Uppgift 1b: f: PUSH LR LSL R0,R0,#1 @ R0 <- p<<2 BL reval @ reval(p<<2) CMP R0,#0 @ (rv > 0)? BLE.1 MOV R1,#1 ORR R0,R0,R1 @ R0 <- rv 1 B.3 @ return (rv 1).1: BEQ.2 @ (rv==0 )? MOV R1,#1 AND R0,R0,R1 @ R0 <- rv&1 B.3 @ return (rv&1).2: MOV R0,#0 @ return 0.3 POP PC Uppgift 2a: #define SYSCFG_EXTICR1 ((volatile unsigned int *)0x40013808) #define SYSCFG_EXTICR2 ((volatile unsigned int *)0x4001380C) #define EXTI_IMR ((volatile unsigned int *)0x40013C00) #define EXTI_FTSR ((volatile unsigned int *)0x40013C0C) #define EXTI_RTSR ((volatile unsigned int *)0x40013C08) #define EXTI_PR ((volatile unsigned int *)0x40013C14) Maskinorienterad programmering - Tentamen 24 augusti 2018 4(5) #define EXTI7_IRQVEC #define NVIC_ISER0 0x2001C09C 0xE000E100 #define NVIC_EXTI7_IRQ_BPOS (1<<23) #define EXTI7_IRQ_BPOS (1<<7) #define GPIO_E 0x40021000 #define GPIO_MODER ((volatile unsigned int *) (GPIO_E)) #define GPIO_OTYPER ((volatile unsigned short *)(GPIO_E+0x4)) #define GPIO_PUPDR ((volatile unsigned short *)(GPIO_E+0x4)) #define GPIO_ODR_HIGH ((volatile unsigned char *) (GPIO_E+0x15)) #define GPIO_IDR_LOW ((volatile unsigned char *) (GPIO_E+0x10)) void app_init ( void ) *GPIO_MODER = 0x55550000; /* PE0-7 in, PE8-15 ut */ *GPIO_OTYPER = 0; /* Utgångar push/pull */ *GPIO_PUPDR = 0; /* Ingångar flytande */ value = 0; Uppgift 2b: void irq_init ( void ) *SYSCFG_EXTICR2 = 0x4000; /* PE7->EXTI7 */ *EXTI_IMR = EXTI7_IRQ_BPOS; *EXTI_FTSR = EXTI7_IRQ_BPOS; /* trigger på negativ flank */ *EXTI_RTSR = EXTI7_IRQ_BPOS; /* och trigger på positiv flank */ *((void (**)(void) ) EXTI7_IRQVEC ) = irq_handler; /* sätt avbrottsvektor */ *((unsigned int *) NVIC_ISER0) = NVIC_EXTI7_IRQ_BPOS; /* Aktivera detta avbrott */ Uppgift 2c: char value; void irq_handler ( void ) if( *EXTI_PR & EXTI7_IRQ_BPOS ) *EXTI_PR = EXTI7_IRQ_BPOS; /* Kvittera avbrott */ value = *GPIO_IDR_LOW & 0xF; /* läs INP4 som unsigned char */

Maskinorienterad programmering - Tentamen 24 augusti 2018 5(5) if( (*GPIO_IDR_LOW & 0x80 )== 0) /* 1->0 */ if( value & 0x8 ) /* MSB i INP4 */ value = 0xF0; /* teckenutvidga till signed char */ *GPIO_ODR_HIGH = value; void main(void) int dummy; app_init(); irq_init(); while(1); /* "Oändlig" slinga */ Uppgift 3: start: @ initiera port D0-D7 som utport LDR R0,=0x00005555 LDR R1,=0x40020C00 STR R0,[R1] @ initiera port E0-E15 som inport LDR R0,=0 LDR R1,=0x40021000 STR R0,[R1] @ adressen till port D:s ut-dataregister till R5 LDR R5,=0x40020C14 @ adressen till port E:s in-dataregister till R6 LDR R6,=0x40021010 main: LDRB LDRB ADD CMP BLE MOVW main_2: STRB B R0,[R6] R1,[R6,#1] R0,R0,R1 R0,#255 main_2 R0,#0xFF R0,[R5] main Uppgift 4: void swap( char **a, char **b ) char *c; c = *b; *b = *a; *a = c; Uppgift 5a: Ordet volatile( flyktig) används för att ange att data kan komma att ändras utanför en ordinär programflödeskontroll. Typiskt innebär detta data från något register mot omgivningen, eller en variabel som kan ändras av en avbrottsfunktion. Uppgift 5b: 1,1 Uppgift 5c: Protokollet anger en ledig -nivå på kommunikationsledningen. Då nivån växlar tolkas detta som en startbit (t0). Mottagaren läser därefter av ledningen ( samplar ) efter ett halvt bitintervall (t1) och därefter ytterligare hela bitintervall (t2,t3,t4 osv). Observera att sändare och mottagare på förhand måste veta vilken bitrate som används. Uppgift 5d: Genom att specificera maximalt antal bitar som skickas vid ett tillfälle, en ram, kan man också bestämma en största tillåten differens och därmed också acceptera skillnader hos sändares respektive mottagare klockor.