[pso] [Tema2][Linux]Generare intrerupere

Razvan Deaconescu razvand at cs.pub.ro
Wed Apr 25 22:58:20 EEST 2007


Costin Boldisor wrote:
> Stiu ca e cam tarziu pentru intrebari legate de tema 2 :)

de ce ar fi prea tarziu? ideea e sa faceti temele si, in consecinta, 
intrebarile/nelamuririle au rostul lor

> Dar:
>  
> 1. Structura cdev se foloseste numai pentru a se adauga un nou driver 
> (cu MKDEV, etc) si
>     pentru a retine metodele handler (open, read, write, etc)? Sau ar 
> mai trebui folosit si altundeva?

corect (adica doar operatiile cdev_add si cdev_init)

> 2. Dupa ce am copiat in write din user space in buffer, cum generez 
> intrerupere ca sa mi se apeleze handlerul
> si sa scriu pe port?

intreruperile de buffer gol (THREI - Transmitter Register Empty 
Interrupt) sunt generate in momentul cand buffer-ul este gol, dupa ce ai 
configurat linia; se recomanda sa le dezactivezi dupa ce ai scris 
informatii in rutina de tratare a intreruperii si sa le reactivezi in 
momentul in care ai scris date in buffer-ul din user space

va trebui sa  configurezi corespunzator registrul IER (registru de 
control) si sa analizezi registrul IIR (registru de stare)

> 3. In handler, al doilea parametru (dev_id) va fi dev_id-ul dat ca 
> parametru la inregistrarea intreruperii (request_irq)? 

da; poate fi NULL sau poti sa transmiti structura asociata 
dispozitivului tau (cea care contine si struct cdev, buffer-e); o poti 
folosi ca un "cookie" pentru a face deosebirea intre cele doua 
dispozitive utilizate (intre cei doi minori): uart0 si uart1

Razvan


More information about the pso mailing list