[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