13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)1 IS1200 Datorteknik Föreläsning 7 Exceptions ht 2009 – vt 2010 (period 2-3) för D-2.

Slides:



Advertisements
Liknande presentationer
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Advertisements

Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
2D1311 Programmeringsteknik med PBL
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer
23 August 2014 IS1200 Datorteknik vt09, föreläsning 10, (E och I mfl)1 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory.
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)1 IS1200 Datorteknik Föreläsning 7 Exceptions vt 2009 (period 3-4) för E och I med.
1 2G1518 Datorteknik Föreläsning 5, våren 2007 Bussar In- och utmatning – I/O Pollning Handskakning.
Programmeringsteknik för K och Media
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
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; }
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Styrteknik: Programmering med MELSEC IL PLC2A:1
William Sandqvist C:s minnesmodell.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Lågnivåprogrammering Översikt av I/O-mekanismer i hårdvara Olika språkkrav och modeller för komponent- hantering(device driving) Modeller för komponent-hantering.
31 March 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
31 March 2015 IS1200 Datorteknik ht2009 föreläsning 2, (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
IS1200 Datorteknik Föreläsning CE F2 Vi bygger en processor Kursboken, delar av kapitel 7 31 March IS1200 Datorteknik föreläsning CE – F2.
1 386 Från s bits adressbuss –=>4GB minne kan adresseras 32 bits databuss max klockfrekvens: 40MHz Protected mode –virtuellt minne –segmentering.
System arbetssystem informationssystem
Pipelining Föreläsning 4. T exe — CPU-exekveringstid I — Antalet exekverade instruktioner CPI — Genomsnittligt antal klockcykler per instruktion T c —
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
2 April 2015 IS1200 Datorteknik föreläsning CE - F71 IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps.
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.
3 April 2015IS1200 Datorteknik, föreläsning 61 IS1200 Datorteknik Föreläsning 6 Bushantering In- och utmatning, I/O Programstyrd pollning.
Styrteknik 7.5 hp distans: PLC-delprogram, tasks TASKS:1
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å.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
22 April 2015IS1200 Datorteknik, föreläsning 11 IS1200 Datorteknik Föreläsning 1 Introduktion.
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
1 June G1518, Förel 10, ht2005 (D3/CLMDA)1 2G1518 Datorteknik, ht 2005 version för D3 och CLMDA Föreläsning Processorkonstruktion 2. DMA, Direct.
2 June 2015IS1200, Förel 9, vt08 (Kista)1 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) vt 2008 (period.
2 June G1518, Föreäsning 7, vt 2007 (D2)1 2G1518 Datorteknik Föreläsning 7 Exceptions ht vt 2006 (period 2-3) för D2.
2 June 20152G1518, Förel 9 vt2006 (E3)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version vt 2006 för.
2G1502 Datorteknik allmän kurs
2 June G1502, Föreläsning 8, vt2004 för E och I1 2G1502 Datorteknik allmän kurs Föreläsning 8 Processorkonstruktion DMA, Direct Memory Access.
6/3/2015© Mats Brorsson1 Hur mycket snabbare blir det med PC133 SDRAM jämfört med PC100 SDRAM?... blir det med en 1,4 GHz Athlon- processor jämfört.
4 June 20152G1518, Förel 9 ht2005 (D3)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version ht 2005 för.
4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version.
Föreläsning 1 Introduktion till kursen. Algoritmer
13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)1 IS1200 Datorteknik Föreläsning 7 Exceptions vt 2008 (period 3) för IT/ME och Hing/Kand.
William Sandqvist Övning 7 Interrupt, Exeption, Trap.
Styrteknik 7.5 hp distans: Tidskretsar, räknare PLC4B:1 Bilder Olika exempel med Timers och Counters En Enkel Timer med MELSEC IL Om BTN_DGVG.
1 2G1502 Datorteknik allmän kurs Föreläsning 3 Programmering med hopp Programmering av Nios.
14 July 2015 IS1200/2G1518 Datorteknik, föreläsning 2, ht2007 (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
Shannon dekomposition
16 July 2015 IS1500 Datorteknik och komponeneter, föreläsning DC-F2 1 IS1500 Datorteknik och komponenter Föreläsning DC F2 Kretsar med återkoppling Minnen.
30 July 2015 IS1200 Datorteknik föreläsning CE - F11 IS1200 Datorteknik Föreläsning CE F1 Computer Engineering Introduktion.
31 July 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
1 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Föreläsning 9 zDel 1. CPU-scheduling zDel 2. Semaforer zInför föreläsning 10 zSammanfatting.
William Sandqvist Datorteknik övning 3 stackhantering subrutin som anropar subrutin programutveckling.
William Sandqvist Övning 7 Interrupt, Exeption, Trap.
3 August 2015IS1200 Datorteknik föreläsning 71 IS1200 Datorteknik Föreläsning 7 Exceptions Interrupts - Traps.
4 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Övning 10.
William Sandqvist Övning 10 Processorkonstruktion med pipe-line.
15 August 2015 IS1200 Datorteknik föreläsning CE - F11 IS1200 Datorteknik Föreläsning CE F1 Computer Engineering Introduktion.
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)1 IS1200 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4.
12 October 2015 IS1200 Datorteknik föreläsning CE - F71 IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps.
17 October 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Föreläsning 9 Del 1. CPU-scheduling Del 2. Semaforer (förberedelse till hemlab.
IT och medier1 Utgående från boken Computer Science av: J. Glenn Brookshear Grundläggande datavetenskap, 4p Kapitel 3 Operativsystem.
Grundläggande datavetenskap, 4p
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)1 IS1200 Datorteknik Föreläsning 7 Exceptions ht 2009 – vt 2010 (period 2-3) för D-2

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)2 F1F2F3F4F5F7F8F9F10Ö2Ö1Ö3LAB-1Hemlab-1Ö4Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik Hösten 2009 Våren 2010 F6Ö5Ö6LAB-2 22 jan feb feb mars mars feb

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)3 Litteraturhänvisningar +Kursboken, kapitel 5.2 Avbrott, principer (ej MIPS) +Nios-2-manualen, chap 3 (October 2007) +Exempelsamling del 7 med lösningar +Lab-PM för laboration 3, nios2int

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)4 Viktiga delar i en dator CPU MEM BUS I/O program data

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)5 Programexekvering i två steg, normalfall (decode) EXECUTE FETCH (update PC)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)6 Exceptions ”Undantag” / ”Särfall” Under den normala programexekveringen kan det inträffa ”speciella händelser” av olika slag som hanteras på likartat sätt 1. Interrupts, externa ”händelser”, avbrottssignaler (hardware interrupt) 2. TRAP-instruktioner (software exception) 3. Andra undantag, interna

