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 flera
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 6, (E och I m.fl.)2 F1F2F3F5F7F8F9F10Ö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 Våren 2009 Period 3 F6Ö5Ö6LAB-2 Våren 2009 Period 4 F4
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)4 Viktiga delar i en dator CPU MEM BUS I/O program data
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)5 Programexekvering i två steg, normalfall (decode) EXECUTE FETCH (update PC)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)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)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)8 Viktiga delar i en dator IRQ-signaler, Interrupt ReQuest CPU MEM BUS I/O program data IRQ (t.ex.IRQ31—IRQ00) t.ex. Serieport - IRQ4 Timer – IRQ10
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)9 Exception Handler Huvudprogram returhopp retur-adress ”hopp vid anrop” exception ExceptionHandler var finns ExceptionHandler ? var lagras adressen till ExceptionHandler ? var sparas returadressen ? intruction
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)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 (interrupt pending) 5. (det finns fler men de diskuteras ej här)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)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 implementerat!)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)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)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)14 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)15 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)16 Ändra i ctl-register Read – Modify - Write Exempel på användbara instruktioner RDCTL ri, ctlj# kopiera ctlj till ri WRCTL ctlj,ri # kopiera ri till ctlj ANDIri, rj, ”mask”# ”nollställ”, # ”maska fram” ORIri, rj, ”mask”# ”ettställ” XORIri, rj, ”mask”# ”invertera”
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)17 Nios-II Statusregister 1 estatus, ctl EU EPIE Samma bitkonfiguration som ctl0-status Endast två bitar används: EPIE = Processor Interrupt Enable (1=enable, 0=disable) EU = User Mode (1=User Mode, 0=Supervisor Mode)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)18 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)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)19 ERET-instruction eret # return from exception using content of r29 as return address PC ea status estatus
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)20 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)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)21 ctl3 ctl4 No Flip-Flops ! Flip-Flops ! Signal Levels ! EI / DI
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)22 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)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)23 Exceptions NiosII: Alltid ”hopp” till 0x huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x800020: Fast adress
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)24 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:
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)25
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)26 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)27 Interrupt-Handler letar fram aktuell IRQ-handler IntHandler valbar adress irq00-int valbara adresser irq04-int irq31-int retur IRQ-00? IRQ-01? IRQ-04? IRQ-03? IRQ-31? subi r29, r29, 4
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)28 Vilken Interrupt ? figur 3-2 i manualen IntHandler: subir29, r29, 4# justera ea 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)29 2. Synchronous Exceptions TRAP instruction Exception med hjälp av TRAP-instruktion Placeras av programmeraren på önskad och känd plats. Används t.ex. för OS System Call Nios-2: TRAP erbjuder en enda TRAP till den enda fasta adressen = 0x Parameter (i r4) möjliggör olika SysCall
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)30 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)31 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)32 REPRIS
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)33 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)34 Interrupt or Trap figur 3-2 i manualen... NoInt:# Alternativ 2 pushr8 ldwr24, -4(r29)# kopiera instruktion moviar8, trapdum# kopiera TRAP code ldwr8, 0(r8)# till r1 beqr8, r24, TrapHandler# yes, TRAP popr8 NoTrap: data# eller i.text trapdum:trap# op-code of TRAP
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)35 Vilken TRAP System Call med TRAP TrapHandler: popr8# återställ r8 moviar24, 0# konstant 0 till r1 beqr4, r24, SysCall-0# javisst moviar24, 1# konstant 1 till r1 beqr4, r24, SysCall-1# javisst...
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)36 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)37 Standard method 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 REPRIS
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)38 Registrera en Interrupt Handler vad menas med det ? Koppla ihop en vald Interrupt Handler med en avbrottssignal med ett visst index Skriv in startadress på rätt plats i avbrottsvektortabellen Kallas ibland ”register an interrupt” HAL-function: returvärde = alt_irq_register(parametrar);
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)39 Initiera för avbrott i Nios-II 1.Kopiera ”stubbe” till adress 0x Initiera IO-enhet, olika för varje IO-enhet 3.Skriv och registrera en Interrupt Handler för varje avbrottskälla 4.Initiera bitar i IENABLE / ctl3 5.Initiera PIE-biten i STATUS / ctl0
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)40 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...
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)41 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)42 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 ?
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)43 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?)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)44 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
23 August August 2014 February 4, 2009 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)45 IS1200 Datorteknik Laboration 3 tips om I/O-interrupts
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)46 Nios-2 Interrupt signals CPU MEM BUS I/O TIMER_1 IRQ10 TOGGLES18 IRQ3 KEYS4 IRQ2 IRQ bus logic I/O Uart_0 IRQ4
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)47 Nios-2 Interrupt signals 32 separata IRQ som kan aktiveras av extern hårdvara Aktiva IRQ kan pollas av program Figur 3-1 i manualen
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)48 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---
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)49 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)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)50 Nios pio Hokus Pokus KEYS4 and TOGGLES18 Direction Register: 0=in, 1=out Bidirectional bits are possible, ”has_tri” Interrupt Mask: 0=disable, 1=enable (each bit) Edgecapture: rising, falling, any, none (all bits) Only input pins can capture edges Clear Edge Capture Register, Write anything to edge capture register at 0xNNC
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)51 Interrupt-Handler Vilken knapp i KEY? irq02-int valbar adress key0-int valbara adresser key2-int key3-int retur ECR-00? ECR-01? ECR-02? ECR03? key1-int retur error
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)52 Interrupt-Handler knapp uppe eller nere ? key1-int valbar adress key1-up-int valbara adresser retur Up ? Down ? key1-down-int retur error
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)53 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)54 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)55 Nios timer_1 Hokus Pokus TO - Time Out, bit 0 at address 0x920 Run, bit 1 på adress 0x920 Clear Time Out, Write anything to 0x920 Continous Counting, ”set” bit 1 at 0x924 Start Run, ”set” bit 2 at 0x924 Stop Counting, ”set” bit 3 at 0x924 WR anything to snapshot, copy Counter to SnapShot Enable interupt, set bit 0 at 0x924
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)56 Laboration 3 Interrupts (forts.) Avbrott från serieportar är möjligt Avbrott då RxRdy blir 1 (IBF) Avbrott då TxRdy blir 1 (OBE) Det finns: Separata ”Enable/Disable Interrupt” för IBF/RxRdy och OBE/TxRdy
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)57 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 RxRdy (IBF) TxRdy (OBE) RxDATA (RD) uart_10x880-88F TxDATA (WR) uart_0
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)58 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)59 IRQ-Handler (för KEYS4) letar fram aktuell avbrottskälla irq02-int valbar adress KEY0int valbara adresser KEY0 ? KEY1 ? KEY2 ? KEY3 ? ??? retur KEY3int
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)60 IRQ-Handler (för TOGGLES18) letar fram aktuell avbrottskälla irq03-int valbar adress TOGGLES0int valbara adresser TOGGLES0 ? TOGGLES1 ?... TOGGLES8 ?... ??? retur TOGGLES8int
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)61 Int from IRQ-02 KEYS4 irq02-int: pushr8 moviar24, 0x840# bas-adress till KEYS4 ldwr8, 12(r24)# läs ECR stwr0, 12(r24)# clear ECR andir24, r8, 0b0001# KEY0 ? bner24, r0, KEY0int# yes, int from KEY0 andir24, r8, 0b0010# KEY1 ? bner24, r0, KEY1int# yes, int from KEY1...# and perhaps 2 more keys (r24=et) (kom ihåg att göra ”pop r8” innan eret)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)62 Int from IRQ-2 KEYS4: key0int KEY0-int: push...# vid behov # skriv ut ’D’ paus ’d’ om ”down” pop...# vid behov popr8# vid behov eret# returhopp
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)63 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# TOGGLES0 ? bner24, r0, TOG0int# yes, int from TOGGLES0 andir24, r8, 0b0010# TOGGLES1 ? bner24, r0, TOG1int# yes, int from TOGGLES1...# and maybe 16 more toggles
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)64 IRQ-Handler (för uart_0) letar fram aktuell avbrottskälla irq04-int valbar adress Rx-int valbara adresser RxRdy ?. TxRdy ? ??? Tx-int retur
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)65 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...
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)66 IRQ-Handler (för timer_1) letar fram aktuell avbrottskälla irq10-int valbar adress Timer_1-int valbara adresser... T1-Int ?. ??? retur
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)67 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...
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)68 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 !
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)69 Några användbara makro:n till Nios-2.macroEI# Enable Interrupt rdctl r24, ctl0# varför r24/et ? 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)70 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
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)71 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)...
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)72 HAL-functions Hardware Abstraction Layer Koppla en exceptionhandler till ett index (”registrera”) returvärde = alt_irq_register(3 parametrar) (bra beskrivning finns i lab-PM nios2int !) Det finns även (används i lab nios2int ! Se lab-PM) Tillåt avbrott med högre prioritet än index (dvs avbrott med lägre indexvärden) oldmask=alt_irq_interruptible(index) Återställ till tidigare läge med avbrott avstängda alt_irq_non_interruptible(oldmask)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)73 static alt_u32 alt_irq_interruptable(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 innehållet i register 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 (”Enable Interrupt”) Returnera gamla värdet av från IENABLE/ctl3 (som kan kallas oldmask)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)74 void alt_irq_non_interruptable(alt_u32 oldmask) (används i lab nios2int) Stäng av alla avbrott och ”återställ” IENABLE Inparameter oldmask förutsätts vara returvärdet från oldmask = alt_irq_interruptable(index) Inget returvärde Bottom-Up: Nollställ bit med index 0 i STATUS (ctl0) Ettställ bitar med samma eller lägre prioritet som var ettställda ”tidigare” in i IENABLE
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)75 HAL-functions Hardware Abstraction Layer stäng av alla avbrott (index(31—00) alt_irq_disable_all() tillåt alla avbrott (index 31—00) alt_irq_enable_all() Det finns även (används troligen ej i lab nios2int) alt_irq_enable(index) och alt_irq-disable(index)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)76 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_all() som hör ihop med denna alt_irq_disable_all()
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)77 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_all() som hör ihop med denna alt_irq_enable_all()
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)78 int alt_irq_disable(alt_u32 id) Nollställ bit med index id i IENABLE/ctl3 Returvärde är alltid 0 Effekten är att man kan förbjuda avbrott på en viss nivå / med ett visst index
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)79 int alt_irq_enable(alt_u32 id) Ettställ bit med index id i IENABLE/ctl3 Returvärde är alltid 0 Effekten är att man kan tillåta avbrott på en viss nivå / med ett visst index
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)80 int alt_irq_enabled(void) Returvärde är bit med index 0 i STATUS/ctl0 Ungefär en fråga som returnerar TRUE/FALSE
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)81 Normal programming function call in main program CALL function RET
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)82 Non-nested interrupts interrupt in main program exception ERET EI ”EI” ”DI”
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)83 Nested interrupts interrupt in interrupt handler exception ERET EI ”EI” ”DI” ”EI”
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)84 Nested interrupts exception ERET EI ”EI” ”DI” exception ”DI” ”EI” Save EI DI Restore
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)85 Nested interrupts using HAL-functions exception ERET EI ”EI” ”DI” exception ”DI” ”EI” EI DI oldmask=alt_irq_interruptible(index) alt_irq_non_interruptible(oldmask)
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)86 Nested interrupts using HAL-functions exception ERET EI ”EI” ”DI” exception ”DI” ”EI” EI DI oldmask=alt_irq_interruptible(index) alt_irq_non_interruptible(oldmask) TogglesInt Skriv punkter KeysInt
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)87 Enable (all) Interrupts ettställ PIE-biten i status #assembler-kod rdctlrx, ctl0#vilket register rx? orirx, rx, 0b01# wrctl ctl0, rx
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)88 Enable (all) Interrupts ettställ PIE-biten i status # inför ett makro.macroEI# Enable Interrupt rdctlr24, ctl0# varför r24/et ? orir24, r24, 0b01# wrctl ctl0, r24.endm
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)89 Enable (all) Interrupts ettställ PIE-biten i status # inför en subrutin utan inparameter # Enable Interrupt EI:rdctlr24, ctl0# vilket register? orir24, r24, 0b01# wrctl ctl0, r24 ret
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)90 Enable (all) Interrupts ettställ PIE-biten i status # inför en C-function voidEI(void) { ???? } // ctl-register är oåtkomliga från C-kod // Måste skrivas I assembler
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)91 Enable (all) Interrupts skriv till PIE-biten i status # inför en HAL-function # Altera “erbjuder” HAL-functions # HAL - Hardware Abstraction Layer void alt_irq_enable_all(alt_irq_context context) // ctl-register är oåtkomliga från C-kod // Är skriven i assembler
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)92 Enable special Interrupts ettställ bit i ienable #assembler-kod rdctlrx, ctl3#vilket register rx? orirx, rx, 0b04#vilken bit ? wrctl ctl3, rx
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)93 Enable special Interrupts ettställ bit i ienable # inför ett makro med index i register.macroEI reg# Enable Interrupt rdctlr24, ctl3# varför r24/et ? orir24, r24, reg # wrctl ctl3, r24.endm
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)94 Enable special Interrupts ettställ bit i ienable # inför ett makro med index (“immediate”).macroEISpec index# Enable Special Interrupt pushr8 movir8, 1# why r8 ? sllir8, r8, \index# build mask rdctlr24, ctl3# why r24/et ? orir24, r24, r8 # wrctlctl3, r24 popr8.endm
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)95 Enable special Interrupts ettställ bit i ienable # inför en subrutin med en inparameter index i r4 # Enable SpecialInterrupt EISpec:pushr8 movir8, 1# why r8 ? sllir8, r8, r4# build mask rdctlr24, ctl3# why r24/et ? orir24, r24, r8 # wrctlctl3, r24 popr8 ret
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)96 Enable special Interrupts ettställ bit i ienable # inför en C-function voidEI(index) { ???? } // ctl-register är oåtkomliga från C-kod // Måste skrivas I assembler
23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)97 Enable special Interrupts ettställ bit i ienable # inför en HAL-function # Altera “erbjuder” HAL-functions # HAL - Hardware Abstraction Layer int alt_irq_enable(alt_irq_context index) // ctl-register är oåtkomliga från C-kod // Är skriven i assembler