[pso] Problema THREI

Andrei Voinescu voinescu.andrei at gmail.com
Fri Apr 16 12:03:21 EEST 2010


2010/4/16 Macicas Teodor <teodor.macicas at cti.pub.ro>

> Salut Bogdan !
>
> Mersi fain pentru explicatiile tale.
> Sugestia este una buna, asa am si facut. Acu m-am impotmolit la primul test
> write din primul set de teste. Citesc 255 caractere, activez THREI. Ajung in
> handler-ul IRQ cu 0x96 LSR - fara sa am bitul ETHR ( Empty Transmitter
> Holding Register ) setat pe 1.
>
> Pana acu am avut activat FIFO cu 14bytes Interrupt Trigger Level. Am sa
> incerc si cu ITL de 1byte. Insa cred ca-mi scapa mie ceva. Mi se pare un
> exemplu foarte simplu, nu stiu cat sa-l mai simplific ca sa-mi dau seama de
> eroare.
>

În IIR ce ai când intri în handler?

>
> Multumesc.
> Teodor
>
>
> Bogdan Nitu wrote:
>
>> Salut!
>>
>>
>> In LSR la mine bitii 2 3 4 sunt mereu 1. Bitul 0 (Data Ready) si
>> bitul 5 (Empty Transmitter Holding Register) mai variaza. In rest
>> ceilalti trebuie sa fie mereu 0. (Bitii 7 si 1 neaparat 0).
>>
>> Bitul unu mi se intampla si mie sa fie unu ( Overrun Error ) ,
>> dar asta in situatia in care se scria pe portul celalalat, se
>> genera RDAI si eu nu citeam date corespunzator pe portul meu.
>>
>> O alta posibila cauza poate fi faptul ca tu iti propui sa scrii mult
>> ( pentru inceput incearca sa scrii foarte putin: 1 octet fifo dezactivat,
>> 14 pentru un fifo de 14). Cand scrii trebuie sa verifici bitul 5 din
>> lsr (Empty Transmitter Holding Register) sa fie 1 (scrii cat el este 1).
>>
>> Doar o sugestie din partea: Incearca pentru inceput sa simplifici cat
>> de mult situatia posibil ->   Inainte sa te apuci de tema, sa iti propui
>> sa iti treaca urmatorul test:
>>
>> Ai doua buffere, unul pentru transmitator, unul pentru receptor. Iti
>> propui de pe COM1 pe COM2 sa trimeti (sau COM2 -> COM1). Faci totul
>> numai in metoda init a modulului. La sfarsitul metodei init activezi
>> mai intai pentru COM2 RDAI (bitul 0) si apoi pentru COM1 THREI (bitul 1).
>> (neapart DLAB sa fie 0).
>>
>> Initial iti propui sa trimeti doar un octet, apoi 14 (daca ai fifo de 14),
>> apoi mai mult.
>>
>> Usor, usor, cat mai simplu la inceput (fara write si alte cele, trimeti
>> foarte putin, ai un sens bine stabilit COM1 -> COM2, activezi doar RDAI
>> pentru unu si doar THREI pentru celalalt...). Ti-a trecut testul asta,
>> tema
>> este ca si terminata. Este doar o sugestie (apropo, eu ti-am vorbit aici
>> din experienta Linux).
>>
>> Bogdan.
>>
>>
>> --- On Fri, 4/16/10, Macicas Teodor <teodor.macicas at cti.pub.ro> wrote:
>>
>>
>>
>>> From: Macicas Teodor <teodor.macicas at cti.pub.ro>
>>> Subject: [pso] Problema THREI
>>> To: "Proiectarea Sistemelor de Operare" <pso at cursuri.cs.pub.ro>
>>> Date: Friday, April 16, 2010, 2:41 AM
>>> Salut,
>>>
>>> In functia write a device driverului citesc din userspace
>>> si pun datele
>>> in buffer-ul kernel. La sfarsit activez THREI. In
>>> handler-ul IRQ cand
>>> vreau sa tratez THREI, obtin 0x96 la registrul LSR. Asta
>>> inseamna bit7=1
>>> ( Error in Received FIFO ), bit4=1 ( Break Error ), bit2=1
>>> ( Parity
>>> Error ) si bit1=1 ( Overrun Error ) .
>>>
>>> Este vorba de un simplu test care ar trebui sa scrie pe
>>> portul serial
>>> ceea ce primeste din userspace folosind intreruperile.
>>> Vreo idee de ce primesc acele erori in LSR ?
>>>
>>> Multumesc.
>>> Teodor
>>>
>>>
>>>
>>
> _______________________________________________
> 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/20100416/f61f54b3/attachment.htm>


More information about the pso mailing list