Hantering av Exception Då ett exception inträffar avbryts pågående program och exekvering ”hoppar” till en annan programdel som kallas Exception Handler Programkoden i Exception Handler åtgärdar undantaget och därefter sker ”returhopp” till det avbrutna programmet 13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)7

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)8 Exception Handler Huvudprogram returhopp retur-adress ”hopp vid exception” exception ExceptionHandler Var placeras koden för ExceptionHandler ? Hur utförs hopp till ExceptionHandler ? Hur utförs hopp till returadressen ? intruction ”hopp vid retur”

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)9 1. Asynchronous Exceptions External Hardware Interrupts  Yttre händelser orsaker avbrott (External) Elektrisk signal till CPU-chippet.  Avbrott kan komma när som helst i förhållande till det program som körs (Asynchronous)  Det måste finnas minst en insignal/pinne (Hardware) på CPU-chippet med funktionen IRQ - Interrupt ReQuest, troligen flera insignaler/pinnar  Nios II har 32, IRQ31—IRQ00

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)10 Viktiga delar i en dator IRQ-signaler, Interrupt ReQuest CPU MEM BUS I/O program data IRQ (t.ex.IRQ31—IRQ00)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)11 Exceptions in many CPU:s Exception Vector Table exc00Handexc01HandexcNNHand instr Exception Vector Table Mjukvara eller Hårdvara som automatiskt gör hopp till rätt Exception-Handler samt lite till nämligen NN null

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)12 Nios-II Exceptions Control Registers Det finns ”fem” Control Registers 0.status - ctl0, read/write (status) 1.estatus - ctl1, read/write (exception status) 2.bstatus - ctl2, read/write (break status) 3.ienable - ctl3, read/write (interrrupt enable) 4.ipending - ctl4, read (interrupt pending) (det finns ev. fler men de diskuteras ej här)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)13 Nios-II control register 0 status, ctl U PIE Endast en (två) bit(ar) används: PIE = Processor Interrupt Enable (1=enable, 0=disable) (U = User Mode, 1=User Mode, 0=Supervisor Mode) (User och Supervisor mode är INTE implementerat i vår utrustning!)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)14 Nios-II control-register 0 status, ctl0  Bit med index 0 i status-register betecknas PIE – Processor Interrupt Enable  PIE = 0 förbjuder interrupt (disable interrupts)  PIE = 1 tillåter interrupt (enable interrupts)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)15 Nios-II instruktioner för att läsa och skriva ctl-regs  Läsning, kopiera från ctli till rj RDCTLrj, ctli  Skrivning, kopiera till ctli från rj WRCTL ctli, rj (RDCTL och WRCTL kan bara exekveras i supervisor mode. Ger access-violation exception i user mode. Vi använder alltid supervisor mode i våra labbar)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)16 Nios-II control register 1 estatus, ctl1 (exception status)  Då en exception accepteras, kopieras status till estatus så att ”gamla” status- värden kan läsas/skrivas av koden i Exception Handler  Vid retur från Exception Handler, med instruktionen eret, kopieras estatus tillbaks till status

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)17 Nios-II control register 3 ienable, ctl3 (interrupt enable) ctl3 är ett 32 bitars register (32 vippor) För var och en av de 32 IRQ-signalerna finns en maskbit vars  värde 0 förbjuder avbrott (disable)  värde 1 tillåter avbrott (enable)  Se figur 3-1 i manualen (October 2007)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)18 ctl3 ctl4 No Flip-Flops ! Flip-Flops ! Signal Levels ! ctl0 bit 0 EI / DI

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)19 Nios-II control register 4 ipending, ctl4 (interrupt pending) ctl4 är 32 avläsbara signaler (inga vippor) För var och en av de 32 IRQ-signalerna finns en bit som programvaran kan läsa och som anger  värde 0 inget avbrott begärs eller är förbjudet  värde 1 avbrott begärs och är tillåtet  Se figur 3-1 i manualen (October 2007)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)20 Exceptions Nios-II: Alltid ”hopp” till 0x huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x800020: Fast adress

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)21 Exception-Handler Nios-II: orsak till exception ? huvudprogram returadress ”hopp vid anrop” exception ExcHandler OPCODE reg jmp ExcHandler fast adress valbar adress ? IntHandler valbar adress TrapHandler valbar adress ElseHandler valbar adress 0x800020: ? ?

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)22

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)23 Interrupt or Trap ? figur 3-2 i manualen ExcHandler:# r24/et = exception temporary rdctlr24, ctl1# copy ctl1/estatus andir24, r24, 0b1# select index 0 beqr24, r0, NoInt# if EPIE == 0 rdctlr24, ctl4# copy ctl4/ipending beqr24, r0, NoInt# if ctl4 == 0 IntHandler:...# Interrupt Handler... NoInt:...# code see below

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)24 Interrupt-Handler letar fram aktuell IRQ-handler IntHandler valbar adress irq00-int valbara adresser IRQ-00? IRQ-01? IRQ-02?. IRQ-04?. IRQ-31? ??? irq04-int irq31-int retur

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)25 Vilken Interrupt ? figur 3-2 i manualen IntHandler: subir29, r29, 4# justera ea/returadress rdctlr24, ctl4# läs ipending andir24, r24, 0b1# IRQ-00? bner24, r0, irq00-int# int on IRQ-00 rdctlr24, ctl4# läs ipending andir24, r24, 0b10# IRQ-01? bner24, r0, irq01-int# int on IRQ-01...# ytterligare upp till IRQ-15 och sedan rdctlr24, ctl4# läs ipending andhir24, r24, 0x0001# IRQ-16? !!! bner24, r0, irq16-int# int on IRQ-16...

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)26 2. Synchronous Exceptions TRAP instruction zException med hjälp av TRAP-instruktion zPlaceras av programmeraren på önskad och känd plats (Synchronous) Används t.ex. för OS System Call (SysCall) zNios-2: TRAP erbjuder en enda TRAP till den enda fasta adressen = 0x zParameter (i r4) möjliggör olika SysCall

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)27 Exception-Handler Interrupt eller Trap ? huvudprogram returadress ”hopp vid anrop” exception OPCODE reg jmp ExcHandler fast adress valbar adress ExcHandler IntHandler valbar adress TrapHandler valbar adress ElseHandler valbar adress 0x800020: REPRIS ? ? ?

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)28 Interrupt or Trap ? (cont.) figur 3-2 i manualen REPRIS ExcHandler:# r24/et = exception temporary rdctlr24, ctl1# copy ctl1/estatus andir24, r24, 0b1# select index 0 beqr24, r0, NoInt# if PIE == 0 rdctlr24, ctl4# copy ctl4/ipending beqr24, r0, NoInt# if ctl4 == 0 IntHandler:...# Interrupt Handler... NoInt:...# code see below

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)29 REPRIS

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)30 Interrupt or Trap figur 3-2 i manualen... NoInt:# Alternativ 1 pushr8# skydda/låna r8 ldwr24, -4(r29)# kopiera instruktion moviar8, trapcode# kopiera TRAP code beqr8, r24, TrapHandler# yes, TRAP popr8# återställ/återlämna r8 NoTrap:....equ trapcode, 0x003B683A# op-code of TRAP OBS r1 kan inte användas! (kan ju innehålla värdefull information) Lösning: Använd stacken för att skydda t.ex. r8

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)31 Interrupt or Trap figur 3-2 i manualen... NoInt:# Alternativ 2 pushr8 # skydda/låna r8 ldwr24, -4(r29)# kopiera instruktion moviar8, trapdum# kopiera TRAP code ldwr8, 0(r8)# till r1 beqr8, r24, TrapHandler# yes, TRAP popr8 # återställ/återlämna r8 NoTrap:....data# eller i.text.align2# på adress delbar med 4 trapdum:trap# op-code of TRAP

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)32 Vilken TRAP System Call med TRAP TrapHandler: popr8# återställ r8 movir24, 0# konstant 0 till r1 beqr4, r24, SysCall-0# javisst movir24, 1# konstant 1 till r1 beqr4, r24, SysCall-1# javisst...# och så vidare

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)33 Exceptions in Nios-II Suggested software structure trap 0x800020:”jmp ExcHand” Int ?Trap ? ExcHand: ElseHand Yes No IRQ00 IRQ01 IRQ31 error IntHand: No irq00Hand Yes irq01Hand Yes irq31Hand Yes subi r29, r29, 4 eret No trap0 trap1 trapn error TrapHand: No trap0Hand Yes trap1Hand Yes trapnHand Yes eret No instr int

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)34 Interrupts in many CPU:s Interrupt Vector Table irq00Handirq01Handirq31Hand instr Interrupt Vector Table Mjukvara eller Hårdvara som automatiskt gör hopp till rätt Interrupt Handler samt lite till nämligen null Nästan REPRIS

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)35 Traps in many CPU:s Trap Vector Table trap0Handtrap1HandtrapnHand TRAP Exception Trap Vector Table Mjukvara eller Hårdvara som automatiskt gör hopp till rätt TrapHandler 0123n0123n null

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)36 Registrera en Interrupt Handler vad menas med det ? Koppla ihop en Interrupt Handler kod med en avbrottssignal med ett visst index dvs Skriv in startadress på rätt plats i avbrottsvektortabellen Kallas ibland ”register an interrupt” Nios-II: Det finns en C-function för detta: retval = alt_irq_register(3 parameters);

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)37 Initiera för avbrott flera steg i Nios-II zKopiera ”stubbe” till adress 0x zFör varje avbrottskälla Skriv kod för en Interrupt Handler och registrera i avbrottsvektortabellen, zInitiera IO-enhet, olika för varje IO-enhet zInitiera bitar i IENABLE / ctl3 zInitiera PIE-biten i STATUS / ctl0

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)38 3. Synchronous Exceptions Internal Exceptions 1.”Inre” händelser kan orsaka exception (Internal Synchronous Exception) 2.”Upptäcks” av hårdvara internt i CPU:n 3.Exempel (olika typ av ”error”) Unimplemented/Illegal instructions Overflow (arithmetic/logic operation) Misaligned Memory Reference Divide by zero Access violation (in User Mode...)...

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)39 Exceptions i Nios-II Interrupt Vector Table ?  Programräknaren får ett nytt värde som anges av hårdvaran till 0x  Avbrottsvektortabell används EJ av hårdvaran i Nios-II  Returadress sparas på lämplig plats (ea/r29)  Mjukvaran kan administreras i tabell-form som liknar en avbrottsvektortabell

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)40 Priority - prioritet Viktiga frågor  Exekverar processorn på en viss prioritet ? Var finns information om CPU-priority ?  Har varje exception olika prioritet ?  Prioritet för en external interrupt ?  Prioritet för en TRAP-instruktion ?  Prioritet för en internal exception ?

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)41 Nios-II Priority  Interrupt har en viss prioritet, 31—00 (hur avgörs prioritet ?)  TRAP-instruktion, är ohejdbar (non-maskable) varför?  Internal exception, är ohejdbar (non-maskable) varför?

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)42 Nios-II Exceptions Enable/Disable Exception 1.Globally Enable/Disable Interrupt by PIE-bit in ctl0 / status control register 2.Selectively Enable/Disable Interrrupt by bits in ctl3 / ienable control register 3.TRAP instructions can not be disabled (non-maskable) 4.Internal exceptions can not be disabled (non-maskable) 5.Selectively Enable/Disable each I/O (lab3) 6.Acknowledge interrupt signals from I/O ”clear/reset” interrupt hardware signal

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)43 Nios-II Exceptions Exception Processing Sequence performed by hardware 1. Copy status into estatus (ctl0 into ctl1) 2. Set PIE to 0, disabling all interrupts (in ctl0) (3. Set U to 0, execute in supervisor mode, in ctl0) 4. Save returnaddress in ea=r29 5. Set PC to predefined value (0x800020) 6. Continue fetch-execute (Remark: return address must be decremented by 4 before executing eret in interrupt handler but not in trap handler, why?)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)44 Nios II: eret exception return-instruction performed by hardware eret #return from exception using #content of r29 as return address 1. status  estatus copy ctl1 back to ctl0 2. PC  ea / r29 3. Continue fetch-execute

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)45 Ändra i ctl-register Read – Modify - Write Exempel på användbara instruktioner rRDCTL ri, ctlj# läs/kopiera ctlj till ri rWRCTL ctlj,ri # skriv/kopiera ri till ctlj rANDIri, rj, ”mask”# ”nollställ” bitvis # ”maska fram” rORIri, rj, ”mask”# ”ettställ” bitvis rXORIri, rj, ”mask”# ”invertera” bitvis

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)46 IS1200 Datorteknik Laboration 3 Ny/ändrad from våren 2010 tips om I/O-interrupts

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)47 Nios-2 Interrupt signals CPU MEM BUS I/O TIMER_1 IRQ10 TOGGLES-18 IRQ3 KEYS-4 IRQ2 IRQ bus logic I/O Uart_0 IRQ4 I/O Uart_1 IRQ5

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)48 Nios-2 Interrupt signals z32 separata IRQ som kan aktiveras av extern hårdvara zAktiva IRQ kan pollas av program zFigur 3-1 i manualen

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)49 Laboration 3: Exceptions Bakgrundsprogram zBakgrundsprogram beräknar och skriver ut primtal Main: is prime Main: is prime Main: is prime...

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)50 Laboration 3: HA1 Exceptions med nios II-kod Home Assignment – HA HA1: lägger till avbrott från timer_1 som (dessutom) varje sekund ger utskrift av tid 59:57 59:58 59:59 Main: is prime 00:00 00:01 00:02 Main: is prime 00:03 00:04 00:05 00:06 Main: is prime 00:07 00:08 00:09

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)51 Nios Timer Hårdvaru-figur counter clock period copy write from program using store run start time-out Q Q’ D cl set clear stop zero snap-shot read from program using load copy store Q Q’ D cl load

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)52 0x920 status 0x924 control 0x928 periodl 0x92C periodh 0x930 snapl 0x934 snaph Nios timer_1 Status / Control etc Run T0 - Time-Out ITO cont start stop 15 0 IRQ at index 10

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)53 Nios timer_1 Hokus Pokus zTO - Time Out, bit 0 at address 0x920 zRun, bit 1 på adress 0x920 zClear Time Out, Write anything to 0x920 zContinous Counting, ”set” bit 1 at 0x924 zStart Run, ”set” bit 2 at 0x924 zStop Counting, ”set” bit 3 at 0x924 zWR anything to snapshot, copy Counter to SnapShot zEnable interupt, set bit 0 at 0x924

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)54 Laboration 3: HA2 TRAP med nios II-kod HA1: avbrott från timer_1 ger utskrift av tid HA2: trap i ”main-loop” ger (dessutom) utskrift av ”!” 59:57 59:58 59:59 Main: is prime! 00:00 00:01 00:02 Main: is prime! 00:03 00:04 00:05 00:06 Main: is prime! 00:07 00:08 00:09

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)55 Laboration 3: HA3 TRAP med nios II-kod HA1: avbrott från timer_1 ger utskrift av tid HA2: trap i main-loop ger utskrift av ”!” HA3: trap i timer-avbrottsrutin ger (dessutom) utskrift av ”T” 59:57T 59:58T 59:59T Main: is prime! 00:00T 00:01T 00:02T Main: is prime! 00:03T 00:04T 00:05T 00:06T Main: is prime! 00:07T 00:08T 00:09T

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)56 Laboration 3: HA4 Interrupts med nios II-kod HA1: avbrott från timer_1 ger utskrift av tid HA2: trap i main-loop ger utskrift av ”!” HA3: trap i avbrottsrutin ger utskrift av ”T” HA4: avbrott från knappen KEY0 Down and Up ger (dessutom) utskrift av D och U 59:57T D59:58T U59:59T Main: is prime! D00:00T 00:01T 00:02T Main: is prime! 00:03T U00:04T 00:05T 00:06T Main: is prime! 00:07T 00:08T 00:09T

