Presentation laddar. Vänta.

Presentation laddar. Vänta.

3 August 2015IS1200 Datorteknik föreläsning 71 IS1200 Datorteknik Föreläsning 7 Exceptions Interrupts - Traps.

Liknande presentationer


En presentation över ämnet: "3 August 2015IS1200 Datorteknik föreläsning 71 IS1200 Datorteknik Föreläsning 7 Exceptions Interrupts - Traps."— Presentationens avskrift:

1 3 August 2015IS1200 Datorteknik föreläsning 71 IS1200 Datorteknik Föreläsning 7 Exceptions Interrupts - Traps

2 3 August 2015IS1200 Datorteknik föreläsning 72 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 http://www.ict.kth.se/courses/IS1200 F6Ö5Ö6LAB-2 5 feb...2010

3 3 August 2015IS1200 Datorteknik föreläsning 73 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

4 3 August 2015IS1200 Datorteknik föreläsning 74 Viktiga delar i en dator CPU MEM BUS I/O program data

5 3 August 2015IS1200 Datorteknik föreläsning 75 Programexekvering i två steg, normalfall (decode) EXECUTE FETCH (update PC)

6 3 August 2015IS1200 Datorteknik föreläsning 76 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

7 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 3 August 2015IS1200 Datorteknik föreläsning 77

8 3 August 2015IS1200 Datorteknik föreläsning 78 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”

9 3 August 2015IS1200 Datorteknik föreläsning 79 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

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

11 3 August 2015IS1200 Datorteknik föreläsning 711 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... 0 1 2 3 NN null............

12 3 August 2015IS1200 Datorteknik föreläsning 712 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 ev. fler men de diskuteras ej här)

13 3 August 2015IS1200 Datorteknik föreläsning 713 Nios-II control register 0 status, ctl0 31 2 1 0 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!)

14 Grindar att öppna före avbrott 3 August 2015IS1200 Datorteknik föreläsning 714 && & 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

15 3 August 2015IS1200 Datorteknik föreläsning 715 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)

16 3 August 2015IS1200 Datorteknik föreläsning 716 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)

17 3 August 2015IS1200 Datorteknik föreläsning 717 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

18 3 August 2015IS1200 Datorteknik föreläsning 718 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)

19 3 August 2015IS1200 Datorteknik föreläsning 719 ctl3 ctl4 No Flip-Flops ! Flip-Flops ! Signal Levels ! ctl0 bit 0 EI / DI

20 Grindar att öppna före avbrott 3 August 2015IS1200 Datorteknik föreläsning 720 && & 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

21 3 August 2015IS1200 Datorteknik föreläsning 721 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)

22 3 August 2015IS1200 Datorteknik föreläsning 722 Exceptions Nios-II: Alltid ”hopp” till 0x800020 huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x800020: Fast adress

23 3 August 2015IS1200 Datorteknik föreläsning 723 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 ? ? ?

24 3 August 2015IS1200 Datorteknik föreläsning 724 IntHandler: NoInt: TrapHandler: NoTrap:

25 3 August 2015IS1200 Datorteknik föreläsning 725 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

26 3 August 2015IS1200 Datorteknik föreläsning 726 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

27 3 August 2015IS1200 Datorteknik föreläsning 727 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 16-31 rdctlr24, ctl4# läs ipending andhir24, r24, 0x0001# IRQ-16? !!! bner24, r0, irq16-int# int on IRQ-16...

28 3 August 2015IS1200 Datorteknik föreläsning 728 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 = 0x800020 zParameter (i r4) möjliggör olika SysCall

29 3 August 2015IS1200 Datorteknik föreläsning 729 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

30 3 August 2015IS1200 Datorteknik föreläsning 730 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

31 3 August 2015IS1200 Datorteknik föreläsning 731 IntHandler: NoInt: TrapHandler: NoTrap:

32 3 August 2015IS1200 Datorteknik föreläsning 732 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

