[pso] Activare intreruperi seriala

Bogdan Nitu nitubogdan_cc at yahoo.com
Mon Apr 5 18:25:24 EEST 2010


Salut,

Ai fortat doar bitul 7, sau ai facut tot LCR 0?

Daca poate sa ma ajute cineva, mie tot nu imi intra in handler, desi:

1)
outb(0x00,(COM1_BASE)+3);   // fortez 0 pe tot LCR si astfel si pe bitul 7 (DLAB) - nu stiu cum sa fortez doar un bit dintr-un registru
outb(0x00,(COM1_BASE)+2);   // dezactivare fifo
outb(0x08,(COM1_BASE)+4);   // setare Bit 3 - MCR  - Aux Output 2
outb(0x0F,(COM1_BASE)+1);   // setare Bit 0, 1, 2, 3 - IER - activarea tuturor intreruperilor (DLAB este deja 0)

SET_LINE(UART16550_BAUD_9600,UART16550_LEN_8,UART16550_STOP_1,UART16550_PAR_NONE,COM1_BASE); //macroul din laboratorul de anul trecut

si scriu outb('w', COM1_BASE); si nu intra in handler desi acesta este inregistrat pe liniile 4 si 3 pentru cele doua comm-uri
cat /proc/interrupts
3:          0   IO-APIC-edge      so2_com2
4:          0   IO-APIC-edge      so2_com1

2)
Un lucru pe care nu il inteleg deloc este operatia de citire (de ce nu functioneaza?): 
Cand citesc din LSR (Line Status Register)  stare = inb((COM1_BASE)+5) imi returneaza ff. 
Citesc din orice registru imi da ff desi in request_region am cerut 8 porturi:  
if(request_region(COM1_BASE, 8, COM1_NAME) == NULL) {  };

3)
O alta intrebare, pe masina virtuala ati dat jos vre-un modul? 
Mie nu imi mergea request_region (error - no such device) si a trebuit rmmod 8250_pnp.

Multumesc frumos!



--- On Sat, 4/3/10, Andrei Trandafir <andreitra1987 at yahoo.com> wrote:

From: Andrei Trandafir <andreitra1987 at yahoo.com>
Subject: Re: [pso] Activare intreruperi seriala
To: "Proiectarea Sistemelor de Operare" <pso at cursuri.cs.pub.ro>
Date: Saturday, April 3, 2010, 10:01 PM

Se pare ca problema era de la bitul DLAB. L-am fortat pe 0 atunci cand scriu in Interrupt Enable Register, la inregistrarea handler-ului pentru interuperi si se pare ca acum modulul functioneaza. 


--- On Sat, 4/3/10, Andrei Trandafir <andreitra1987 at yahoo.com> wrote:

> From: Andrei Trandafir <andreitra1987 at yahoo.com>
> Subject: [pso] Activare intreruperi seriala
> To: pso at cursuri.cs.pub.ro
> Date: Saturday, April 3, 2010, 9:46 AM
> Salut,
> 
> Cum ar trebui procedat, mai exact, ca sa putem sa activam
> corect handler-ul de intrerupere pentru citirea datelor de
> pe seriala? Am folosit drept suport laboratorul 6, unde este
> indicat ce ar trebui sa contina registrii UART pentru
> configurarea corecta, insa pana in acest moment, handler-ul
> meu nu ajunge sa fie apelat (el fiind inregistrat cu
> IRQF_SHARED). Eu am procedat in felul urmator (Base - adresa
> de baza):
> 
> * La inregistrarea intreruperii:
> - activez Auxiliary Output 2 (bitul 3) din Modem Control
> Register (Base + 4)
> - activez Received Data Available (bitul 1) in Interrupt
> Enable Register (Base + 1)
> - dezactivez FIFO (Base + 2)
> 
> * Ulterior, la o comanda IOCTL:
> - activez bitul DLAB in LCR si apoi scriu viteza de
> transfer in DLL si DLM (in Base + 3, Base si Base + 1)
> - dezactivez LCR, apoi scriu in el lungimea, paritatea si
> bitii de stop (in Base + 3)
> 
> Mai exista alta operatie care ar trebui efectuata?
> 
> Multumesc.
> 
>  
> 
> 
>       
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
> 


      
_______________________________________________
pso mailing list
pso at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso



      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/lurker/list/pso.html/attachments/20100405/78e7a845/attachment.htm>


More information about the pso mailing list