William Sandqvist william@kth.se Övning 7 Interrupt, Exeption, Trap
William Sandqvist william@kth.se Övning 7 Interrupt, Exeption, Trap
William Sandqvist william@kth.se Digitala komponenter Assemblerprogram C In- och utmatning Avbrott och "trap" Cacheminnen Trådar, synkronisering DC F1 DC F2 CE F1 CE F3 CE F4 CE F5 CE F6 CE F7 CE F8 CE F9 CE F10 CE F2 DC Ö1 DC Ö2 CE Ö4 CE Ö1 CE Ö2 CE Ö3 CE Ö10 CE Ö7 CE Ö8 CE Ö9 CE Ö5 CE Ö6 lab dicom lab nios2time hemlab C lab nios2io lab nios2int hemlab cache hemlab trådar tentamen Datorteknik & komponenter
William Sandqvist william@kth.se Polling och Interrupt Antag att Du sitter i en skön fåtölj och läser en bok. Plötsligt blir Du avbruten av att telefonen ringer, Du markerar med en blyertspenna var i boken Du befann dig och svarar. Under samtalet ringer det på dörrklockan och Du ber den Du talar med i telefonen med att dröja kvar medan Du går till dörren.
William Sandqvist william@kth.se Interrupt När Du är färdig med ärendet vid dörren återupptar Du telefonsamtalet. När Du efter ett tag har talat färdigt i telefonen och avslutat telefonsamtalet kan Du återvända till fåtöljen och fortsätta med att läsa den goda boken - vid blyertsmärket.
William Sandqvist william@kth.se Polling Om inte interrupt funnes vore man tvungen att rusa runt mellan dörren – står någon där? – telefonen – någon där? och soffan.
Det som kallas för polling.
William Sandqvist william@kth.se Interruptmekanismer Global och Local Enable
Vill Du inte bli störd kan Du sätta på dig öronproppar – Du har då omöjliggjort interrupt, disable interrupt.
Tar Du bort öronpropparna har Du åter möjliggjort interrupt, enable interrupt. Detta kallas för Global Enable.
Du har även möjlighet på lokal nivå enabla/disabla inter-rupt, Local Enable. Du kan tex. disabla telefonen genom att dra ur jacket. Då hör Du fortfarande dörrklockan.
William Sandqvist william@kth.se Avbrottssystemet i Nios II Det normala programflödet avbryts.
Tre tänkbara orsaker:
Interrupt, avbrottssignal från enhet utanför processorn
Exeption, felavbrott vid exekvering av instruktion division med 0 (ej med labdatorn) oimplementerad instruktion (ej med labdatorn)
Trap, instruktionen trap, mjukvaruavbrott
William Sandqvist william@kth.se Återhoppsadress vid avbrott Vid avbrott sparar hårdvaran återhoppsadress i R29, EA exeption return adress register..
Register R31 kan innehålla en returadress som det avbrutna programmet behöver. Måste därför sparas.
William Sandqvist william@kth.se
William Sandqvist william@kth.se Trap-instruktion En trap instruktion leder alltid till avbrott. Alla avbrott hanteras av samma hanteringsrutin, som i vårt labsystem ligger på adressen 0x800020. Eftersom alla avbrott hanteras av samma hanteringsrutinen måste den först av allt ta reda på vad som hänt, för att kunna göra rätt åtgärd.
William Sandqvist william@kth.se Interrupt, avbrotts-signal Ett interrupt, en avbrotts-signal, kan inträffa vid vilken instruktion som helst i programmet.
Om hanteringsrutinen upptäcker att det gäller ett interrupt, så måste alla register sparas. Återhoppsadressen är en instruktion för stor, så även detta måste justeras.
William Sandqvist william@kth.se Registeranvändning i avbrottsrutinen Interrupt orsakas av händelser utanför processorn, elektriska signaler
Kan hända när som helst under programkörningen Omöjligt att veta vilka register som är lediga Bara R24 får användas (et, exeption temporary) Andra register måste skyddas, sparas på stacken Använd makron PUSHMOST och POPMOST sparar respektive återställer R1…R15 samt R31 skydda även andra register om Du använder dem
William Sandqvist william@kth.se Vid interrupt! Skyddar Du de register Du använder. Använder Du dessutom subrutin så måste DU skydda alla dessa register!
Makron PUSHMOST POPMOST Skydda!
Om Du använder. Registerhantering vid Interrupt!
William Sandqvist william@kth.se PUSHMOST POPMOST .macro PUSH reg subi sp,sp,4 stw \reg,0(sp).endm .macro POP reg ldw \reg,0(sp) addi sp,sp,4.endm .macro PUSHMOST PUSH r1 # at PUSH r2 . . . PUSH r14 PUSH r15 PUSH r31 # ra.endm .macro POPMOST POP r31 # ra POP r15 . . . POP r3 POP r2 POP r1 # at.endm Observera! Omvänd ordning!
William Sandqvist william@kth.se Exeption, felavbrott I vårt labsystem tar vi inte hand om några felavbrott.
Eftersom Nios-II-processorn är en softprocessor där användaren har möjlighet att skapa upp till 256 egna (oprövade?) instruktioner, så är felavbrott i allmänhet en nödvändig del av avbrotts-hanteringen.
William Sandqvist william@kth.se 16 st Control-register CTL0 status, med bit 0 PIE
CTL1 estatus, med bit 0 EPIE (EPIE är sparad version av PIE)
CTL3 ienable, 32 interrupt enable bits
CTL4 ipending, 32 pending interrupt bits Bara fyra av de 16 kontrollregistren är av intresse för oss. Kontrollregistren läses med instruktionen rdctl ReadControl, och skrives med instruktionen wrctl WriteControl.
William Sandqvist william@kth.se Interrupt-logiken Device Enable, Local Enable, och Global Enable
William Sandqvist william@kth.se 7.1 Avbrottshanteringen Sammanfattning. Hårdvaran gör följande:
Programräknarens värde kopieras till R29 (ea, exeption address register) så programmet kan hitta tillbaka.
STATUS (CTL0) kopieras till ESTATUS (CTL1) så att programmet kan undersöka värdet
STATUS ändras så att PIE = 0, vidare avbrott avstängda
Programräknaren sätts till 0x800020, och programkörningen fortsätter därifrån.
William Sandqvist william@kth.se 7.2 En ”stub” Vid avbrott styrs exekveringen till adressen 0x800020, men där finns inte plats för någon omfattande hanteringsrutin.
Vi måste vidarebefordra anropet från denna adress till en annan adress i vår text-area.
William Sandqvist william@kth.se ”Eftersändning” av avbrottet Vi måste placera följande ”eftersändningskod” på adress 0x800020.
movia et,exc_handler # adress till hanteringsfunktionenjmp et
Observera att ET, exception temporary, R21, är det enda register som får ändras vid avbrott.
Först placerar vi denna kod före main (så att den aldrig körs):
stub: movia et,exc_handlerjmp et
Därefter får main kopiera koden från ”stub” word för word till rätt plats (0x800020).
Comments