[pso] Problema THREI
Macicas Teodor
teodor.macicas at cti.pub.ro
Fri Apr 16 11:46:44 EEST 2010
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.
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
>>
>>
More information about the pso
mailing list