[pso] nesincronizare in test?

Octavian Purdila pso@cursuri.cs.pub.ro
Mon, 19 Apr 2004 08:29:02 +0300


On Sunday 18 April 2004 22:38, Andrei Hagiescu wrote:
> Tind totusi sa cred ca in observatia cu nesincronizarea Zamf a avut
> dreptate dar nu a evidentiat niste aspecte: (citez din datasheet-ul
> uart16550A.pdf)
>
> The transmitter holding register interrupt (02) occurs
> when the XMIT FIFO is empty; it is cleared as soon as
> the transmitter holding register is written to (1 to 16 characters
> may be written to the XMIT FIFO while servicing
> this interrupt) or the IIR is read.
>
> ...The THRE bit is set to a logic 1 when a character is
> transferred from the Transmitter Holding Register into the
> Transmitter Shift Register....
>
> deci cand apare ultima intrerupere nu s-a trimis inca ultimul caracter ci
> tocmai a fost transferat in registrul de deplasare. Exista varianta de a
> astepta blocant trimiterea lui pentru ca flush sa functioneze corect, dar
> asta inseamna ca sa ramana tema in intrerupere pana se trimite si acel
> ultim caracter sau flush sa faca polling. Si in precizari scrie: "nu uitati
> sa asteptati ca FIFO-ul sa se goleasca " deci nu trebuie sa ne uitam decat
> la fifo nu si la shift register.
>

:)) In precizari v-am dat niste hinturi doar.

> Daca este asa, flush se intoarce cand ultimul caracter a fost introdus in
> registrul de deplasare si inca nu a sosit la destinatie. Un clear poate
> sterge ce venise pana atunci asadar nu si acel ultim caracter care este
> tocmai atunci trimis (el nu "se vede" in coada FIFO ci in registrele de
> deplasare). Caracterul vine cumsecade dupa aceea si nimeni nu il mai
> sterge. Daca viteza e mare, pana se apeleaza clear el apuca sa fie "rotit"
> in registrul de deplasare si sa vina si nu apare problema.
>
> Chiar si in cazul in care ar astepta cineva sa se goleasca shift register
> mai poate aparea o problema... la un cablu de 50 m timpul de propagare este
> de circa 100 ns. Daca a terminat de trimis si foarte repede face clear (la
> viteza procesoarelor de azi nu e o problema) tot nu ajunge ultimul bit al
> ultimului caracter si se repeta ce am zis mai sus....
>
> Gresesc?
>
>
>

Nu. Doar ca voi trebui sa faceti ca FLUSH sa functioneze corect. Si asta 
inseamna sa tratati toate cazurile de mai sus. 

tavi