[pso] Problema THREI
Macicas Teodor
teodor.macicas at cti.pub.ro
Fri Apr 16 15:33:17 EEST 2010
Multumesc pentru ajutor.
Problema era alta, gresisem eu la setarea si verificarea unor biti :) .
My fault.
Andrei Voinescu wrote:
>
>
> 2010/4/16 Macicas Teodor <teodor.macicas at cti.pub.ro
> <mailto: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
> <mailto:teodor.macicas at cti.pub.ro>> wrote:
>
>
>
> From: Macicas Teodor <teodor.macicas at cti.pub.ro
> <mailto:teodor.macicas at cti.pub.ro>>
> Subject: [pso] Problema THREI
> To: "Proiectarea Sistemelor de Operare"
> <pso at cursuri.cs.pub.ro <mailto: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 <mailto: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
>
--
Teodor MACICAS
More information about the pso
mailing list