[pso] Re: [tema2][linux]read/write/interrupt
Adrian - Razvan Deaconescu
pso@cursuri.cs.pub.ro
Mon, 11 Apr 2005 11:17:50 +0300
> Salut.
>
> Intrebare legata de intreruperile si modul de "trezire" al acestora:
> 1.De ex la read, dupa ce citesc din buferul userului cu get_user() (ca in case.c) si pun
> in buferul de
> read din cadrul deviceului (pana la umplerea buferului device), trebuie sa fac cumva
> activare de
> receive interrupt (ceva de genul "outb(old_IER_value | 0x01, IER_address)") SAU cum/cine
> trebuie sa apeleze respectiva rutina de IRQ pe care am inregistrat-o?
> Analog intrebare ptr write cu transmit interrupt enable (old_IER_value | 0x02)
Reactivarile pentru intreruperi ar trebui sa se faca automat. Adica
trebuiesc activate la inceput si apoi ele raman activate, numai ca se
declanseaza la indeplinirea unor conditii (spre exemplu la RDAI
conditia de declansare este daca ai
primit un caracter, sau mai multe daca ai setat explicit in FCR).
Gasesti mai clar explicate conditiile de resetare a unei intreruperi
in UART_spec.pdf ( cauta pe Google :-) )
> 2. In enunt scrie ca read/write sunt extrem de similare cu cele din lab (adica case.c,
> nu?) - deci
> se citesc byte-by-byte din user_buffer[i] pana la umplerea bufferului. Faptul ca in enunt
> la
> IMPORTANT scrie ca trebuie folosite intrerup. ptr receptie si transmisie se refera la
> faptul ca
> handlerul de irq tre sa prelucreze (scrie/citeasca) mai departe bufferul umplut de
> read/write?
Driver-ul tau (partea software) va trebui numai sa interactioneze cu
utilizatorul. Toata partea de comunicatie cu dispozitivul hardware
(UART 16550A) trebuie sa fie realizata prin intermediul unor
intreruperi. In cadrul rutinelor de read/write va trebi sa
citesti/scrii datele din user space in/din buffer-ul driverului. In
cadrul intreruperii va trebui sa citesti datele din buffer-ul
driver-ului si sa le scrii in buffer-ul hardware (sau invers pentru
citire). Atentie la sincronizari!
> PS: sorry daca nu prea e coerenta intrebare/fraza - nu stiu cum sa explic/intreb aceasta
> mai clar :)
Don't worry! stiu si eu cum e :-)
Razvan
Scuze pentru mesajul anterior; am incercat sa dau reply si nu a iesit
ce trebuia :-(