33 3 August 2015IS1200 Datorteknik föreläsning 733 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

34 3 August 2015IS1200 Datorteknik föreläsning 734 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

35 3 August 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)35 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”

36 3 August 2015IS1200 Datorteknik föreläsning 736 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 0 1 2 3 31 null Nästan REPRIS

37 3 August 2015IS1200 Datorteknik föreläsning 737 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

38 3 August 2015IS1200 Datorteknik föreläsning 738 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);

39 3 August 2015IS1200 Datorteknik föreläsning 739 Initiera för avbrott flera steg i Nios-II zKopiera ”stubbe” till adress 0x800020 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

40 Grindar att öppna före avbrott 3 August 2015IS1200 Datorteknik föreläsning 740 && & 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

41 3 August 2015IS1200 Datorteknik föreläsning 741 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...)...

42 3 August 2015IS1200 Datorteknik föreläsning 742 Exceptions i Nios-II Interrupt Vector Table ?  Programräknaren får ett nytt värde som anges av hårdvaran till 0x800020  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

43 3 August 2015IS1200 Datorteknik föreläsning 743 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 ?

44 3 August 2015IS1200 Datorteknik föreläsning 744 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?

45 3 August 2015IS1200 Datorteknik föreläsning 745 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

46 Grindar att öppna före avbrott 3 August 2015IS1200 Datorteknik föreläsning 746 && & 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

47 3 August 2015IS1200 Datorteknik föreläsning 747 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?)

48 3 August 2015IS1200 Datorteknik föreläsning 748 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

49 3 August 2015IS1200 Datorteknik föreläsning 749 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

50 3 August 2015IS1200 Datorteknik föreläsning 750 Ä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

51 3 August 2015IS1200 Datorteknik föreläsning 751 IS1200 Datorteknik Laboration 3 Ny/ändrad from våren 2010 tips om I/O-interrupts

52 3 August 2015IS1200 Datorteknik föreläsning 752 Nios-2 Interrupt signals CPU MEM BUS I/O TIMER_1 IRQ10 TOGGLES-18 IRQ3 KEYS-4 IRQ2 IRQ31--00 bus logic I/O Uart_0 IRQ4 I/O Uart_1 IRQ5

53 3 August 2015IS1200 Datorteknik föreläsning 753 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

54 3 August 2015IS1200 Datorteknik föreläsning 754 Laboration 3: Exceptions Bakgrundsprogram zBakgrundsprogram beräknar och skriver ut primtal Main: 471137 is prime Main: 471139 is prime Main: 471161 is prime...

55 3 August 2015IS1200 Datorteknik föreläsning 755 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: 471137 is prime 00:00 00:01 00:02 Main: 471139 is prime 00:03 00:04 00:05 00:06 Main: 471161 is prime 00:07 00:08 00:09

56 3 August 2015IS1200 Datorteknik föreläsning 756 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

57 3 August 2015IS1200 Datorteknik föreläsning 757 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

58 3 August 2015IS1200 Datorteknik föreläsning 758 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

59 3 August 2015IS1200 Datorteknik föreläsning 759 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: 471137 is prime ! 00:00 00:01 00:02 Main: 471139 is prime ! 00:03 00:04 00:05 00:06 Main: 471161 is prime ! 00:07 00:08 00:09

60 3 August 2015IS1200 Datorteknik föreläsning 760 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: 471137 is prime! 00:00 T 00:01 T 00:02 T Main: 471139 is prime! 00:03 T 00:04 T 00:05 T 00:06 T Main: 471161 is prime! 00:07 T 00:08 T 00:09 T

61 3 August 2015IS1200 Datorteknik föreläsning 761 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: 471137 is prime! D 00:00T 00:01T 00:02T Main: 471139 is prime! 00:03T U 00:04T 00:05T 00:06T Main: 471161 is prime! 00:07T 00:08T 00:09T