13 October 2015 IS1200 Datorteknik ht2009 föreläsning 6, (D2)57 de2_pio_keys4 Memory Mapped Addresses 0x840 0x844 0x848 0x84C KEY3 KEY2 KEY1 KEY0 Delar av Lab-kortet Direction Register Interrupt Mask Register Edge Capture Register - ECR Data Register

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)58 Nios II: de2_pio_toggles_18 de2_pio_keys_4 zDirection Register: 0=in, 1=out zBidirectional bits are possible, ”has_tri” zInterrupt Mask: 0=disable, 1=enable (each bit) zEdge Capture: rising, falling, any, none (all bits) zOnly input pins can capture edges zClear Edge Capture Register, Write anything to edge capture register at 0xNNC

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)5913 October de2_pio_toggles18 Memory Mapped Addresses 0x850 0x854 0x858 0x85C SW3 SW2 SW1 SW0 Delar av Lab-kortet SW14 SW15 SW16 SW17 Direction Register Interrupt Mask Register Edge Capture Register - ECR Data Register

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)60 Laboration 3: Surprice #1 Interrupts med nios II-kod HA1: avbrott från timer_1 ger utskrift av tid HA2: trap i main-loop ger utskrift av ”!” HA3: trap i avbrottsrutin ger utskrift av ”T” HA4: avbrott från knappen KEY0 Down and Up ger (dessutom) utskrift av D och U Surprice: något ytterligare 59:57T D59:58T U59:59T Main: is prime! D00:00T 00:01T 00:02T Main: is prime! 00:03T U00:04T 00:05T 00:06T Main: is prime! 00:07T 00:08T 00:09T

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)61 Laboration 3 Interrupts Exceptions med C-kod C-code given (background and interrupts): ___59:58___DdU___Dd____59:59__U_ HA6: Toggles (and interrupts from TOGGLES18) __Ss___DdU___Dd__Ss__U__59:59___ HA7: Nested Interrupts (interrupt in interrupthandler) ___SDdUs_____SDdsU__59:59___ LA8: Surprice Assignement (surprice)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)62 Laboration 3 Interrupts (forts.) zAvbrott från serieportar är möjligt zAvbrott då RxRdy blir 1 (IBF) zAvbrott då TxRdy blir 1 (OBE) zDet finns: Separata ”Enable/Disable Interrupt” för IBF/RxRdy och OBE/TxRdy

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)63 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 RxRdy (IBF) TxRdy (OBE) RxDATA (RD) uart_10x880-88F TxDATA (WR) uart_0

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)64 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 0x86C RxDATA (RD) uart_00x860-86F (IRQ at index 4) uart_1 0x880-88F (IRQ at index 5) TxDATA (WR) uart_0: IRQ at index 4 Enable interrupt for RxRdy - IRxRdy Enable interrupt for TxRdy - ITxRdy

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)65 IRQ-Handler (för KEYS4) letar fram aktuell avbrottskälla irq02-int valbar adress key0-int valbara adresser KEY0 ? KEY1 ? KEY2 ? KEY3 ? ??? retur key3-int

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)66 Int from IRQ-02 de2_pio_keys_4 irq02-int: pushr8 moviar24, 0x840# bas-adress till KEYS4 ldwr8, 12(r24)# läs ECR stwr0, 12(r24)# clear ECR / acknowledge andir24, r8, 0b0001# KEY0 ? bner24, r0, key0-int# yes, int from key-0 andir24, r8, 0b0010# KEY1 ? bner24, r0, key1-int# yes, int from key-1...# and perhaps 2 more keys (r24=et) (kom ihåg att göra ”pop r8” innan eret)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)67 Int from IRQ-2 de2_pio_keys_4 : key0int key0-int: push...# vid behov # skriv ut ’D’ paus ’d’ om ”down” pop...# vid behov popr8# vid behov eret# returhopp

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)68 IRQ-Handler (för TOGGLES18) letar fram aktuell avbrottskälla irq03-int valbar adress tog0-int valbara adresser TOGGLES0 ? TOGGLES1 ?... TOGGLES8 ?... ??? retur tog8-int

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)69 Int from IRQ-03 TOGGLES18 irq03-int: pushr8 moviar24, 0x850# bas-adress till TOGGLES18 ldwr8, 12(r24)# läs ECR stwr0, 12(r24)# clear ECR andir24, r8, 0b0001# TOGGLES-0 ? bner24, r0, tog0-int# yes, int from TOGGLES-0 andir24, r8, 0b0010# TOGGLES-1 ? bner24, r0, tog1-int# yes, int from TOGGLES-1...# and maybe 16 more toggles

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)70 IRQ-Handler (för uart_0) letar fram aktuell avbrottskälla irq04-int valbar adress Rx0-int valbara adresser RxRdy ?. TxRdy ? ??? Tx0-int retur

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)71 Int from IRQ-04 uart_0 irq04-int: pushr8 moviar24, uart_0# adress till uart0 ldwr8, 12(r24)# läs status andir24, r8, 0x80# RxRdy ? bner24, r0, Rx0-int# yes, int from RxRdy andir24, r8, 0x40# TxRdy ? bner24, r0, Tx0-int# yes, int from TxRdy...

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)72 IRQ-Handler (för timer_1) letar fram aktuell avbrottskälla irq10-int valbar adress Timer_1-int valbara adresser... T1-Int ?. ??? retur

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)73 Int from IRQ-10 timer_1 irq10-int: moviar24, timer_1# adress till timer ldwr24, 0(r24)# läs status andir24, r24, 0b1# TO=1 ? beqr24, r0, NoTimeInt # no, int from timer Timer_1-int: moviar24, timer# adress till timer stwr0, 0(r24)# clear Time-Out...

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)74 Möjligt: Flödesschema för korsvis kommunikation avbrottstyrd med paritetskontroll in_charparmakerec_charpartest eret errmakesend_charout_char eret RxRdy-INT

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)75 Några användbara makro:n till Nios-2.macroEI# Enable Interrupt rdctl r24, ctl0 orir24, r24, 0b01# wrctl ctl0, r24.endm.macroDI# Disable Interrupt pushr8# r8 istf r24 rdctlr8, ctl0# för det kan bli andir8, r8, 0xFE# avbrott här wrctl ctl0, 8 popr8.endm

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)76 Några användbara makro:n för Nios-2.macroPUSH reg# lägg reg på stack subisp, sp, 4 stw\reg, 0(sp).endm.macroPOP reg# från stack till reg ldw\reg, 0(sp) addisp, sp, 4.endm; OBS ej reg=sp OBS

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)77 Samlad information IRQ-levelUnitAddressAcknowledge... IRQ-02KEYS40x840stw any, 0xC(0x840) IRQ-03TOGGLES180x850stw any, 0xC(0x850) IRQ-04uart_00x860read/write data IRQ-05uart_10x880read/write data... IRQ-10timer_10x920stw any, 0(0x920)...

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)78 HAL-functions Hardware Abstraction Layer zKoppla en exceptionhandler till ett index (”registrera”) retvalue = alt_irq_register(3 parameters) (bra beskrivning finns i lab-PM nios2int !) zDet finns även (används i lab nios2int ! Se lab-PM) zTillåt bara avbrott med högre prioritet än index oldmask=alt_irq_interruptible(index) zÅterställ till tidigare läge med avbrott avstängda alt_irq_non_interruptible(oldmask)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)79 static alt_u32 alt_irq_interruptible(alt_u32 priority) (används i lab nios2int) Tillåt endast avbrott med högre prioritet än angiven priority dvs med index lägre än priority Som returvärde erhålls gamla IENABLE/ctl3 Eller på en högre akademisk nivå ”den gamla prioritetsmasken” Och, det görs EI dvs bit med index 0 i STATUS ettställs aktivt Bottom Up: Nollställ alla bitar med samma eller högre index i IENABLE/ctl3 Samt ettställ bit med index 0 i STATUS (”Enable Interrupt”) Returnera gamla värdet av från IENABLE/ctl3 (som kan kallas oldmask)

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)80 void alt_irq_non_interruptible(alt_u32 oldmask) (används i lab nios2int) Stäng av alla avbrott och ”återställ” IENABLE/ctl3 Inparameter oldmask förutsätts vara returvärdet från oldmask = alt_irq_interruptible(index) Inget returvärde Bottom-Up: Nollställ bit med index 0 i STATUS Ettställ bitar med samma eller lägre prioritet som var ettställda ”tidigare” in i IENABLE

