[pso] Problema THREI

Bogdan Nitu nitubogdan_cc at yahoo.com
Fri Apr 16 03:41:08 EEST 2010


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
> 


      



More information about the pso mailing list