62 3 August 2015IS1200 Datorteknik föreläsning 762 de2_pio_keys4 Memory Mapped Addresses 0x840 0x844 0x848 0x84C 31 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 KEY3 KEY2 KEY1 KEY0 Delar av Lab-kortet Direction Register Interrupt Mask Register Edge Capture Register - ECR Data Register

63 3 August 2015IS1200 Datorteknik föreläsning 763 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

64 3 August 2015IS1200 Datorteknik föreläsning 7643 August 201564 de2_pio_toggles18 Memory Mapped Addresses 0x850 0x854 0x858 0x85C 31 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SW3 SW2 SW1 SW0 Delar av Lab-kortet SW14 SW15 SW16 SW17 Direction Register Interrupt Mask Register Edge Capture Register - ECR Data Register

65 3 August 2015IS1200 Datorteknik föreläsning 765 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: 471137 is prime! D 00:00T 00:01T 00:02T Main: 471139 is prime! 00:03T U 00:04T 00:05T 00:06T Main: 471161 is prime! 00:07T 00:08T 00:09T

66 3 August 2015IS1200 Datorteknik föreläsning 766 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)

67 3 August 2015IS1200 Datorteknik föreläsning 767 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

68 3 August 2015IS1200 Datorteknik föreläsning 768 Nios uart_0 Memory Mapped Addresses 0x860 0x864 0x868 RxRdy (IBF) TxRdy (OBE) RxDATA (RD) uart_10x880-88F 31 16 15 8 7 6 0 TxDATA (WR) uart_0

69 3 August 2015IS1200 Datorteknik föreläsning 769 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) 31 16 15 8 7 6 0 TxDATA (WR) uart_0: IRQ at index 4 Enable interrupt for RxRdy - IRxRdy Enable interrupt for TxRdy - ITxRdy

70 3 August 2015IS1200 Datorteknik föreläsning 770 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

71 3 August 2015IS1200 Datorteknik föreläsning 771 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)

72 3 August 2015IS1200 Datorteknik föreläsning 772 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

73 3 August 2015IS1200 Datorteknik föreläsning 773 IRQ-Handler (för KEYS4) letar fram aktuell avbrottskälla Uart0Handler: Rx0-int: Tx0-int: retur RxRdy? TxRdy?

74 3 August 2015IS1200 Datorteknik föreläsning 774 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...

75 3 August 2015IS1200 Datorteknik föreläsning 775 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

76 3 August 2015IS1200 Datorteknik föreläsning 776 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

77 3 August 2015IS1200 Datorteknik föreläsning 777 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)...

78 3 August 2015IS1200 Datorteknik föreläsning 778 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)

79 3 August 2015IS1200 Datorteknik föreläsning 779 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)

80 3 August 2015IS1200 Datorteknik föreläsning 780 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

81 3 August 2015IS1200 Datorteknik föreläsning 781 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 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 retval = int_alt_irq_disable(7); 31 16 15 8 7 6 0 ctl3

82 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 3 August 2015IS1200 Datorteknik föreläsning 782 int alt_irq_enable(alt_u32 id) ”tillåt avbrott med visst index” 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 retval = int_alt_irq_enable(7); 31 16 15 8 7 6 0 ctl3

83 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) 3 August 2015IS1200 Datorteknik föreläsning 783 int alt_irq_interruptible(alt_u32 id) ” Tillåt endast avbrott med högre prioritet” 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 oldmask = int_alt_irq_interruptible(7); 31 16 15 8 7 6 0 ctl3

84 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() 3 August 2015IS1200 Datorteknik föreläsning 784 int alt_irq_non_interruptible(alt_u32 oldmask) ” Återställ tillåtna/förbjudna avbrott enligt tidigare ” 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 int_alt_irq_non_interruptible(oldmask); 31 16 15 8 7 6 0 ctl3


Ladda ner ppt "3 August 2015IS1200 Datorteknik föreläsning 71 IS1200 Datorteknik Föreläsning 7 Exceptions Interrupts - Traps."

Liknande presentationer


Google-annonser