Timer

V večini računalniških sistemov se nahaja tudi vmesnik, ki se uporablja za časovno opredeljevanje dogodkov. Imenujemo ga časovnik (timer).

Osnovo časovnika v MC6803 predstavlja 16-bitni prostotekoči števec (Free Running Counter - na dveh sosednjih naslovih 0x0009 in 0x000A), ki ga poganja takt procesorja . Tako je maksimalna vrednost, do katere lahko števec prišteje, 0xFFFF. Ob naslednjem taktu je stanje na njegovih izhodih 0x0000.

Če je frekvenca ure npr. 1 MHz, traja ena perioda eno mikrosekundo. Čas, v katerem preteče števec od začetnega do končnega stanja, je tako 65536 mikrosekund oz. 0,065536 sekunde.

Za merjenje daljših časov razširimo število bitov števca iz 16 na poljubno število tako, da programsko štejemo, kolikokrat je števec prešel stanje 0xFFFF. Pravimo, da štejemo prelive (Overflow) preko stanja 0xFFFF (podobno kot bi šteli prehode ure preko poldneva).

Ko se pojavi preliv, torej, ko števec preide stanje 0xFFFF, se to zaznamuje v statusnem registru časovnika (naslov statusnega registra je nespremenljiv 0x0008). S pollingom lahko ugotovimo, kdaj je do tega prišlo in dogodek zabeležimo tako, da programsko zasnovan števec prelivov povečamo za 1.

Ker pa smo že ugotovili, da polling predstavlja precejšnjo izgubo časa, je bolj ugodno če ob prehodu stanja 0xFFFF zahteva časovnik od procesorja prekinitev. Da se to lahko zgodi, moramo v krmilnem registru časovnika (na naslovu 0x0008) omogočiti prekinitve.

Časovnik umakne prekinitveno zahtevo, ko procesor zaporedoma prebere stanje statusnega registra in stanje prostotekočega števca.

 

Čas med dvema dogodkoma izmerimo preprosto tako, da preberemo in si zapomnimo stanje prostotekočega števca ob prvem dogodku, nato pa še ob drugem ter izračunamo razliko njunih stanj. Če poznamo še dolžino urine periode, lahko tako določimo absolutni čas, ki je pretekel med enim in drugim dogodkom.

 

Časovnik pa se lahko povezuje tudi z zunanjimi signali, bodisi tako, da krmili njihovo dolžino pri izhodnih signalih ali pa meri trajanje impulza pri vhodnih signalih.

Časovnik ima vgrajen tudi 16-bitni primerjalni register (Output Compare Register - na naslovih 0x000B in 0x000C), v katerega lahko vpišemo neko vnaprej določeno vrednost (podobno kot nastavimo alarm pri budilki). V časovniku stalno poteka primerjava stanj prostotekočega števca in primerjalnega registra. Ko se vsebini izenačita, se postavi eden od bitov v statusnem registru.

Če je omogočena prekinitev v primerjalnem načinu delovanja časovnika, odpošlje časovnik procesorju tudi prekinitveno zahtevo. Do prekinitve torej pride ob vnaprej določenem času. To omogoča, da procesor takrat izvede določen program, vgrajeno vezje pa lahko tudi avtomatsko spremeni nivo signala na nožici porta2 P21. kakšno bo stanje na omenjenem izhodu, vnaprej programsko določimo v krmilnem registru.

Časovnik umakne prekinitveno zahtevo, ko procesor prebere stanje statusnega registra in vpiše novo vrednost v primerjalni register.

Tak način delovanja časovnika omogoča procesorju izvajanje aktivnosti ob določenem času in odpošiljanje časovno kontroliranih signalov v okolico.

 

Tretji, prestrezni način delovanja časovnika (Input Capture) pa je povezan s prestrezanjem trenutnega stanja prostotekočega števca ob spremembi stanja zunanjega signala na nožici P20 porta2. Stanje prostotekočega števca se prestreže v poseben 16-bitni prestrezni register (na naslovih 0x000D in 0x000E), od koder lahko procesor kadarkoli prebere shranjeno vrednost.

Ta način delovanja spominja na uporabo ure v vlogi štoparice, kjer zunanji dogodek določa začetek merjenja, drugi dogodek pa konec.

V časovniku pride do prestrezanja ob prednji ali zadnji strmini signala P20, kar programsko določimo v krmilnem registru.

Časovnik ne umakne zahteve po prekinitvi, dokler procesor zapored ne prebere vsebine statusnega registra in vsebine prestreznega registra.

Ta način delovanja časovnika uporabljamo za merjenje trajanja dolžine period, impulzov in pavz zunanjih signalov.

Nazaj