[pso] nesincronizare in test?

Andrei Hagiescu pso@cursuri.cs.pub.ro
Sun, 18 Apr 2004 22:38:18 +0300


This is a multi-part message in MIME format.

------=_NextPart_000_01C5_01C42595.D83C45C0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Tind totusi sa cred ca in observatia cu nesincronizarea Zamf a avut =
dreptate dar nu a evidentiat niste aspecte:=20
(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:=20
"nu uitati sa asteptati ca FIFO-ul sa se goleasca " deci nu trebuie sa =
ne uitam decat la fifo nu si la shift register.

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?



----- Original Message -----=20
From: <tavi@cs.pub.ro>
To: <pso@cursuri.cs.pub.ro>
Sent: Sunday, April 18, 2004 22:20
Subject: Re: [pso] nesincronizare in test?


> On Sunday 18 April 2004 18:47, Cristian Zamfir wrote:
> > S-ar putea sa gresesc, dar as vrea sa pun in vedere urmatoarea =
situatie din
> > test.c:
> > Daca trimit pe com1 si fac flush pe com1, apoi imediat fac clear pe =
com2,
> > este posibil ca sa fac clear inainte ca ultima interupere de receive =
data
> > available pe com2 sa se apeleze, mai ales la viteze mici ale =
serialei.
> >
>=20
> Pai asta e rolul lui FLUSH: sa astepte pana cand datele au fost =
transmise.
>=20
> tavi
>=20
> _______________________________________________
> pso mailing list
> pso@cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
> 
------=_NextPart_000_01C5_01C42595.D83C45C0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>Tind totusi sa cred ca in observatia cu =

nesincronizarea Zamf a avut dreptate dar nu a evidentiat niste aspecte:=20
</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>(citez din datasheet-ul=20
uart16550A.pdf)</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2><STRONG>The transmitter =
holding register=20
interrupt (02) occurs</STRONG></FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2><STRONG>when the XMIT FIFO =
is=20
empty</STRONG>; it is cleared as soon as</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>the transmitter holding =
register is=20
written to (1 to 16 characters</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>may be written to the XMIT =
FIFO while=20
servicing</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2>this interrupt) or the IIR =
is=20
read.</FONT></DIV>
<DIV align=3Dleft><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV><FONT =
face=3DArial=20
size=3D2><FONT face=3DIII01430 size=3D1>
<DIV align=3Dleft><FONT size=3D2>...</FONT></FONT><FONT =
face=3DIII02400><STRONG>The=20
THRE bit is set to a logic 1 when a character is</STRONG></DIV>
<DIV align=3Dleft><STRONG>transferred from the Transmitter Holding =
Register into=20
the</STRONG></DIV>
<DIV align=3Dleft><STRONG>Transmitter Shift Register</STRONG>....</DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft>deci cand apare ultima intrerupere nu s-a trimis inca =
ultimul=20
caracter ci tocmai a fost transferat in registrul de deplasare. Exista =
varianta=20
de a astepta blocant trimiterea lui pentru ca&nbsp;flush sa functioneze =
corect,=20
dar asta inseamna ca sa ramana tema in intrerupere pana se trimite si =
acel ultim=20
caracter sau flush sa faca polling. Si in precizari scrie: </DIV>
<DIV align=3Dleft>"nu uitati sa asteptati ca FIFO-ul sa se goleasca " =
deci nu=20
trebuie sa ne uitam decat la fifo nu si la shift register.</DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft>Daca este asa, flush se intoarce cand ultimul caracter =
a fost=20
introdus in registrul de deplasare si inca nu a sosit la destinatie. Un =
clear=20
poate sterge ce venise pana atunci asadar nu si acel ultim caracter care =
este=20
tocmai atunci trimis (el nu "se vede" in coada FIFO ci in registrele de=20
deplasare). Caracterul vine cumsecade dupa aceea si nimeni nu il mai =
sterge.=20
Daca viteza e mare, pana se apeleaza clear el apuca sa fie "rotit" in =
registrul=20
de deplasare si sa vina si nu apare problema.</DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft>Chiar si in cazul in care ar astepta cineva sa se =
goleasca shift=20
register mai poate aparea o problema...</DIV>
<DIV align=3Dleft>la un cablu de 50 m timpul de propagare este de circa =
100 ns.=20
Daca a terminat de trimis si foarte repede face clear (la viteza =
procesoarelor=20
de azi nu e o problema) tot nu ajunge ultimul bit al ultimului caracter =
si se=20
repeta ce am zis mai sus....</DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft>Gresesc?</DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft>&nbsp;</DIV>
<DIV align=3Dleft></FONT></FONT><FONT face=3DArial =
size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>----- Original Message ----- </FONT>
<DIV><FONT face=3DArial size=3D2>From: &lt;</FONT><A=20
href=3D"mailto:tavi@cs.pub.ro"><FONT face=3DArial=20
size=3D2>tavi@cs.pub.ro</FONT></A><FONT face=3DArial =
size=3D2>&gt;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>To: &lt;</FONT><A=20
href=3D"mailto:pso@cursuri.cs.pub.ro"><FONT face=3DArial=20
size=3D2>pso@cursuri.cs.pub.ro</FONT></A><FONT face=3DArial =
size=3D2>&gt;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Sent: Sunday, April 18, 2004 =
22:20</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Subject: Re: [pso] nesincronizare in=20
test?</FONT></DIV></DIV>
<DIV><FONT face=3DArial><BR><FONT size=3D2></FONT></FONT></DIV><FONT =
face=3DArial=20
size=3D2>&gt; On Sunday 18 April 2004 18:47, Cristian Zamfir =
wrote:<BR>&gt; &gt;=20
S-ar putea sa gresesc, dar as vrea sa pun in vedere urmatoarea situatie=20
din<BR>&gt; &gt; test.c:<BR>&gt; &gt; Daca trimit pe com1 si fac flush =
pe com1,=20
apoi imediat fac clear pe com2,<BR>&gt; &gt; este posibil ca sa fac =
clear=20
inainte ca ultima interupere de receive data<BR>&gt; &gt; available pe =
com2 sa=20
se apeleze, mai ales la viteze mici ale serialei.<BR>&gt; &gt;<BR>&gt; =
<BR>&gt;=20
Pai asta e rolul lui FLUSH: sa astepte pana cand datele au fost=20
transmise.<BR>&gt; <BR>&gt; tavi<BR>&gt; <BR>&gt;=20
_______________________________________________<BR>&gt; pso mailing =
list<BR>&gt;=20
</FONT><A href=3D"mailto:pso@cursuri.cs.pub.ro"><FONT face=3DArial=20
size=3D2>pso@cursuri.cs.pub.ro</FONT></A><BR><FONT face=3DArial =
size=3D2>&gt;=20
</FONT><A =
href=3D"http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso"><FONT=20
face=3DArial=20
size=3D2>http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso</FONT></A>=
<BR><FONT=20
face=3DArial size=3D2>&gt; </FONT></BODY></HTML>

------=_NextPart_000_01C5_01C42595.D83C45C0--