Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

Obsah / Ovladače / TIMER / Globální funkce ovladače časovače

Zdrojový kód: DRIVERS\SYSTEM\TIMER.ASM


Globální funkce ovladače časovače

Globální funkce ovladače časovače se provádějí s implicitním ovladačem časovače, jehož popisovač je uchován v proměnné TIMERDevice.


; -----------------------------------------------------------------------------
;                   TIMER global function: Initialize counter
; -----------------------------------------------------------------------------
; INPUT:	EAX = timer mode (DEVTIM_MODE_CNT, ...)
;		ECX = counter initial value (1 to 65536, 0 stands for 65536)
;		EDX = counter index (0 to 2)
; OUTPUT:	CY = error, invalid arguments
; NOTES:	On mode DEVTIM_MODE_GEN value of 1 is illegal (not checked).
;		It takes aprox. 7 us.
; -----------------------------------------------------------------------------

TIMERSetMode:  	push	ebx		; push EBX
		mov	ebx,[TIMERDevice] ; EBX <- current TIMER device
		DEVFNCLOCKC DEVTIM_SetMode ; initialize counter
		pop	ebx		; pop EBX
		ret

Funkce TIMERSetMode je funkce pro inicializaci čítače časovače. Na vstupu funkce obsahuje registr EAX požadovaný mód čítače (DEVTIM_MODE_CNT, ...), 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. Funkce zajistí uzamknutí ovladače pomocí rychlého zámku.


; -----------------------------------------------------------------------------
;              TIMER global function: Set new counter initial value
; -----------------------------------------------------------------------------
; INPUT:	ECX = new counter init. value (1 to 65536, 0 stands for 65536)
;		EDX = counter index (0 to 2)
; OUTPUT:	CY = error, invalid arguments
; NOTES:	On mode DEVTIM_MODE_GEN value of 1 is illegal (not checked).
;		It takes aprox. 4 us.
; -----------------------------------------------------------------------------

TIMERSetVal:  	push	ebx		; push EBX
		mov	ebx,[TIMERDevice] ; EBX <- current TIMER device
		DEVFNCLOCKC DEVTIM_SetVal ; set new counter initial value
		pop	ebx		; pop EBX
		ret

Funkce TIMERSetVal 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 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. Funkce zajistí uzamknutí ovladače pomocí rychlého zámku.


; -----------------------------------------------------------------------------
;               TIMER global function: Get counter current value
; -----------------------------------------------------------------------------
; INPUT:	EDX = counter index (0 to 2)
; OUTPUT:	EAX = current counter value (0 on error)
;		CY = error, invalid arguments (EAX=0)
; NOTES:	It takes aprox. 7 us.
; -----------------------------------------------------------------------------

TIMERGetVal: 	push	ebx		; push EBX
		mov	ebx,[TIMERDevice] ; EBX <- current TIMER device
		DEVFNCLOCKC DEVTIM_GetVal ; get counter current value
		pop	ebx		; pop EBX
		ret

Funkce TIMERGetVal 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. Funkce zajistí uzamknutí ovladače pomocí rychlého zámku.


; -----------------------------------------------------------------------------
;                 TIMER global function: Get counter output
; -----------------------------------------------------------------------------
; INPUT:	EDX = counter index (0 to 2)
; OUTPUT:	EAX = current counter output (0 or 1)
;		CY = error, invalid arguments (EAX=0)
; NOTES:	It takes aprox. 4 us.
; -----------------------------------------------------------------------------

TIMERGetOut: 	push	ebx		; push EBX
		mov	ebx,[TIMERDevice] ; EBX <- current TIMER device
		DEVFNCLOCKC DEVTIM_GetOut ; get counter current value
		pop	ebx		; pop EBX
		ret

Funkce TIMERGetOut je funkce ke zjištění stavu výstupu OUT čítače. Na vstupu funkce obsahuje 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). Funkce zajistí uzamknutí ovladače pomocí rychlého zámku.


Obsah / Ovladače / TIMER / Globální funkce ovladače časovače