2 April 2015 IS1200 Datorteknik föreläsning CE - F71 IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps
IS1200 Datorteknik Assemblerprogram C In- och utmatning Avbrott och "trap" Cacheminnen Trådar, synkronisering CE F1 CE F3 CE F4 CE F5 CE F6 CE F7 CE F8 CE F9 CE F2 CE Ö4 CE Ö1 CE Ö2 CE Ö3 CE Ö7 CE Ö8 CE Ö9 CE Ö5CE Ö6 lab nios2time hemlab C lab nios2io lab nios2int hemlab cache hemlab trådar CE F10CE Ö10 tentamen 2 April IS1200 Datorteknik föreläsning CE - F7
2 April 2015 IS1200 Datorteknik föreläsning CE - F73 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F74 Viktiga delar i en dator CPU MEM BUS I/O program data
2 April 2015 IS1200 Datorteknik föreläsning CE - F75 Programexekvering i två steg, normalfall (decode) EXECUTE FETCH (update PC)
2 April 2015 IS1200 Datorteknik föreläsning CE - F76 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 2 April 2015 IS1200 Datorteknik föreläsning CE - F77
2 April 2015 IS1200 Datorteknik föreläsning CE - F78 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”
Några svar för Nios (och MIPS) Returadress sparas av Nios HW i register r29= ea = exception return address Återhopp görs med RTE-instruktionen Koden för exception Handler placeras av översättarprogrammet på ledig plats i programminnet Hårdvara möjliggör för hårdvara eller programvara att ”avkoda” orsak till exception och genomföra hopp till rätt Exception Handler beroende på orsaken 2 April 2015 IS1200 Datorteknik föreläsning CE - F79
2 April 2015 IS1200 Datorteknik föreläsning CE - F710 Exception Handler Huvudprogram returhopp retur-adress ”hopp vid exception” exception ExceptionHandler Var placeras koden för ExceptionHandler ? ”var som helst” Hur utförs hopp till ExceptionHandler ? hårdvara Hur utförs hopp till returadressen ? Med RTE -instruktion intruction ”hopp vid retur”
2 April 2015 IS1200 Datorteknik föreläsning CE - F 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F712 Viktiga delar i en dator IRQ-signaler, Interrupt ReQuest CPU MEM BUS I/O program data IRQ (t.ex.IRQ31—IRQ00)
2 April 2015 IS1200 Datorteknik föreläsning CE - F713 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 NN null
2 April 2015 IS1200 Datorteknik föreläsning CE - F714 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F715 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!)
Grindar att öppna före avbrott 2 April 2015 IS1200 Datorteknik föreläsning CE - F716 && & Interrupt to CPU PIE-bit in STATUS ctl0 BIT in IENABLE ctl3 BIT in I/O maskreg Interrupt from I/O BIT in IPENDING ctl4 IRQ-bit
2 April 2015 IS1200 Datorteknik föreläsning CE - F717 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F718 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F719 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F720 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F721 ctl3 ctl4 No Flip-Flops ! Flip-Flops ! Signal Levels ! ctl0 bit 0 EI / DI
Grindar att öppna före avbrott 2 April 2015 IS1200 Datorteknik föreläsning CE - F722 && & Interrupt to CPU PIE-bit in STATUS ctl0 BIT in IENABLE ctl3 BIT in I/O maskreg Interrupt from I/O BIT in IPENDING ctl4 IRQ-bit
2 April 2015 IS1200 Datorteknik föreläsning CE - F723 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F724 Exceptions Nios-II: Alltid ”hopp” till 0x huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x800020: Fast adress
2 April 2015 IS1200 Datorteknik föreläsning CE - F725 Exception-Handler Nios-II: orsak till exception ? huvudprogram returadress ”hopp vid anrop” exception ExcHandler OPCODE reg jmp ExcHandler Fast adress Symbolisk adress Vi väljer namn IntHandler TrapHandler ElseHandler 0x800020: Symboliska adresser Vi väljer namn ? ? ?
2 April 2015 IS1200 Datorteknik föreläsning CE - F726 IntHandler: NoInt: TrapHandler: NoTrap:
2 April 2015 IS1200 Datorteknik föreläsning CE - F727 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F728 Interrupt-Handler letar fram aktuell IRQ-handler IntHandler irq00-int irq01-int irq31-int retur IRQ-00? IRQ-01? IRQ-02? IRQ-31? irq02-int retur subi r29, r29, 4
2 April 2015 IS1200 Datorteknik föreläsning CE - F729 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...
2 April 2015 IS1200 Datorteknik föreläsning CE - F 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F731 Exception-Handler Nios-II: orsak till exception ? huvudprogram returadress ”hopp vid anrop” exception ExcHandler OPCODE reg jmp ExcHandler Fast adress Symbolisk adress Vi väljer namn IntHandler TrapHandler ElseHandler 0x800020: Symboliska adresser Vi väljer namn ? ? ? REPRIS
2 April 2015 IS1200 Datorteknik föreläsning CE - F732 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F733 IntHandler: NoInt: TrapHandler: NoTrap:
2 April 2015 IS1200 Datorteknik föreläsning CE - F734 Interrupt or Trap (alternativ 1)... NoInt:# Alternativ 1 pushr8# skydda/låna r8 ldwr24, -4(r29)# kopiera instruktion moviar8, trapcode# kopiera TRAP code cmpeqr24, r8, r24# yes, TRAP popr8# återställ/återlämna r8 bner24, r0, TrapHandler# yes, TRAP 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F735 Interrupt or Trap (alternativ 2)... NoInt:# Alternativ 2 pushr8 # skydda/låna r8 ldwr24, -4(r29)# kopiera instruktion moviar8, trapdum# kopiera TRAP code ldwr8, 0(r8)# till r1 cmpeqr24, r8, r24# yes, TRAP popr8# återställ/återlämna r8 bner24, r0, TrapHandler# yes, TRAP NoTrap:....data# eller i.text.align2# på adress delbar med 4 trapdum:trap# op-code of TRAP
2 April 2015 IS1200 Datorteknik föreläsning CE - F736 Vilken TRAP ”System Call med TRAP” TrapHandler: 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F737 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 loop: main: br loop ”init”
2 April 2015 IS1200 Datorteknik föreläsning CE - F738 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 null Nästan REPRIS
2 April 2015 IS1200 Datorteknik föreläsning CE - F739 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F740 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);
2 April 2015 IS1200 Datorteknik föreläsning CE - F741 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” samt dessutom 1.Initiera IO-enhet, olika för varje IO-enhet 2.Initiera bitar i IENABLE / ctl3 3.Initiera PIE-biten i STATUS / ctl0
Grindar att öppna före avbrott 2 April 2015 IS1200 Datorteknik föreläsning CE - F742 && & Interrupt to CPU PIE-bit in STATUS ctl0 BIT in IENABLE ctl3 BIT in I/O maskreg Interrupt from I/O BIT in IPENDING ctl4 IRQ-bit
2 April 2015 IS1200 Datorteknik föreläsning CE - F 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...)...
2 April 2015 IS1200 Datorteknik föreläsning CE - F744 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F745 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 ?
2 April 2015 IS1200 Datorteknik föreläsning CE - F746 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?
2 April 2015 IS1200 Datorteknik föreläsning CE - F747 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F748 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?)
2 April 2015 IS1200 Datorteknik föreläsning CE - F749 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F750 Bitar 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F751 Ändra bit i ctl-register Read – Modify - Write rRDCTL ri, ctlj# läs/kopiera ctlj till ri rORIri, ri, mask# ettställ med OR rWRCTLctlj,ri # skriv/kopiera ri till ctlj rRDCTL ri, ctlj# läs/kopiera ctlj till ri rANDIri, ri, mask# nollställ med AND rWRCTLctlj,ri # skriv/kopiera ri till ctlj
2 April 2015 IS1200 Datorteknik föreläsning CE - F752 IS1200 Datorteknik Laboration 3 tips om I/O-interrupts
2 April 2015 IS1200 Datorteknik föreläsning CE - F753 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F754 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F755 Laboration 3: Exceptions Bakgrundsprogram zBakgrundsprogram beräknar och skriver ut primtal Main: is prime Main: is prime Main: is prime...
2 April 2015 IS1200 Datorteknik föreläsning CE - F756 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F757 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F758 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F759 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F760 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F761 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:57 T 59:58 T 59:59 T Main: is prime! 00:00 T 00:01 T 00:02 T Main: is prime! 00:03 T 00:04 T 00:05 T 00:06 T Main: is prime! 00:07 T 00:08 T 00:09 T
2 April 2015 IS1200 Datorteknik föreläsning CE - F762 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 D 59:58T U 59:59T Main: is prime! D 00:00T 00:01T 00:02T Main: is prime! 00:03T U 00:04T 00:05T 00:06T Main: is prime! 00:07T 00:08T 00:09T
2 April 2015 IS1200 Datorteknik föreläsning CE - F763 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F764 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F7652 April 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F766 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 D 59:58T U 59:59T Main: is prime! D 00:00T 00:01T 00:02T Main: is prime! 00:03T U 00:04T 00:05T 00:06T Main: is prime! 00:07T 00:08T 00:09T
Laboration Nios2Int Del 1. Program i Nios2-assembler Del 2. Program i C-kod 2 April 2015 IS1200 Datorteknik föreläsning CE - F767
2 April 2015 IS1200 Datorteknik föreläsning CE - F768 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F769 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F770 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 RxRdy (IBF) TxRdy (OBE) RxDATA (RD) uart_10x880-88F TxDATA (WR) uart_0
2 April 2015 IS1200 Datorteknik föreläsning CE - F771 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F772 IRQ-Handler (för KEYS4) letar fram aktuell avbrottskälla KeyHandler: Key0-int: Key1-int: Key3-int: retur Key-0? Key-1? Key-2? Key-3? Key2-int: retur
2 April 2015 IS1200 Datorteknik föreläsning CE - F773 Int from IRQ-02 de2_pio_keys_4 KeyHandler: 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F774 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F775 IRQ-Handler (för Uart0) letar fram aktuell avbrottskälla Uart0Handler: Rx0-int: Tx0-int: retur RxRdy? TxRdy?
2 April 2015 IS1200 Datorteknik föreläsning CE - F776 Int from IRQ-04 Uart0-Handler Uart0Handler: 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...
2 April 2015 IS1200 Datorteknik föreläsning CE - F777 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F778 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F779 Samlad information IRQ-iUnitAddressAcknowledge... IRQ-02KEYS40x840skriv något till 0xC(0x840) IRQ-03TOGGLES180x850skriv något till 0xC(0x850) IRQ-04uart_00x860read/write data IRQ-05uart_10x880read/write data... IRQ-10timer_10x920 skriv något till 0(0x920)...
2 April 2015 IS1200 Datorteknik föreläsning CE - F780 HAL-functions Hardware Abstraction Layer Avsikten med att införa Hardware Abstraction Layer Erbjuda programmeraren möjlighet att använda enkla och lättbegripliga C-funktioner Slippa programmera arbetsamma svårbegripliga hårdvaruberoende åtgärder i assembler
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 2 April 2015 IS1200 Datorteknik föreläsning CE - F781 ”tillåt avbrott med visst index” int alt_irq_enable (alt_u32 id) retval = int_alt_irq_enable(7); ctl3
2 April 2015 IS1200 Datorteknik föreläsning CE - F782 ”förbjud avbrott med visst index” int alt_irq_disable (alt_u32 id) 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
2 April 2015 IS1200 Datorteknik föreläsning CE - F783 Tillåt avbrott med ”högre prioritet” static alt_u32 alt_irq_interruptible (alt_u32 priority) 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)
2 April 2015 IS1200 Datorteknik föreläsning CE - F784 Återställ för avbrott ”som tidigare” void alt_irq_non_interruptible (alt_u32 oldmask) 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
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) 2 April 2015 IS1200 Datorteknik föreläsning CE - F785 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() 2 April 2015 IS1200 Datorteknik föreläsning CE - F786 int alt_irq_non_interruptible (alt_u32 oldmask) ” Återställ tillåtna/förbjudna avbrott enligt tidigare ” int_alt_irq_non_interruptible(oldmask); ctl3
2 April 2015 IS1200 Datorteknik föreläsning CE - F787 HAL-function exempel: alt_irq_register Avbrott på ett visst index (t.ex. 5) ska leda till att rätt interrupthandler (t.ex. för uart1) exekveras då ett avbrott inträffar och accepteras Att koppla ihop ett avbrottsindex med dess interrupthandler Kan kallas för att registrera en interrupthandler till ett index retvalue = alt_irq_register (3 in-parameters) In-parametrar: index och (pekare till) interrupthandler och... (bra beskrivning finns i lab-PM nios2int !)