Hallo,
ich suche einen Lösungsansatz, um schnell die Bits eines Bytes zu
tauschen. An einem 8Bit Port des Mikrocontrollers habe ich einen FT245
angeschlossen. Aus layouttechnischen Gründen sind die Bit-Reihenfolgen
am FT245 und am Controller verschieden.
Mein erster Ansatz wäre es, das Ganze über eine Look-Up-Table zu lösen
mit 256 Einträgen (bzw. 2 Stück: Eine für die Ausgabe, eine für die
Eingabe). Das könnte ich sogar entweder auf der Mikrocontrollerseite
oder aber auf der PC-Seite, wo die Daten entgegengenommen werden, tun..
Das sollte eigentlich funktionieren, ich muss die Tabellen nur noch
aufstellen. Meine Frage: gibt es einen anderen sinnvollen Ansatz?
Flash-Speicher ist zur Genüge vorhanden, mit RAM würde ich wenn möglich
gern sparsam umgehen.
Grüße
Christian
Ein Byte mit dem Originalwert und dann die Bits umgekehrt mittels
einer Schleife in ein zweites Byte übertragen ?
Ich würde das mit 2 Bitmasken angehen, Startwert zum auslesen mit
0x80, zum Schreiben mit 0x01 ... Dann Bits schieben ...
Joachim Drechsel schrieb:> Ein Byte mit dem Originalwert und dann die Bits umgekehrt mittels> einer Schleife in ein zweites Byte übertragen ?>> Ich würde das mit 2 Bitmasken angehen, Startwert zum auslesen mit> 0x80, zum Schreiben mit 0x01 ... Dann Bits schieben ...
Wenn eins der Bytes nur rückwärts wäre, wäre das die Lösung meiner Wahl.
Die Vertauschung ist aber leider komplett durcheinander..
Grüße
Christian
Vermutlich werd ich es über die LUT umsetzen, das wird am Schnellsten
zum Ziel führen. Meine Frage war auch eher aus Interesse, ob es
vielleicht einen "eleganteren" Weg gibt..
Die Zuordnung
Controller (Cx) --- FTDI (Dx)
C0 --- D3
C1 --- D6
C2 --- D5
C3 --- D7
C4 --- D1
C5 --- D2
C6 --- D4
C7 --- D0
Bei der Suche nach 'Bitreihenfolge' werden 63 Threads angezeigt. Auf die
Schnelle:
Beitrag "Re: Byte umdrehen"
Irgendwo steht das auch noch mundgerecht für 8Bit.
Für die obige Zuordnung wirft das folgende Sequenz raus:
1
swap r24
2
bst r24,0
3
ror r24
4
bld r24,7
5
mov __tmp_reg__,r24
6
bst r0,0
7
bld r24,2
8
bst r0,2
9
bld r24,3
10
bst r0,3
11
bld r24,7
12
bst r0,6
13
bld r24,0
14
bst r0,7
15
bld r24,6
Zunächst wird die Eingabe um 3 rotiert, so daß schon mal Bits 1, 4 und 5
an der richtigen Position sind. Die restlichen Bits werden dann von Hand
kopiert.
Ralf G. schrieb:> Bei der Suche nach 'Bitreihenfolge' werden 63 Threads angezeigt. Auf die> Schnelle:> Beitrag "Re: Byte umdrehen"> Irgendwo steht das auch noch mundgerecht für 8Bit.
Die Suchfunktion hab ich schon bemüht mit verschiedenen Varianten von
Bitreihenfolge, tauschen usw. Dabei kommen auch einige Threads,
allerdings geht es da (soweit ich es gefunden habe!) immer nur darum,
ein Byte von MSB-first auf LSB-first bzw. umgedreht umzuwandeln. Wenn Du
Dir mein Zuordnungsproblem oben anschaust, wirst Du merken, dass das
hier aber so wohl nicht gehen wird :-)
Johann L. schrieb:> Falls es um avr-gcc geht: Neue Versionen haben ein extra built-in für> solches Bitgefummel:
Das klingt natürlich perfekt. Das AVR-Studio 5 basiert meines Wissens
nach auf AVR-GCC, das müsste also passen. Ich werd ich mir gleich mal
anschauen.
Grüße
Christian
Christian schrieb:> immer nur darum,> ein Byte von MSB-first auf LSB-first bzw. umgedreht umzuwandeln.
Nicht richtig gesucht, hier werden so ziemlich alle Möglichkeiten
durchgekaut:
Beitrag "bit invertieren"
MWS schrieb:> Nicht richtig gesucht, hier werden so ziemlich alle Möglichkeiten> durchgekaut:> Beitrag "bit invertieren"
Du hast Recht. Danke, ich werds mir durcharbeiten :-)