Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avCarina Olofsson
1
12 October 2015 IS1200 Datorteknik föreläsning CE - F71 IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps
2
IS1200 Datorteknik http://www.ict.kth.se/courses/IS1200 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 12 October 20152 IS1200 Datorteknik föreläsning CE - F7
3
12 October 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
4
12 October 2015 IS1200 Datorteknik föreläsning CE - F74 Viktiga delar i en dator CPU MEM BUS I/O program data
5
12 October 2015 IS1200 Datorteknik föreläsning CE - F75 Programexekvering i två steg, normalfall (decode) EXECUTE FETCH (update PC)
6
12 October 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
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 12 October 2015 IS1200 Datorteknik föreläsning CE - F77
8
12 October 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” Åtgärda Kvittera
9
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 12 October 2015 IS1200 Datorteknik föreläsning CE - F79
10
12 October 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 ERET -instruktion intruction ”hopp vid retur” Åtgärda Kvittera
11
12 October 2015 IS1200 Datorteknik föreläsning CE - F711 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
12
12 October 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)
13
12 October 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... 0 1 2 3 NN null............
14
12 October 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) 5.... (det finns ev. fler men de diskuteras ej här)
15
12 October 2015 IS1200 Datorteknik föreläsning CE - F715 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!)
16
Grindar att öppna före avbrott 12 October 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
17
12 October 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)
18
12 October 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 WRCTLctli, 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)
19
12 October 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
20
12 October 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 mask-bit vars värde 0 förbjuder avbrott (disable) värde 1 tillåter avbrott (enable) Se figur 3-1 i manualen (October 2007)
21
12 October 2015 IS1200 Datorteknik föreläsning CE - F721 ctl3 ctl4 No Flip-Flops ! Flip-Flops ! Signal Levels ! ctl0 bit 0 EI / DI
22
Grindar att öppna före avbrott 12 October 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
23
12 October 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)
24
12 October 2015 IS1200 Datorteknik föreläsning CE - F724 Exceptions Nios-II: Alltid ”hopp” till 0x800020 huvudprogram returadress ”hopp vid anrop” exception instruction jmp ExcHandler 0x800020: Fast adress
25
12 October 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 ? ? ?
26
12 October 2015 IS1200 Datorteknik föreläsning CE - F726 IntHandler: NoInt: TrapHandler: NoTrap:
27
12 October 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
28
12 October 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
29
12 October 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 16-31 rdctlr24, ctl4# läs ipending andhir24, r24, 0x0001# IRQ-16? !!! bner24, r0, irq16-int# int on IRQ-16...
30
12 October 2015 IS1200 Datorteknik föreläsning CE - F730 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
31
12 October 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
32
12 October 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
33
12 October 2015 IS1200 Datorteknik föreläsning CE - F733 IntHandler: NoInt: TrapHandler: NoTrap:
34
12 October 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
35
12 October 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
36
12 October 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
37
12 October 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”
38
12 October 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 0 1 2 3 31 null Nästan REPRIS
39
12 October 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
40
12 October 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);
41
12 October 2015 IS1200 Datorteknik föreläsning CE - F741 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
42
Grindar att öppna före avbrott 12 October 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 1. 2. 3.
43
12 October 2015 IS1200 Datorteknik föreläsning CE - F743 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...)...
44
12 October 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 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
45
12 October 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 ?
46
12 October 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?
47
12 October 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
48
12 October 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?)
49
12 October 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
50
12 October 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 rWRCTLctlj,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
51
12 October 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
52
12 October 2015 IS1200 Datorteknik föreläsning CE - F752 IS1200 Datorteknik Laboration 3 tips om I/O-interrupts
53
12 October 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 IRQ31--00 bus logic I/O Uart_0 IRQ4 I/O Uart_1 IRQ5
54
12 October 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
55
12 October 2015 IS1200 Datorteknik föreläsning CE - F755 Laboration 3: Exceptions Bakgrundsprogram zBakgrundsprogram beräknar och skriver ut primtal Main: 471137 is prime Main: 471139 is prime Main: 471161 is prime...
56
12 October 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: 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
57
12 October 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
58
12 October 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
59
12 October 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
60
12 October 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: 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
61
12 October 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: 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
62
12 October 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: 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
63
12 October 2015 IS1200 Datorteknik föreläsning CE - F763 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
64
12 October 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
65
12 October 2015 IS1200 Datorteknik föreläsning CE - F76512 October 201565 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
66
12 October 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: 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
67
Laboration Nios2Int Del 1. Program i Nios2-assembler därefter följer Del 2. Program i C-kod 12 October 2015 IS1200 Datorteknik föreläsning CE - F767
68
12 October 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___SsU__ HA7: Nested Interrupts (interrupt in interrupthandler) ___SDdUs_____SDdsU__59:59___SSSsss__ LA8: Surprice Assignement (surprice)
69
12 October 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
70
12 October 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 31 16 15 8 7 6 0 TxDATA (WR) uart_0
71
12 October 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) 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
72
12 October 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
73
12 October 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)
74
12 October 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
75
12 October 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?
76
12 October 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...
77
12 October 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, 0b10# avbrott här wrctl ctl0, 8 popr8.endm
78
12 October 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
79
12 October 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)...
80
12 October 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
81
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 12 October 2015 IS1200 Datorteknik föreläsning CE - F781 ”tillåt avbrott med visst index” int alt_irq_enable (alt_u32 id) 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
82
12 October 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 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
83
12 October 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)
84
12 October 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
85
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) 12 October 2015 IS1200 Datorteknik föreläsning CE - F785 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
86
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() 12 October 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 ” 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
87
12 October 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 !)
88
Förbättringar / Till-ägg zFigur med anrop av alt_irq_register zSamt parametrar till avbrotts-function i C zAssemblerkod för Enable/Disable bit i ctrl3 12 October 2015 IS1200 Datorteknik föreläsning CE - F788
89
int_alt_irq_enable: movir9, 1# en etta i LSB sllr9, r9, r4# skifta vänster enligt r4 rdctlr8, ienable# läs från ctl3 till r8 orr8, r8, r9# ettställ utpekad bit wrctlienable, r8# skriv tillbaks modifierat värde ret# returhopp 12 October 2015 IS1200 Datorteknik föreläsning CE - F789 ”tillåt avbrott med visst index” int alt_irq_enable (alt_u32 id)
90
12 October 2015 IS1200 Datorteknik föreläsning CE - F790 ”förbjud avbrott med visst index” int alt_irq_disable (alt_u32 id) int_alt_irq_disable: movir9, 1# en etta i LSB sllr9, r9, r4# skifta vänster enligt r4 xorr9, r9, r9# invertera alla 32 bitar rdctlr8, ienable# läs från ctl3 till r8 andr8, r8, r9# nollställ utpekad bit wrctlienable, r8# skriv tillbaks modifierat värde ret# returhopp
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.