ors 2. kolokvij

1

Upload: andraz-oberstar

Post on 27-Oct-2014

302 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: ORS 2. kolokvij

Napišite PSP za ARM, ki ciklično kliče šri podprograme (SUB0, SUB1, SUB2, SUB3). Ko se PSP sproži prvič, naj pokliče SUB0, ko se sproži deugič SUB1, itd. Po klicu SUB3 naj se zopet pokliče SUB0. 32-bitni naslovi podpro-gramov so shranjeni v tabeli PTASKS. Upoštevajte, da se sklad širi pro višjim naslovom, kazalec na sklad pa kaže na prvi prazen prostor na skladu. PSP se preko AIC proži zaradi CPCS časovnika TC0.

#Napisite podprogram INIT_TC0_PSP, kjer nastavite TC0 tako,#da bo CPCS predstavljal prekinitveno zahtevo. INIT_TC0_PSP: stmfd sp!, {r0,r1,lr} @shrani registre na sklad ldr r0, =PMC_BASE @v r0 je bazni naslov PMC (power management controller) mov r1, #1 << 17 @da omogocimo stevec, moramo bit 17 v PMC_PCER nastavi na 1 str r1, [r0, #PMC_PCER] @stevcu omogoci urin signal z vpisom na ustrezno mesto v PMC_PCER str r1, [r0, #PMC_PCER] @stevcu omogoci urin signal z vpisom na ustrezno mesto v PMC_PCER ldr r0, =TC0_BASE @v r0 nalozi bazni naslov za stevec TC0 ldr r1, =0xC003 @WAVE = 1, WAVESEL = 10, TCCLKS = 011 str r1, [r0, #TC_CMR] @WAVE = 1: wave form generang mode, WAVESEL = 10: count from 0 do RC, then reset @TCCLKS = 011: TIMER_CLOCK4 (MCK/128 = 375000Hz) ldr r1, =375 @375000 Hz / 1000 (1ms) = 375 (1ms je na vsakih 375 ciklov) str r1, [r0, #TC_RC] @Zapisi ustrezno mejo v RC str r1, [r0, #TC_RC] @Zapisi ustrezno mejo v RC mov r1, #5 @b0 (CLKEN) -> 1: omogoci uro, b2 (SWTRG) -> 1: SW trigger is performed, str r1, [r0, #TC_CCR] @the counter is reset and the clock is started mov r1, #1 << 4 @TC_IER - TC0 Interrupt Enable Register; bit4 (CPCS): str r1, [r0, #TC_IER] @enables the RC Compare Interrupt (mer bo prozil prekinitve) ldmfd sp!, {r0,r1,pc} @obnovi registre s sklada in se vrni nazaj

PSP:sub r14, r14, #4stmfd r13!, {r0–r2,r14}/* PSP */ldr r0, =AIC_BASEstr r0, [r0, #AIC_EOICR] /* slepo */ldmfd r13!, {r0 –r2, pc}̂ldmfd r13!, {r0 –r2, pc}̂

Prekinitve (za prek. vektor) ponavadi vežemo v OR vrata Q# iz JK in A2.Da je zahteva prisotna dokler proc. ne potrdi, na INTR vežemo JK in na K vežemo M/IO, D/C, W/R, ADS.Tvorjenje A0, A1 – za 8 bit: BE3#-BE0# (1 v L) = 1 0 1 1: A1, A0 = 1 0... 16bit: 1 1 0 0 = 0 0, 0 0 1 1 = 1 0Ponavadi vežemo Q# iz JK na RDY# in na CS#. Uporabljaj JK celice in tvori RDY#! CLOCK!Če je potrebno priklopit napravo ki ima 8-bit registre potem vklopi BS8# in upoštevaj BEx# (linijski odd-ajniki).Linijski oddajnik ima vhode A0-A3, E# in DIR in izhode B0-B3.PAZI:!X! poveži RDY# na Q# !X! poveži CLK !X! poveži A2 z Q# v OR vrata pri prekinitveno prevzemnem ciklu!X! prekinitvena zahteva naj bo prisotna dokler je procesor ne potrdi!X! pomisli če rabiš BS8# ali BS16#, in signale BE0#-BE3#, A0 in A1 ne obstaja! !X! JK celice!X! linijski oddajnik ima 4! vhode in E# vhod (ali 8 in E1# E2#)

RAM: (ponavadi merimo v u.p.)tCL / CAS latenca / CL: čas po CAS ko se pojavi podatek, upoštevamo samo 1x na vrscotRCD / RAS to CAS delay: čas od RAS do zapisa v register vrsce (pred CAS!). Pri prvem dostopu do vrsce je čas dostopa tCL + tRCDtRP: čas za zapiranje vrsce ; tRAS: min. čas med odpiranjem in zapirantRP: čas za zapiranje vrsce ; tRAS: min. čas med odpiranjem in zapiran-jem ; tRC: med 2 odpiranji-- čas prenosa (vse v u.p.!) = tRCD+tCL+N

IRQ HAND:_start:/* izberi irq način */ mrs r0, cpsr bic r0, r0, #0x1F /* pobriši zastavice načina delovanja */ orr r0, r0, #0x12 /* nastavi irq način */ msr cpsr, r0 msr cpsr, r0 /* nastavi irq kazalec na sklad */ ldr sp,_Lirqstack_end/* izberi uporabniški način način */ mrs r0, cpsr bic r0, r0, #0x1F /* pobriši zastavice načina delovanja */ orr r0, r0, #0x10 /* nastavi uporabniški način */ msr cpsr, r0 msr cpsr, r0 /* nastavi uporabniški kazalec na sklad */ ldr sp,_Lstack_end

SCC2692 na 80486. UART ima 4 naslovne signale - 16 8-bitnih registrov.Registri od FF00 do FF0F. Izhod INTR poveži, da bo UART prožil prekinitve.Ob PPC pošlje številko prekinitvenega vektorja 10.

Pri pomnilniških dostopih, ki jih v 5 U.P ne potrdi nobena naprava, sproži prekinitev. Prekinitvena zahteva prisotna dokler procesor prekinitve ne potrdi(flip flop). Števec, Q0,Q1,Q2, če je EN v visokem stanju

PSP ob konju branja bloka podatkov DMA. Pogleda stanje Buff_Head. Če ni 0, nastavi naslednji DMA prenos v Buff2, če nič pa Buff 1. Buf Head popravi, da se ob naslednji prekinitvi vpišejo podatki v drugo polje.B) Omogoči FIQ in IRQ prekinitve.