<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On 7 May 2012, at 13:26, <a href="mailto:fpc-pascal-request@lists.freepascal.org">fpc-pascal-request@lists.freepascal.org</a> wrote:</div><blockquote type="cite"><div><font class="Apple-style-span" color="#000000"><br></font><br>Message: 4<br>Date: Mon, 07 May 2012 12:59:58 +0200<br>From: Koenraad Lelong <<a href="mailto:koen1@de-brouwerij.be">koen1@de-brouwerij.be</a>><br>Subject: Re: RE : RE : [fpc-pascal] Reversing bit-order of byte<br>To: <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a><br>Message-ID: <<a href="mailto:4FA7AB2E.9050706@de-brouwerij.be">4FA7AB2E.9050706@de-brouwerij.be</a>><br>Content-Type: text/plain; charset=UTF-8; format=flowed<br><br>On 04-05-12 14:53, Koenraad Lelong wrote:<br><blockquote type="cite">On 04-05-12 14:31, Thomas Schatzl wrote:<br></blockquote>...<br><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Compared to the other variants (e.g. with the multiplies, except for the<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">table lookup) you already save a lot of cycles - although I guess they<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">would be sufficiently fast anyway, considering the typical uart speeds.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Thomas<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Hi Thomas,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">My processor flags : -Wpstm32f103rb -Cparmv7m.<br></blockquote><blockquote type="cite">The #23 is no typo, I need to reverse 9 bits. I'm using 9 bit<br></blockquote><blockquote type="cite">synchronous transmission. My first usart-tests were at 4Mbps. The person<br></blockquote><blockquote type="cite">that made the driver recommends max. 6Mbps.<br></blockquote><br>Hi,<br><br>I tested some things this weekend. Strange things happen ;-)<br>The code does not work. Trying to debug with gdb, around the code I got <br>an error, something like 'recovering from a double fault'.<br><br>After searching the STM32 forum of ST I found that some toolchains <br>assemble the rbit instruction in a wrong way. Someone made a work-around :<br><span class="Apple-tab-span" style="white-space:pre"> </span>.word<span class="Apple-tab-span" style="white-space:pre">       </span>0xFxAyFA9y<span class="Apple-tab-span" style="white-space:pre">  </span>//RBIT Rx,Ry x, y = 0 to F<br>My Freepascal version is this :<br>     .word<span class="Apple-tab-span" style="white-space:pre"> </span>0xFA90<br>     .word<span class="Apple-tab-span" style="white-space:pre">      </span>0xF0A0<br>Then when I disassemble in gdb, I get rbit r0,r0<br>Disassembling with objdump gives a strange result.<br><br>I'm going to try this as soon as I can.<br><br>Regards,<br><br>Koenraad Lelong.<br></div></blockquote></div><br><div><br></div><div>I have beed using this:-</div><div><br></div><div><div>function bitreverse(input:dword):dword;assembler;nostackframe;  {single instruction rbit r0,r0  bit reverses r0}</div><div>asm</div><div>.long 0xf0a0fa90 </div><div>end;</div></div><div><br></div><div>quite successfully.</div><div><br></div><div>You can then choose which byte(s) you need using normal pascal functions.</div><div><br></div><div>regards,</div><div>Geoffrey</div></body></html>