Newsgroup: it.hobby.elettronica.digitale
Titolo: Come leggere i timer interni al PC ?

Qualche espertone di PC sa fornirmi il metodo o l'indirizzo o
locazione che mi permetta di leggere qualcuno dei timer sulla scheda
madre di un PC?Mi servirebbero per misurare con precisione degli
eventi relativamente veloci.
Grazie a tutti !

...

Il timer nei primi PC era un Intel 8253, che conteneva tre timer
indipendenti; sucessivamente e' stato sostituito dall'8254, quasi
identico al precedente.
In realta' da circa 15 anni questo integrato non e' presente
fisicamente sulle schede madri, ma e' emulato dal chipset.
Comunque dal punto di vista del software, non fa` nessuna
differenza.
L'accesso a questo circuito avviene attraverso 4 port di I/O di 8
bit agli indirizzi 40h-43h. Ti consiglio di cercarti il data sheet
dell'8254 per capire come funziona.
Fai bene attenzione che dei tre timer uno e` usato dal sistema
per il rinfresco delle ram dinamiche, un altro per il tick di sistema
e il terzo per generare i suoni dell'altoparlante interno del pc,
percio' puoi usare solo quest'ultimo nelle tue applicazioni.
Tutto questo si riferisce alla programmazione sotto DOS
puro. Sotto windows non credo che sia possibile accedere
ai timer direttamente, se non in modo kernel.
Infatti in windows gli accessi all'8254 vengono filtrati
dal sistema che ne rende impossibile l'uso come timer in tempo
reale.
Luigi

...



--
----------------------------------------------------------------------------
-------------------------
   IW1REL - Op. Alberto Gorni   -   
iw1...@mail.omnitel.it
 
iw1...@iw1qbr.ilig.ita.eu
   -  QTH Loc. JN44LK
   Via Emilio Da Pozzo 39/15 - 16133 - Genova (GE) - Italy
   Fax: 
+39 178 2219016
  - Member of CityLAN - 
http://citylan.floating.net
   G^2Tech - 
http://web.tiscalinet.it/g2tech
----------------------------------------------------------------------------
-------------------------



winzozz non centra nulla. E' l'8254 (ovvero il suo equivalente
contenuto nel chipset) che fornisce il contatore preciso al
microsecondo.
Ciao, Massimo - IW1FDX
E-Mail    
max...@libero.it
Visita la pagina dedicata ai microcontrollori ST62
all'indirizzo 
http://digilander.iol.it/max4000

all'indirizzo 
http://digilander.iol.it/max4000
Nei PC ci sono due tipi di timer:
Il primo, esistente dai primi PC XT è basato sull'8254 emulato dal chip set
e viene incrementato con un quarzo da 1193180 Hz e quindi fornisce una
temporizzazione con le risoluzione del microsecondo.
Il secondo timer, a cui si alludeva in un precedente messaggio, è in un
contatore interno al processore Pentium e si chiama TSC (Time Stamp
Counter). E' stato introdotta dall'Intel per eseguire analisi delle
prestazioni del software.
Questo contatore è un registro a 64 bit, è azzerato solo al reset del PC e
viene incrementato alla velocità del processore e quindi ha una precisione
di qualche nanosecondo.
Per utilizzarlo esiste un'istruzione assembler (RDTSC) che trasferisce nei
registri EDX:EAX il suo contenuto.
Ulteriori dettagli si possono trovare sul sito Intel.
Non sono un programmatore in ambiente Windows ma mi pare che nelle librerie
dei principali ambienti di sviluppo Microsoft (Visual Basic, Visual C)
esistano funzioni che permettono di leggerne il valore.
Per calcolare il tempo trascorso occorre dividere il valore letto per la
frequenza del processore.
Attenzione: le operazioni devono essere eseguite con variabili a 64 bit.
Ciao
Paolo

Paolo


all'indirizzo 
http://digilander.iol.it/max4000
Non ho mai usato l'istruzione assembler RDMSR che, come tu giustamente dici,
serve per leggere un generico registro MSR.
Appena ho un attimo di tempo proverò ad utilizzare questa modalità di
lettura del counter TSC.
Io comunque facevo riferimento ad un altra istruzione, RDTSC, che è
specifica per il counter TSC e non richiede alcun parametro aggiuntivo.
Riguardo all'utilizzo di questi registri nei programmi applicativi ritengo
che, se possibile e se non esistono esigenze di efficienza, sia comunque
preferibile utilizzare le primitive di sistema piuttosto che ricorrere a
routine assembler, in tal modo ne guadagnerà la leggibilità e soprattutto la
portabilità del software. Ad esempio un programma che utilizza l'istruzione
RDMSR, che può essere eseguita solo al livello di privilegio 0, avrebbe dei
problemi a funzionare sotto NT.
Ciao
Paolo