Obsah / Ovladače / TIMER / Struktury a makra ovladače časovače
Zdrojový kód: INCLUDE\DRIVERS\SYSTEM\TIMER.INC
Struktury a makra ovladače časovače
|
Struktura DEVTIMER je popisovač ovladače časovače. Struktura je odvozena od všeobecného zařízení DEV.
DEVTIM_SetMode je funkce pro inicializaci čítače časovače. Na vstupu funkce obsahuje registr EAX požadovaný mód čítače (DEVTIM_MODE_CNT, ...), EBX popisovač ovladače časovače, registr ECX inicializační hodnotu čítače (v rozsahu 0 až 65536, přičemž hodnota 0 má význam hodnoty 65536) a registr EDX index čítače (v rozsahu 0 až 2). Čítač je vždy používán jako 16-bitový. V případě neplatného argumentu navrátí funkce příznak chyby CY. V módu DEVTIM_MODE_GEN je inicializační hodnota čítače 1 neplatná, ale není funkcí kontrolována platnost. Nastavením nového módu čítače se přeruší probíhající čítání a čítač se resetuje. Funkce trvá typicky zhruba 7 mikrosekund.
DEVTIM_SetVal je funkce k nastavení nové inicializační hodnoty čítače bez nastavení módu čítače a tedy bez resetování čítače. Nová inicializační hodnota čítače se uplatní zpravidla při následujícím cyklu. Na vstupu funkce obsahuje registr EBX popisovač ovladače časovače, registr ECX inicializační hodnotu čítače (v rozsahu 0 až 65536, přičemž hodnota 0 má význam hodnoty 65536) a registr EDX index čítače (v rozsahu 0 až 2). Čítač je vždy používán jako 16-bitový. V případě neplatného argumentu navrátí funkce příznak chyby CY. V módu DEVTIM_MODE_GEN je inicializační hodnota čítače 1 neplatná, ale není funkcí kontrolována platnost. Funkce trvá typicky zhruba 4 mikrosekundy.
DEVTIM_GetVal je funkce ke zjištění aktuální hodnoty čítače. Na vstupu funkce obsahuje registr EBX popisovač ovladače časovače a registr EDX index čítače (v rozsahu 0 až 2). Funkce vrací na výstupu v registru EAX aktuální hodnotu čítače. Čítač je vždy používán jako 16-bitový. V případě neplatného argumentu navrátí funkce příznak chyby CY. Funkce trvá typicky zhruba 7 mikrosekund.
DEVTIM_GetOut je funkce ke zjištění stavu výstupu OUT čítače. Na vstupu funkce obsahuje registr EBX popisovač ovladače časovače a registr EDX index čítače (v rozsahu 0 až 2). Funkce vrací na výstupu v registru EAX aktuální stav OUT čítače, hodnotu 0 nebo 1. V případě neplatného argumentu navrátí funkce příznak chyby CY (EAX = 0). Funkce trvá typicky zhruba 4 mikrosekundy. Funkce je podporována pouze u řadiče 8254 (standardní řadič v PC-AT) ale ne u 8253 (řadič používaný v PC-XT).
TIMER_FREQ je frekvence hodinového signálu časovače, tj. 1193182 Hz (přesněji 1193181,8181 Hz, což je 1/3 barvonosného signálu NTSC).
TIMER_IRQ je číslo přerušení používané časovačem (=IRQ 0).
Následují konstanty módu čítače.
DEVTIM_MODE_CNT (mód 0) je jednorázový čítač. Po inicializaci a zahájení čítání je výstup čítače ve stavu 0. Po dosažení nuly čítače přejde výstup do stavu 1. Po zápisu nové inicializační hodnoty se změní výstup opět na stav 0 a čítač začne čítat. Zápisem inicializační hodnoty během čítání se začne čítat také od začátku, tj. koncového stavu výstupu OUT je dosaženo vždy po přesně dané době od zápisu. Tento mód je používán jako monostabilní klopný obvod (tj. generátor impulsu dané délky) se softwarovým spouštěním.
DEVTIM_MODE_SHT (mód 1) je hardwarově spouštěný jednorázový čítač (jeden impuls). V klidu je výstup OUT ve stavu 1. Po inicializaci a nastavení čítače je čítač připraven k čítání. Spuštěním čítače vstupem GATE přejde výstup OUT do stavu 0 a zahájí se čítání. Po dosažení nuly přejde OUT zpět do stavu 1. Novým vstupem GATE se spustí nový impuls (bez nutnosti plnit znovu čítač). Zápisem nové hodnoty čítače během čítání se probíhající impuls neovlivní, nová hodnota se uplatní až při spuštění dalšího impulsu.
DEVTIM_MODE_GEN (mód 2 nebo 6) je generátor přerušení, dělička hodinového kmitočtu daným dělicím poměrem, nastaveným jako inicializační hodnota čítače. Běžně je výstup OUT ve stavu 1. Když čítač dosáhne hodnoty 1, přejde výstup OUT na stav 0 na dobu jednoho pulsu hodin. Poté nepřechází čítač na stav 0, ale naplní se znovu inicializační hodnotou čítače a pokračuje v čítání (výstup OUT přejde opět na stav 1). Zápisem nové inicializační hodnoty se nová hodnota uplatní až při čítání další sekvence. Inicializační hodnota 1 není v tomto módu povolená. Tento mód se běžně používá u čítače 0 ke generování přerušení hodinami.
DEVTIM_MODE_SQR (mód 3 nebo 7) je generátor obdélníkových impulsů. Tento mód je podobný předešlému módu s tím rozdílem, že výstup OUT přechází na stav 0 na polovinu doby čítače - výsledkem je tedy signál se střídou 1:1. Hodnota čítače (zarovnaná na sudé číslo) se snižuje po 2. Po dosažení nuly se překlopí stav výstupu OUT a čítání po 2 se opakuje. V případě liché inicializační hodnoty je OUT ve stavu 1 po dobu o 1 delší než ve stavu 0. Tento mód se běžně používá u čítače 2 ke generování zvukového signálu.
DEVTIM_MODE_SWS (mód 4) je softwarově spouštěný stroboskop. Výstup OUT je v základním stavu 1. Po dočítání nuly přejde na stav 0 na dobu jednoho pulsu hodin (slouží tedy k vyvolání přerušení po nastavené době) a pak se opět vrátí do stavu 1. Nové čítání je spuštěno zápisem nové inicializační hodnoty. Pokud je zápis proveden během čítání, spustí se po ukončení čítání další čítání s novou hodnotou.
DEVTIM_MODE_HWS (mód 5) je hardwarově spouštěný stroboskop. Je shodný s předešlým módem s tím rozdílem, že se čítání spouští náběžnou hranou vstupu GATE.
|
Makro DEVICETIMER je inicializovaný popisovač ovladače časovače. Makro má 5 parametrů:
%1 - příznaky
%2 - hlavní číslo verze ovladače
%3 - vedlejší číslo verze ovladače
%4 - číslo překladu ovladače
%5 - prefix jména ### :
###SetMode - inicializace čítače
###SetVal - nastavení inicializační hodnoty čítače
###GetVal - zjištění aktuální hodnoty čítače
###GetOut - zjištění stavu výstupu čítače
Obsah / Ovladače / TIMER / Struktury a makra ovladače časovače