[pso] [Tema 2] [Win] - Setari initiale + instalare intrerupere

Irina Tirdea ynuka13 at gmail.com
Sat Apr 5 20:26:04 EEST 2008


>
>
> - la inceput intreruperile sunt dezactivate
> - pornesc un program din user-space care genereaza pe unul din device-uri
> primesc un IRP de scriere si activez intreruperea pentru scriere pachetul il
> bag intr-o coada de asteptare
> - se activeaza intreruperea pentru scriere ; scriu cate un byte atata timp
> cat bitul din LSR corespunzator ( Bit 5 - Empty Transmitter Holding Register
> ) este setat ... nu am incercat sa bag dimensiuni foarte mari pentru scris ,
> dar am observat ca nu prea se umple ... cat poti sa bagi in el ?


THR are dimensiunea de un octet, dar pe masura ce scrii in el se si transmit
datele pe seriala, deci se goleste THR. Practic in el scrii un octet,
dar cat de repede se goleste depinde de dimensiunea FIFO si de
viteza serialei.


>
>   practic dupa o singura intrerupere pentru scris consum bufferul ce
> trebuie trimis si dezactivez intreruperea pentru scris
> - numai ca dupa ce scriu primesc o intrerupere cum ca as avea date de
> citit ... chiar daca deocamdata am setat sa nu-mi genereze intrerupere
> pentru "data available" ... nu am nici o cerere de citit date si pun bitul
> corespunzator pe 0 -> o dezactivez


> - pornesc un alt client din user-space care genereaza un IRP de citire ,
> activez intreruperea pentru "data available" , dar nu se mai intampla nimic
> ... nu se mai genereaza nici o intrerupere :(


>
> Deci :
> 1) de ce mi se apeleaza functia atunci cand sunt date de citit, daca eu nu
> am cerut asta ?


 Daca ai RDAI dexactivat nu ar trebui sa iti vina intreruperea. Afiseaza
continutul IIR sa vezi exact ce intrerupere/intreruperi ti-au venit.
Poate iti vine intreruperea de la celalalt port COM. Cele doua porturi COM
sunt legate printr-un pipe, astfel incat ce scrii pe COM1 citesti pe COM2 si
invers. Cand ai scris date pe un port, iti va veni o imediat intrerupere
RDAI pe celalalt.


>
> 2) daca atunci cand sunt date de citit eu nu le citesc, nu o sa mai
> primesc alta notificare ?


Nu mai primesti o noua notificare daca ai pierdut intreruperea si datele se
suprascriu daca primesti mai mult decat dimensiunea FIFO. Citirea se face
asincron, deci trebuie sa ai activata mereu intreruperea RDAI, pentru ca nu
stii cand iti vin date pe seriala.

Irina
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20080405/ca5348ce/attachment.htm 


More information about the pso mailing list