420 likes | 543 Views
Realni čas. V vsakem vgradnem mikrokrmilniškem sistemu je čas pomembna spremenljivka. Delovanje sistemov v odvisnosti od ‘realnega’ časa pa je v nekaterih primerih bistvenega pomena. Tem sistemom pravimo sistemi realnega časa (angl. Real-Time Systems) ali tudi časovno kritični sistemi.
E N D
Realni čas • V vsakem vgradnem mikrokrmilniškem sistemu je čas pomembna spremenljivka. • Delovanje sistemov v odvisnosti od ‘realnega’ časa pa je v nekaterih primerih bistvenega pomena. • Tem sistemom pravimo sistemi realnega časa (angl. Real-Time Systems) ali tudi časovno kritični sistemi. • Od sistemov realnega časa se pričakuje, da bodo delovali pravilno v vsakih okoliščinah in v skladu z vnaprej predpisanimi časovnimi zahtevami (omejitvami). • ‘Vnaprej’ pomeni, da mora biti delovanje sistema realnega časa predvidljivo: določena aktivnost se mora izvršiti v predpisanem časovnem intervalu (niti ne prej niti ne pozneje).
Realni čas • Dva tipa sistemov realnega časa: • sistemi s trdimi omejitvami (Angl. Hard Real-Time Systems) (časovne zahteve morajo biti vedno upoštevne). • sistemi z mehkimi omejitvami (angl. Soft Real Time Systems) (časovne zahteve so lahko občasno kršene). • Sistem realnega časa ni nujno zelo hiter, mora pa biti dovolj hiter, predvsem pomembna pa je njegova odzivnost. • Tipična področja uporabe: • vodenje in nador procesov • proizvodni sistemi • komunikacijski sistemi • prometni (transportni) sistemi • interaktivni sistemi, uporabniški vmesniki • ....
Realni čas • Nekaj zahtev v (mikrokrmilniških) sistemih realnega časa: • Sočasno izvrševanje več opravil (večopravilnost). • Prioritetno obravnavanje - razvrščanje opravil. • ‘Predopravilnost’ – izvršitev (prioritetnega) opravila tudi na račun prekinitve opravila, ki je (že) v teku. • Izvrševanje opravil v odvisnosti od časa (časovniki). • Asinhrono odzivanje sistema na zunanje vzroke – dogodkovno vodeno delovanje, potreben je učinovit prekinitveni sistem. • Sinhronizacija opravil, komunikacija med opravili. • Primerno ‘fina’ delitev časa (čas je namreč diskreten). • To se doseže s primerno strojno in programsko opremo.
HCS12 in realni čas • Prioritetni vektorski sistem prekinitev - asinhrono obravnavanje zunanjih (spontanih) dogodkov. • Časovniki (angl. Timer(s)): • Časovni modul ECT (Angl. Enhanced Capture Timer): • časovno odvisno, periodično, izvajanje opravil, tudi kasnitve • beleženje časovnih trenutkov, štetje dogodkov • generiranje signalov s primernim časovnim potekom • Modul CRG (angl. Clock and Reset Generator): • Časovnik RTI (Angl. Real Time Interrupt): periodično (z nastavljivo periodo) izvajanje opravil - postavlja znak, da se je čas (časovnik) iztekel • Časovni paznik COP (angl. Computer Operating Properly): preverjanje pravilnosti delovanja mikrokrmilnika v odvisnosti od časa.
HCS12 – ECT (PIM) • Modul ECT: Enhanced Capture Timer. • Precej kompleksno vezje - o tem bomo govorili kasneje
HCS12 – CRG (RTI) • Časovnik RTI (ime oz. oznaka sta pravzaprav zavajajoča), uporaba: - periodično proženje opravil - enostaven način za izvedbo zakasnitev. • Pozor: RTI ni RTC (angl. Real-Time Clock): • RTC je namreč vezje, ki daje koledarski čas.
CRG (registri RTI) • CRG začetni naslov: $34 • CRGFLG: RTIF (zastavica): časovnik se je iztekel, brišemo jo z vpisom 1 v ta bit. • CRGINT: RTIE - omogočimo prekinitev, prekinitveni vektor: $FFF0/FFF1 • RTICTL: nastavitev periode proženja časovnika
CRG (pa še RTI vektor) RTI vektor: $FFF0, $FFF1
Registri RTI - RTICTL • register RTICTL – nastavitev periode proženja prekinitve Delilnik Odštevalnik • Z vsebino tega registra izberemo periodo proženja: perioda proženja = (osnovna frekvenca, vsebina registra)
Registri RTI - RTICTL • register RTICTL – pomen skupin bitov 210 blokiran 210 211 212 213 214 215 216
HCS12 – RTI - register RTICTL • OSCCLK se najprej deli s 1024 • Ta se naprej deli z vsebino RTICTL • Na primer za OSCCLK = 8 MHz • RTR[6:4]=100 -> 213 • RTR[3:0]=0000 • RTR[01000000]-> 1,024 ms • časovnik se lahko kadarkoli (ponovno) resetira z vpisom v ta register.
HCS12 – RTI primer ; Primer: proženje na vsakih 8,192 ms, osnovna frekvenca je 8 MHz. ; Delitelj = 8,192 [ms] x 8000 [kHz] = 65536 -> 216 RtiVek equ $fff0 ;vektor prekinitve RTI CRGbase equ $34 ;zacetni naslov modula CRG CRGFLG equ CRGbase+3 CRGINT equ CRGbase+4 RTICTL equ CRGbase+7 Perioda equ %01110000 RtiIntE equ %10000000 ;zastavica in RTIE ; --- osnovne zacetne nastavitve ldaa #Perioda staa RTICTL ;nastavitev periode bset CRGINT,RtiIntE ;omogocimo prekinitve bset CRGFLG,RtiIntE ;brisemo morebitno zastavico ; --- karkoli je ze potrebno bra * ;neskoncna zanka
HCS12 – RTI primer ;----------------------------------------------------------- ; Prekinitveni streznik RTI ; IsrRTI: bset CRGFLG,RtiIntE ;brisemo zastavico ;--- Karkoli je se potrebno rti ; ; Prekinitveni vektor (RTI) org RtiVek fdb IsrRTI
HCS12 – CRG (COP) • Časovni paznik - COP: časovni nadzor sistema • časovniku izberemo primeren (osnovni) takt odštevanja (časovnik nastavimo na začetno vrednost) • če se časovnik izteče, povzroči ponovni zagon (reset) • da se to ne zgodi, ga prej vrnemo na začetno vrednost • Uporaba: • na ‘kritičnih točkah’ v programu predvidimo ponovno nastavitev časovnega paznika • dokler se program pravilno izvršuje, bo časovni paznik vedno pravočasno ponovno nastavljen • do začetne (ponovne) vzpostavitve sistema zato praviloma ne pride
CRG (registri COP) • Tu nastavimo interval, v katerem se paznik izteče. • Časovnik pa resetiramo z vpisom $55 in $AA v register ARMCOP
CRG (pa še COP vektor) • Če se časovnik izteče, se postavi signal Reset, nakar pride do prevzema COP vektorja.
HCS12 – ECT (ponovno) Prestrezni in/ali primerjalni ‘kanali’ časovnika. Poleg določanja časovnih intervalov, zajemamo in postavljamo tudi zunanje signale v odvisnosti od časa. Časovnik ETC
HCS12 – ECT (blokovna shema) Preddelilnik Časovni števec V/i signali: - prestrezni - primerjalni Kontrolni in statusni registri Prestrezni in primerjalni registri Pulzna akumulatorja
HCS12 - ECT na hitro • Veliko možnosti pri izbiri osnovnega takta (preddelilnik, števnik), s tem se doseže velik časovni razpon in/ali primerna časovna ločljivost. • Do 8 ‘prestreznih’ vhodnih kanalov, skupaj z do osmimi 16-bitnimi ‘prestreznimi’ registri. • Do 8 primerjalnih izhodnih kanalov, skupaj z do osmimi 16-bitnimi ‘primerjalnimi’ registri. • Štiri 8 bitne ali dva 16 bitna pulzna akumulatorja. • Veliko načinov delovanja: poleg osnovnih funkcij (to je prestrezanja in generiranja signalov), daje veliko dodatih (specifičnih) možnosti predvsem kanal 7.
HCS12 – ECT • ECT blok (modul): Enhanced Capture Timer. • Prosto tekoči števec (angl. Free Running Counter): to je 16 bitni števni register, ki krožno teče z osnovnim taktom časovnika. • Vhodno prestrezanje (angl. Input Capture): ob pojavu (aktivnem prehodu) signala na eni od prestreznih sponk se v prestrezni register prepiše vrednost števnega registra - zabeleži se časovni trenutek. • Izhodno primerjanje (angl. Output Compare): ko se vrednost števnega registra izenači s prednastavljeno vrednostjo primerjalnega registra, časovnik (na eni od sponk – ’kanalu’) postavi ustrezen izhodni signal. • Štetje dogodkov: pulzni akumulator (angl. Pulse Accumulator).
Registri ECT (1/3) • ECT začetni naslov: $0040 Kontrolni / statusni registri
Registri ECT (2/3) Primerjalni / prestrezni registri
Registri ECT (3/3) Pulzni akumulator, ....
ECT - izbira takta bit v registruTSCR1 Notranji takt (tak vodila) biti v registruTSCR2 Zunanji takt na kanalu 7 to se nanaša na registre pulznih akumulatorjev
ECT - izhodno primerjanje (4) in pride do prekinitve, če jo omogoča (TIE) Prikaz delovanja za n-ti (n=0,1,...,7) kanal (3) se postavi zastavica (TFLG1) (1) Ko se časovni števec (TCNT) izenači s primerjalnim registrom (TCn) (2) Če je izbran primerjali način (TIOS) (5) izhod pa se odzove, kot določa TCTL1/TCTL2
ECT - vhodno prestrezanje (4) in pride do prekinitve, če jo omogoča (TIE) Prikaz delovanja za n-ti (n=0,1,...,7) kanal (3) se postavi zastavica (TFLG1) (5) Časovni števec (TCNT) se prepiše v prestrezni registrer (TCn) (2) Če je izbran prestrezni način (TIOS) (1) če je na vhodu aktivna sprememba kot jo določata TCTL3/TCTL4
ECT - osnove uporabe • Delo s časovniki je spričo številnih možnosti precej zahtevno. • Izberemo vir/frekvenco osnovnega takta, • register TSCR2. • Določimo prestrezne vhode in/ali primerjalne izhode, • register TIOS. • Določimo aktivne prehode na prestreznih vhodih in/ali • stanje na primerjalnih izhodih, TCTL1/2/3/4. • Po potrebi – pravzaprav tipično, omogočimo prekinitve, • register TIE. • (Ne smemo pozabiti omogočiti delovanje • celotnega časovnega modula) TSCR1.
ECT – register TIOS Določimo, kateri kanali bodo prestrezni in kateri primerjalni register TIOS: IOS_i = 1, primerjalni izhod IOS_i = 0, prestrezni vhod
ECT – register TSCR1 Omogočimo/onemogočimo (ustavimo) delovanje časovnika: Kontrolni register časovnega modula: TSCR1, TEN = 1.
ECT – register TSCR2 Izberemo preddelilno razmerje: Kontrolni register časovnega modula: TSCR2 Omogoči zahtevo za prekinitev preplavitve časovnega števca Izbere preddelilno razmerje. Register zastavice preplavitve časovnega števca: TFL2
ECT – registra TCTL1/TCTL2 Določimo delovanje izhodnih kanalov: Kontrolni register časovnika: TCTL1/TCTL2 izhod odklopljen, sprememba izhoda, izhod nizek ali visok.
ECT – registra TCTL3/TCTL4 Določimo delovanje vhodnih kanalov: Kontrolni register časovnika: TCTL3/TCTL4 vhod odklopljen, aktivna spremba gor ali dol ali obe.
ECT – registra TIE,TFLG1 Omogoči zahtevo za prekinitev ustreznega kanala: Register prekinitvenih mask: TIE Obravnavamo dogodke časovnika Preverjamo zastavice ustreznih kanalov in/ali prekinitev: Register prekinitvenih zastavic: TFLG1 Zastavica ustreznega kanala se briše z vpisom enice !
ECT – ogrodje programa TIOS equ ECTBase ;IC ali OC (ECTBase = $0040) TCNT equ ECTBase+$04 ;časovni števec TIE equ ECTBase+0c ;omogočimo prekinitve TCTL2 equ ECTBase+09 ;obnašanje izhodov TSCR1 equ ECTBase+$06 ;kontr.r. modula, TE TSCR2 equ ECTBase+$0d ;kontr.r. modula, preddelilnik TFLG1 equ ECTBase+$0e ;zastavice TC0 equ ECTBase+10 ;OC register kanala 0 movb #$80,TSCR1 ;omogočimo časovnik movb #$01,TIOS ;Kanal 0 naj bo OC movb #$01,TCTL2 ;spreminjanje izhoda movb #$01,TIE ;omogočimo prekinitev kanala 0 ldd #Perioda std TC0 movb #$01,TFLG1 ;brišemo zastavico cli bra *
ECT – primer programa 1 ;**************************************************************** ;* GSPV 2005/06 ;* Primer (izhodnega) primerjalnega delovanja casovnika ECT ;* Za izhodno primerjanje uporabimo kanal 0 (register TC0) ;* Frekvenca na vodilu: 24 MHz ;* Casovni interval med prekinitvami: 0.25 s ; ; --- vstopna tocka ABSENTRY Start ;absolutni program ; ; --- nekaj splosnih definicij, kje je ram, rom, sklad,.. ; 0000 1000 Ram EQU $1000 ;tu naj bo pomnilnik RAM 0000 0400 RamSize EQU $400 ;naj bo 1K RAM-a 0000 1400 RamEnd EQU Ram+RamSize 0000 2000 Program EQU $2000 ;tu naj bo program 0000 0100 SkladSize EQU $100 0000 FFEE ECTVek EQU $FFEE ;vektor prekinitve it ECT, kanal 0
ECT – primer programa 2/7 ; ; --- definicije naslovov registrov RTI ; 0000 0040 ECTbase equ $0040 0000 0040 TIOS equ ECTbase+$00;izbira prestreznega ali primerjalnega nacina 0000 0044 TCTN equ ECTbase+$04 ;casovni stevec H,L 0000 0046 TSCR1 equ ECTbase+$06 ;sistemski kontrolni regsiter 0000 0048 TCTL1 equ ECTbase+$08 ;kontrolni registri 1,2,3,4 0000 0049 TCTL2 equ ECTbase+$09 0000 004A TCTL3 equ ECTbase+$0a 0000 004B TCTL4 equ ECTbase+$0b 0000 004C TIE equ ECTbase+$0c ;omogocanje prekinitev 0000 004D TSCR2 equ ECTbase+$0d ;sistemski kontrolni register 0000 004E TFLG1 equ ECTbase+$0e ;registra zastavic 1,2 0000 004F TFLG2 equ ECTbase+$0f 0000 0050 TC0 equ ECTbase+$10 ;prestrezni/primerjalni register kanala 0 0000 0001 IOS0 equ %00000001 ;primerjanje na kanalu TC0 0000 0001 C0I equ %00000001 ;omogocimo prekinitev kanala TC0 0000 0001 C0F equ %00000001;maska za brisanje zastavice TC0
ECT – primer programa 3/7 ; ---- bus clock = 24 MHz 0000 0007 Delilnik equ %00000111;delimo osnovni takt z 128 0000 B71B Interval equ 46875 ;to bi dalo 0.25 sekunde ; --- definicije naslovov vrat A 0000 0000 PortA EQU $0000 0000 0002 DDRA EQU $0002 ; org Ram a001000 Cas: ds.b 1 ;pomozni stevec a001001 ds.b SkladSize 0000 1101 Sklad: equ * ; ; --- vstopna tocka, priprava vmesnika, sprejem in oddaja ; org Program a002000 1410 Start: sei a002002 CF11 01 lds #Sklad a002005 1620 2D jsr InitPortA ;priprava vrat A a002008 1620 36 jsr InitECT ;priprava casovnika ECT a00200B 10EF cli
ECT – primer programa 4/7 a00200D 180B 0410 Zanka: movb #4,Cas ;stetje prekinitev (4 x 0.25 = 1s) 002011 00 a002012 9600 ldaa PortA a002014 8880 eora #$80 ;vsako sekundo menjamo prikaz a002016 5A00 staa PortA a002018 B610 00 Zanka0: ldaa Cas a00201B 26FB bne Zanka0 a00201D 20EE bra Zanka ; ;----------------------------------------------------------- ; Prekinitveni streznik ECT kanal 0 ; a00201F DC50 IsrECT: ldd TC0 a002021 C3B7 1B addd #Interval ;ponovno nastavimo interval a002024 5C50 std TC0 a002026 4C4E 01 bset TFLG1,C0F;brisemo zastavico a002029 7310 00 dec Cas a00202C 0B rti ;
ECT – primer programa 5/7 ;--------------------------------------------------- ; Subrutina za zacetno pripravo vrat A, na katera je ; prikljucen 7 segmentni LED ; InitPortA: a00202D 86FF ldaa #$ff a00202F 5A02 staa DDRA a002031 867F ldaa #$7f a002033 5A00 staa PortA ;pikica na LED naj bi se prizgala a002035 3D rts
ECT – primer programa 6/7 ;---------------------------------------------------- ; Subrutina za zacetno pripravo casovnika ECT ; primerjanje na kanalu 0 InitECT: a002036 180B 0100 movb #IOS0,TIOS ;izberemo primerjalni nacin kanala 0 00203A 40 a00203B 180B 0000 movb #$00,TCTL1 00203F 48 a002040 180B 0000 movb #$00,TCTL2 ;izhodi odkljuceni 002044 49 a002045 1803 B71B movw #Interval,TC0 ;nastavimo prvo vrednost TC0 002049 0050 a00204B 180B 0700 movb #Delilnik,TSCR2 ;pred-delilnik (128) 00204F 4D a002050 180B 8000 movb #$80,TSCR1 ;omogocimo casovnik 002054 46 a002055 4C4E FF bset TFLG1,#$ff ;brisemo morebitne zastavice a002058 4C4F 80 bset TFLG2,#$80 a00205B 180B 0100 movb #C0I,TIE ;omogocimo prekinitve kanala 0 00205F 4C a002060 3D rts
ECT – primer programa 7/7 ; Prekinitveni vektor (ECT kanal 0) org ECTVek a00FFEE 201F fdb IsrECT