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.

Slides:



Advertisements
Liknande presentationer
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Advertisements

William Sandqvist System Management functions S Burd, Systems Architecture ISBN Figure 11-2 CPU Management Memory Management.
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.
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 IS1500 Datorteknik o k, föreläsning CE - F61 IS1500 Datorteknik och komponenter Föreläsning 6 Bushantering In- och utmatning, I/O Programstyrd.
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 —
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.
William Sandqvist Övning 6 Seriekommunikation - serieport William Sandqvist
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 20152G1502, föreläsning 3, vt G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version.
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.
1 June G1502, Föreläsning 9, vt2004 för IT1 2G1502 Datorteknik allmän kurs Föreläsning 9 1. Processorkonstruktion 2. DMA, Direct Memory Access 3.
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.
10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007.
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.
20 June G1502, Föreläsning 8 vt2004, för IT1 2G1502 Datorteknik allmän kurs Föreläsning 8 1. CPU-scheduling 2. Semaforer (förberedelse till lab 5)
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.
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.
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.
Migreringserfarenheter från fältet
Grundläggande datavetenskap, 4p
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

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

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)4 Viktiga delar i en dator CPU MEM BUS I/O program data

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)5 Programexekvering i två steg, normalfall (decode) EXECUTE FETCH (update PC)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)6 Exceptions ”Undantag” 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 2. TRAP-instruktioner 3. Andra undantag, interna

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)7 1. Asynchronous Exceptions External 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  Det måste finnas minst en pinne på CPU- chippet med funktionen IRQ - Interrupt Request, troligen flera pinnar (IRQ31—IRQ00)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)8 Viktiga delar i en dator IRQ-signaler, Interrupt ReQuest CPU MEM BUS I/O program data IRQ (t.ex.IRQ31—IRQ00)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)9 Exception Handler Huvudprogram returhopp retur-adress ”hopp vid anrop” exception ExceptionHandler var finns ExceptionHandler ? var lagras adressen till ExceptionHandler ? var sparas returadressen ? intruction

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)10 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)11 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/write (interrupt pending) 5. (det finns fler men de diskuteras ej här)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)12 Nios-II Statusregister 0 status, ctl U PIE Endast två bitar används: PIE = Processor Interrupt Enable (1=enable, 0=disable) U = User Mode (1=User Mode, 0=Supervisor Mode) (Hur byter man mellan User och Supervisor mode? Ej klart!)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)13 Nios-II control-register 0 status, ctl0  Bit med index 0 i status-register betecknas PIE – Processor Interrupt Enable  PIE = 0 förbjuder interrupt (int. disable)  PIE = 1 tillåter interrupt (int. enable)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)14 Nios-II instruktioner för att läsa och skriva ctl-regs  Läsning, kopiera till rj från ctli RDCTLrj, ctli  Skrivning, kopiera till ctli från rj WRCTL ctli, rj Kan bara exekveras i supervisor mode. Ger access-violation exception i user mode. Vi använder endast supervisor mode i våra labbar

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)15 Nios-II Statusregister 1 estatus, ctl1 (exception status)  Då en exception accepteras, kopieras status till estatus så att ”gamla” status- värden kan läsas/skrivas av Exception Handler  Vid retur från Exception Handler, med instruktionen eret, kopieras estatus tillbaks till status

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)16 Nios-II Statusregister 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)17 ctl3 ctl4 No Flip-Flops ! Flip-Flops ! Signal Levels ! EI / DI

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)18 Nios-II Statusregister 4 ipending, ctl4 (interrupt pending) ctl3 är 32 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 disable  värde 1 avbrott begärs och tillåts  Se figur 3-1 i manualen (October 2007)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)19 Exceptions NiosII: Alltid ”hopp” till 0x huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x800020: Fast adress

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)20 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)21

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)22 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 PIE == 0 rdctlr24, ctl4# copy ctl4/ipending beqr24, r0, NoInt# if ctl4 == 0 IntHandler:...# Interrupt Handler... NoInt:...# code see below

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)23 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)24 Vilken Interrupt ? figur 3-2 i manualen IntHandler: 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-31

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

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)26 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)27 Interrupt or Trap ? (cont.) figur 3-2 i manualen REPRIS zExcHandler:# r24/et = exception temporary zrdctlr24, ctl1# copy ctl1/estatus andir24, r24, 0b1# select index 0 beqr24, r0, NoInt# if PIE == 0 zrdctlr24, ctl4# copy ctl4/ipending beqr24, r0, NoInt# if ctl4 == 0 zIntHandler:...# Interrupt Handler... zNoInt:...# code see below

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)28 REPRIS

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)29 Interrupt or Trap figur 3-2 i manualen... NoInt:# Alternativ 1 ldwr24, -4(r29)# kopiera instruktion moviar1, trapcode# kopiera TRAP code beqr1, r24, TrapHandler# yes, TRAP NoTrap: equ trapcode, 0x003B683A# op-code of TRAP

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)30 Interrupt or Trap figur 3-2 i manualen... NoInt:# Alternativ 2 ldwr24, -4(r29)# kopiera instruktion moviar1, trapdum# kopiera TRAP code ldwr1, 0(r1)# till r1 beqr1, r24, TrapHandler# yes, TRAP NoTrap: data# eller i.text trapdum:trap# op-code of TRAP

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)31 Vilken TRAP System Call med TRAP TrapHandler: moviar1, 0# konstant 0 till r1 beqr4, r1, SysCall-0# javisst moviar1, 1# konstant 1 till r1 beqr4, r1, SysCall-1# javisst...

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)32 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)33 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 avbrottsrutin samt lite till nämligen null

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)34 Registrera en Interrupt Handler vad menas med det ? zKoppla ihop en vald Interrupt Handler med en avbrottssignal med ett visst index zSkriv in startadress på rätt plats i avbrottsvektortabellen zKallas ibland ”register an interrupt” returvärde = alt_irq_register(parametrar);

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)35 Initiera för avbrott i Nios-II zKopiera ”stubbe” till adress 0x zInitiera IO-enhet, olika för varje IO-enhet zInitiera bitar i IENABLE / ctl3 zInitiera PIE-biten i STATUS / ctl0 zSkriv och registrera en Interrupt Handler för varje avbrottskälla

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)36 3. Synchronous Exceptions Internal Exceptions 1.Inre händelser orsaker avbrott (Internal) 2.Orsakas av hårdvara internt i CPU:n 3.Exempel (olika typ av ”error”) Unimplemented instructions Overflow Misaligned Memory Reference Divide by zero Access violation...

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)37 Exceptions Exception 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)38 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 intern exception ?

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)39 Nios-II Priority  Interrupt har en viss prioritet, 31—00 (hur avgörs prioritet ?)  TRAP-instruktion, är ohejdbar (varför?)  Intern exception, är ohejdbar (varför?)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)40 Nios-II Exceptions Enable/Disable Exception 1.Globally Enable/Disable Interrupt by PIE-bit 2.Selectively Enable/Disable Interrrupt by bits in ienable 3.TRAP instructions can not be disabled 4.Internal exceptions can not be disabled 5.Selectively Enable/Disable each I/O (lab3) 6.Acknowledge interrupt signals from I/O

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)41 Nios-II Exceptions Exception Processing Sequence 1. Copy status into estatus 2. Set PIE to 0, disabling all interrupts 4. Set U to 0, execute in supervisor mode 5. Save returnadress in ea=r29 6. Set PC to predefined value 0x (Remark: return address must be decremented by 4 before executing eret in interrupt handler but not in trap handler)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)42 ERET-instruction eret # return from exception using content of r29 as return address 1.PC  ea 2.status  estatus

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)43 Ändra i ctl-register Read – Modify - Write Exempel på användbara instruktioner rRDCTL ri, ctlj# kopiera ctlj till ri rWRCTL ctlj,ri # kopiera ri till ctlj rANDIri, rj, ”mask”# ”nollställ”, # ”maska fram” rORIri, rj, ”mask”# ”ettställ” rXORIri, rj, ”mask”# ”invertera”

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)44 IS1200 Datorteknik Laboration 3 Ny/ändrad from våren 2008 tips om I/O-interrupts

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)45 Nios-2 Interrupt signals CPU MEM BUS I/O TIMER_1 IRQ10 TOGGLES18 IRQ3 KEYS4 IRQ2 IRQ bus logic I/O Uart_0 IRQ4

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)46 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)47 Laboration 3 Interrupts 1. T-Time (avbrott från timer_1)......T T T Point-And-Tick (utökat med tidsutskrift) : : : Trapping the Dash (utökat med trap i main) : : : Interrupting the Line (trap i intHandler) : :00---

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)48 Laboration 3 Interrupts (cont.) 5. The Key (interrupts from KEYS4) --59:59--D---U- 6. Toggles (and interrupts from TOGGLES18) __Ss___DdU___Dd__SsU__59:59___ 7. Nested Interrupts (interrupt in interrupthandler) ___SDdUs_____SDdsU__59:59 8. Surprice Assignement (surprice)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)49 Nios pio Hokus Pokus KEYS4 and TOGGLES18 zDirection Register: 0=in, 1=out zBidirectional bits are possible, ”has_tri” zInterrupt Mask: 0=disable, 1=enable (each bit) zEdgecapture: 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)50 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)51 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)52 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)53 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)54 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 RxRdy (IBF) TxRdy (OBE) RxDATA (RD) uart_10x880-88F TxDATA (WR) uart_0

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)55 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)56 IRQ-Handler (för KEYS4) letar fram aktuell avbrottskälla irq02-int valbar adress KEY0int valbara adresser KEY0 ? KEY1 ? KEY2 ? KEY3 ? ??? retur KEY3int

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)57 IRQ-Handler (för TOGGLES18) letar fram aktuell avbrottskälla irq03-int valbar adress TOGGLES0int valbara adresser TOGGLES0 ? TOGGLES1 ?... TOGGLES8 ?... ??? retur TOGGLES8int

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)58 Int from IRQ-02 KEYS4 irq02-int: moviar24, 0x840# bas-adress till KEYS4 ldwr1, 12(r24)# läs ECR stwr0, 12(r24)# clear ECR andir24, r1, 0b0001# KEY0 ? bner24, r0, KEY0int# yes, int from KEY0 andir24, r1, 0b0010# KEY1 ? bner24, r0, KEY1int# yes, int from KEY1...# and perhaps 2 more keys (r24=et och r1=at)

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)59 Int from IRQ-2 KEYS4: key0int KEY0-int: push...# vid behov # skriv ut ’D’ paus ’d’ om ”down” pop...# vid behov subir29, r29, 4# justera returadress eret# returhopp

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)60 Int from IRQ-03 TOGGLES18 irq03-int: moviar24, 0x850# bas-adress till TOGGLES18 ldwr1, 12(r24)# läs ECR stwr0, 12(r24)# clear ECR andir24, r1, 0b0001# TOGGLES0 ? bner24, r0, TOG0int# yes, int from TOGGLES0 andir24, r1, 0b0010# TOGGLES1 ? bner24, r0, TOG1int# yes, int from TOGGLES1...# and maybe 16 more toggles

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)61 IRQ-Handler (för uart_0) letar fram aktuell avbrottskälla irq04-int valbar adress Rx-int valbara adresser RxRdy ?. TxRdy ? ??? Tx-int retur

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)62 Int from IRQ-04 uart_0 irq04-int: moviar24, uart_0# adress till uart0 ldwr1, 12(r24)# läs status andir24, r1, 0x80# RxRdy ? bner24, r0, Rx0-int# yes, int from RxRdy andir24, r1, 0x40# TxRdy ? bner24, r0, Tx0-int# yes, int from TxRdy...

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)63 IRQ-Handler (för timer_1) letar fram aktuell avbrottskälla irq10-int valbar adress Timer_1-int valbara adresser... T1-Int ?. ??? retur

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)64 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 TimerInt: moviar24, timer# adress till timer stwr0, 0(r24)# clear Time-Out...

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)65 Möjligt: Flödesschema för korsvis kommunikation avbrottstyrd med paritetskontroll in_charparmakerec_charpartest eret errmakesend_charout_char eret RxRdy-INT

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)66 Laboration 3 Blandad kod Byt ut en av subrutinerna mot funktion (metod) skriven i C-kod (Java) (t.ex. tick) Återanvänd rutin från hemlab-1. Kräver kännedom om kompilatorns praxis för parameteröverföring !

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)67 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 rdctlr24, ctl0 andir24, r24, 0xFE# wrctl ctl0, r24.endm

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)68 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)69 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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)70 HAL-functions Hardware Abstraction Layer zkoppla en exceptionhandler till ett index returvärde = alt_irq_register(parametrar) zstäng av alla avbrott (index(31—00) alt_irq_disable_all() ztillåt alla avbrott (index 31—00) alt_irq_enable_all() zDet finns även alt_irq_enable() och alt_irq-disable() zDet finns även alt_irq_interruptible() och alt_irq_non_interruptible()

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)71 alt_irq_context alt_irq_disable_all(void) Nollställ bit med index 1 i STATUS/ctl0 Och: Returparameter är en int med gamla STATUS/ctl0 (alt_irq_context är en int) Det finns en tanke att denna returparameter ska användas som inparameter till en kommande alt_irq_enable() som hör ihop med denna alt_irq_disable()

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)72 void alt_irq_enable_all(alt_irq_context context) Ettställ bit med index 1 i STATUS/ctl0 Men: Inparameter är en int (alt_irq_context är en int) Och det är dess värde som skrivs till ctl0 Det finns en tanke att man som inparameter ska använda returparameter för den alt_irq_disable() som hör ihop med denna alt_irq_enable()

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)73 int alt_irq_disable(alt_u32 id) Nollställ bit med index id i IENABLE/ctl3 Returvärde är alltid 0

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)74 int alt_irq_enable(alt_u32 id) Ettställ bit med index id i IENABLE/ctl3 Returvärde är alltid 0

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)75 int alt_irq_enabled(void) Returvärde är bit med index 1 i STATUS/ctl0 Ungefär en fråga som returnerar TRUE/FALSE

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)76 static alt_u32 alt_irq_interruptable(alt_u32 priority) Tillåt endast avbrott med högre prioritet än priority dvs med index lägre än priority Som returvärde erhålls gamla IENABLE Eller på en högre akademisk nivå ”den gamla prioritetsmasken” Ja, 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 Returnera gamla värdet av från IENABLE/ctl3

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)77 void alt_irq_non_interruptable(alt_u32 mask) Stäng av alla avbrott och ”återställ” IENABLE mask förutsätts vara insamlad med mask = alt_irq_interruptable(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 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)78 Exceptions in Nios-II nios2int software structure trap 0x800020:”jmp ExcHand” IRQ03 IRQ04 IRQ10 error IntHand: No Keys Yes Toggle Yes Timer Yes subi r29, r29, 4 eret No TrapHand: OutChar eret instr int ExcHand: Ienable=0 Trap ? ElseHand Yes No EPIE=0 Yes No NoInt:

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)79 Int ?Trap ? ElseHand Yes No Ienable=0 Trap ? ElseHand Yes No EPIE=0 Yes No NoInt:

13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)80 Exceptions in Nios-II oslab: software structure trap 0x800020:”jmp ExcHand” ExcHand: IntHand: subi r29, r29, 4 Context Switch eret #Yield br CS TrapHand: instr int Ienable=0 Trap ? ElseHand Yes No EPIE=0 Yes No NoInt: