<div dir="ltr"><div dir="ltr"><br></div>Pavel this was filed as <a href="https://devel.rtems.org/ticket/4903">https://devel.rtems.org/ticket/4903</a>. The ticket submitter<div>didn't give a patch, just a code change snippet and explanation. Zack turned it into</div><div>a patch. You will need to post that on the ticket to get the submitter's feedback.</div><div><br></div><div>I hope you don't mind copying that to the ticket and seeing what you think is</div><div>really up.</div><div><br></div><div>Thanks.</div><div><br></div><div>--joel</div><div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 12, 2023 at 8:49 AM Pavel Pisa <<a href="mailto:ppisa4lists@pikron.com">ppisa4lists@pikron.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello Zack and Gedare,<br>
<br>
On Tuesday 11 of July 2023 19:52:27 Gedare Bloom wrote:<br>
> Thanks for the patch. Someone should probably test it, or identify in<br>
> the documentation why this calculation was off-by-1. Pavel, any clues?<br>
> On Sun, Jul 9, 2023 at 10:09 PM zack <<a href="mailto:zakthertemsdev@gmail.com" target="_blank">zakthertemsdev@gmail.com</a>> wrote:<br>
> > Fixes #4903<br>
> > diff --git a/bsps/arm/tms570/console/tms570-sci.c<br>
> > b/bsps/arm/tms570/console/tms570-sci.c index 768770a4c8..59a0b7e6f1<br>
> > 100644<br>
> > --- a/bsps/arm/tms570/console/tms570-sci.c<br>
> > +++ b/bsps/arm/tms570/console/tms570-sci.c<br>
> > @@ -311,7 +311,7 @@ bool tms570_sci_set_attributes(<br>
> >    /* Apply baudrate to the hardware */<br>
> >    baudrate *= 2 * 16;<br>
> >    bauddiv = (BSP_PLL_OUT_CLOCK + baudrate / 2) / baudrate;<br>
> > -  ctx->regs->BRS = bauddiv? bauddiv - 1: 0;<br>
> > +  ctx->regs->BRS = bauddiv? bauddiv - 2: 0;<br>
<br>
I think that change is not correct. The actual used values<br>
for BSP_PLL_OUT_CLOCK and baudrate should be provided to analyze<br>
the case. The code can result in some rounding error and can<br>
be enhanced if fractional divider is used or even super finegrained<br>
fractional divider. But these options are available only for<br>
for SCI/LIN peripheral case.<br>
<br>
According to<br>
<br>
TMS570LS31x/21x 16/32-Bit RISC Flash Microcontroller<br>
Technical Reference Manual<br>
Literature Number: SPNU499B<br>
<br>
26.2.3 SCI Baud Rate<br>
<br>
  SCICLK Frequency = VCLK Frequency / (P + 1 + M / 16)<br>
<br>
  Asynchronous baud value = SCICLK Frequency / 16<br>
<br>
So the substraction of one corresponds to the manual.<br>
<br>
Actual code does not use M part. It would be problem if it is<br>
leftover from some boot/monitor but it is part of BRS 32-bit<br>
register which is overwritten in the whole, so such problem<br>
should not appear either.<br>
<br>
So I vote against the proposed change for now and suggest<br>
to do analysis what happens in the computation and what<br>
are input values and output. Change would/could affect<br>
negatively large number of combinations of the baudrate<br>
and clocks.<br>
<br>
I would consider to discuss if the rounding formula<br>
could/should be updated, but I think that it is the best<br>
which cane be achieved for rations which do not result<br>
in exact ratio.<br>
<br>
  (BSP_PLL_OUT_CLOCK + baudrate / 2) / baudrate;<br>
<br>
If there is interrest then code can be enhanced by fraction<br>
dividers for SCI/LIN peripheral case. The field with variant<br>
should be added into tms570_sci_context and in this case<br>
the alternative formula can be used<br>
<br>
  long long bauddiv;<br>
  bauddiv = (BSP_PLL_OUT_CLOCK * 16ll + baudrate / 2) / baudrate;<br>
  ctx->regs->BRS = ((bauddiv >> 4) & 0xffffff) | ((bauddiv & 0xf) << 24);<br>
<br>
which should be rewritten after header for SCI/LIN update to<br>
<br>
  ctx->regs->BRS = TMS570_LIN_BRS_P(bauddiv >> 4) | TMS570_LIN_BRS_M(bauddiv & 0xf);<br></blockquote><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Best wishes,<br>
<br>
<br>
                Pavel<br>
--<br>
                Pavel Pisa<br>
    phone:      +420 603531357<br>
    e-mail:     <a href="mailto:pisa@cmp.felk.cvut.cz" target="_blank">pisa@cmp.felk.cvut.cz</a><br>
    Department of Control Engineering FEE CVUT<br>
    Karlovo namesti 13, 121 35, Prague 2<br>
    university: <a href="http://control.fel.cvut.cz/" rel="noreferrer" target="_blank">http://control.fel.cvut.cz/</a><br>
    personal:   <a href="http://cmp.felk.cvut.cz/~pisa" rel="noreferrer" target="_blank">http://cmp.felk.cvut.cz/~pisa</a><br>
    projects:   <a href="https://www.openhub.net/accounts/ppisa" rel="noreferrer" target="_blank">https://www.openhub.net/accounts/ppisa</a><br>
    CAN related:<a href="http://canbus.pages.fel.cvut.cz/" rel="noreferrer" target="_blank">http://canbus.pages.fel.cvut.cz/</a><br>
    RISC-V education: <a href="https://comparch.edu.cvut.cz/" rel="noreferrer" target="_blank">https://comparch.edu.cvut.cz/</a><br>
    Open Technologies Research Education and Exchange Services<br>
    <a href="https://gitlab.fel.cvut.cz/otrees/org/-/wikis/home" rel="noreferrer" target="_blank">https://gitlab.fel.cvut.cz/otrees/org/-/wikis/home</a><br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a></blockquote></div></div></div></div>