13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)81 int alt_irq_disable(alt_u32 id) ”förbjud avbrott med visst index” Nollställ enstaka bit i IENABLE/ctl3 Returvärde är alltid 0 Effekten är att man kan förbjuda avbrott på en viss nivå / med ett visst index retval = int_alt_irq_disable(7); ctl3

Ettställ enstaka bit i IENABLE/ctl3 Returvärde är alltid 0 Effekten är att man kan tillåta avbrott på en viss nivå / med ett visst index 13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)82 int alt_irq_enable(alt_u32 id) ”tillåt avbrott med visst index” retval = int_alt_irq_enable(7); ctl3

Nollställ alla bitar i IENABLE/ctl3 med index > eller = med id Tillåt avbrott genom att ettställa PIE-biten i register STATUS/ctl0 Returvärde är innehållet i IENABLE/ctl3 före nollställningen Effekten är att man tillåter avbrott enligt innehåll i ienable/ctl3 men endast avbrott med prioritet > id (dvs med index < id) 13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)83 int alt_irq_interruptible(alt_u32 id) ” Tillåt endast avbrott med högre prioritet” oldmask = int_alt_irq_interruptible(7); ctl3

Förbjud avbrott genom att nollställa PIE-biten i register STATUS/ctl0 Återställ bitar i IENABLE/ctl3 enligt värde i inparameter Inparameter ska vara returvärde från int_alt_irq_interruptible() Används för att återställa STATUS och IENABLE som det var innan närmast föregående anrop av int_alt_irq_interruptible() 13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)84 int alt_irq_non_interruptible(alt_u32 oldmask) ” Återställ tillåtna/förbjudna avbrott enligt tidigare ” int_alt_irq_non_interruptible(oldmask); ctl3