[pso] [Tema 2] [Win] - Setari initiale + instalare intrerupere
Andrei Ciuca
andrei.ciuca at gmail.com
Sat Apr 5 19:05:26 EEST 2008
Inca ceva.
De ce se intampla urmatoarele lucruri :
- 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 ?
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 ?
2) daca atunci cand sunt date de citit eu nu le citesc, nu o sa mai primesc
alta notificare ?
(mentionez ca am setat activarea intreruperii la Latched)
2008/4/5 Irina Tirdea <ynuka13 at gmail.com>:
>
> > 1) adica daca vine o intrerupere si eu nu citesc registrul ala nu le mai
> activeaza dupaia ?
>
> Da. Bitii din IIR se reseteaza la anumite operatii (fiind registru
> read-only). Bitul 0 (Interrupt Pending) se reseteaza cand citesti IIR. Cat
> timp ai o intrerupere pending, nu ti se mai trimit alte intreruperi (adica
> nu ti se mai apeleaza inca o data rutina de tratare a intreruperii).
> Gasesti
> mai multe detalii despre cum se folosesc/reseteaza bitii din registre in
> data sheet-ul pentru UART [1].
>
> Oricum ar trebui sa citesti IIR in intrerupere, pentru a vedea ca
> intreruperea pe care ai primit-o apartine device-ului tau. Pentru a vedea
> exact daca ai primit date sau poti transmite e mai bine sa citesti LSR.
>
> Asta se aplica la intreruperi in general. Intreruperea THREI are un statut
> mai special, datorita faptului ca se genereaza imediat cum ai registrul
> gol
> [2]
>
> > 2) ce presupune exact activare "latched" ?
>
> Activarea Latched/LevelSensitive se refera la intreruperi
> edge-triggered/level-triggered. Adica o intrerupere de tip latched va fi
> activata de o tranzitie de nivel 0-1 sau 1-0 pe linia de intrerupere, iar
> o
> intrerupere LevelSensitive va fi activata de prezenta unui anumit nivel
> (0/1) pe linia de intrerupere.[3]
>
> [1] http://www.national.com/ds/PC/PC16550D.pdf
> [2] http://cs.pub.ro/pipermail/pso/2007-June/001906.html
> [3] http://en.wikipedia.org/wiki/Interrupt
>
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
--
Andrei Ciuca,
Member of BEST Bucharest
Mobile : +40741.274.724 / +40762.263.489
E-mail : andrei.ciuca at BEST.eu.org
GTALK : andrei.ciuca at gmail.com
YM : andrei.ciuca at yahoo.com
MSN : andrei.ciuca at hotmail.co.uk
www.BEST.eu.org/Bucharest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20080405/c185cc63/attachment.html
More information about the pso
mailing list