Presentation laddar. Vänta.

Presentation laddar. Vänta.

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.

Liknande presentationer


En presentation över ämnet: "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."— Presentationens avskrift:

1 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

2 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 http://www.ict.kth.se/courses/IS1200 Våren 2009 Period 3 F6Ö5Ö6LAB-2 Våren 2009 Period 4 F4

3 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

4 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

5 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)

6 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

7 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)

8 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

9 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

10 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... 0 1 2 3 NN null............

11 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)

12 23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)12 Nios-II Statusregister 0 status, ctl0 31 2 1 0 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!)

13 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)

14 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

15 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

16 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”

17 23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)17 Nios-II Statusregister 1 estatus, ctl1 31 2 1 0 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)

18 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 0x800020 (Remark: return address must be decremented by 4 before executing eret in interrupt handler but not in trap handler)

19 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

20 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)

21 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

22 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 23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)23 Exceptions NiosII: Alltid ”hopp” till 0x800020 huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x800020: Fast adress

24 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:

25 23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)25

26 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

27 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

28 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

29 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 = 0x800020  Parameter (i r4) möjliggör olika SysCall

30 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

31 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

32 23 August 2014 IS1200 Datorteknik vt2009 föreläsning 7, (E och I m.fl.)32 REPRIS

33 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

34 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

35 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...

36 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

37 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... 0 1 2 3 31 null REPRIS

38 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);

39 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 0x800020 2.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

40 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...

41 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 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

42 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 ?

43 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?)

44 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

45 23 August 201423 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

46 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 IRQ31--00 bus logic I/O Uart_0 IRQ4

47 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

48 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.... 2. Point-And-Tick (utökat med tidsutskrift)......59:59.......00:00.......00:01.... 3. Trapping the Dash (utökat med trap i main) ------59:59------00:00-----00:01---- 4. Interrupting the Line (trap i intHandler) ------ 59:59------ 00:00---

49 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)

50 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

51 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

52 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

53 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

54 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

55 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

56 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

57 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 31 16 15 8 7 6 0 TxDATA (WR) uart_0

58 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) 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

59 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

60 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

61 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)

62 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

63 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

64 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

65 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...

66 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

67 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...

68 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 !

69 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

70 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

71 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)...

72 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)

73 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)

74 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

75 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)

76 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()

77 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()

78 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

79 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

80 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

81 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

82 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”

83 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”

84 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

85 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)

86 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

87 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

88 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

89 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

90 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

91 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

92 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

93 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

94 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

95 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

96 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

97 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


Ladda ner ppt "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."

Liknande presentationer


Google-annonser