ZiZi schrieb:
> Und was passiert mit dem SPI CS zwischen den beiden Aufrufen?
> 2 8 bits muss nicht unbedingt gleich 1 16 sein...
> Ausserdem muss dann das Byte-Ordering beachtet werden.
> Schau mal, ob Dein Controller nicht die SPI Wortlaenge
> umschalten kann (kenne den AVR nicht genau genug).
Stimmt, dazu habe ich im Datenblatt folgendes gefunden.
"16-bit data transfer can be achieved by writing two data bytes to UDRn.
A UART transmit complete
interrupt will then signal that the 16-bit value has been shifted out."
also kann ich meine 16bit in meiner Transfer-Funktion nacheinander in
UDR1 schreiben
1 | unsigned char SPI2_MasterTransfer (unsigned char c1,unsigned char c2)
|
2 | {
|
3 | while (!(UCSR1A & (1<<UDRE1)));
|
4 |
|
5 | UCSR1A |= (1 << TXC1);
|
6 |
|
7 | UDR1 = c1;
|
8 | UDR1 = c2;
|
9 |
|
10 | //while (!(UCSR1A & (1<<RXC1)));
|
11 |
|
12 | return UDR1;
|
13 | }
|
14 |
|
15 | //Aufruf
|
16 | ReData = SPI_Transfer(110,110);
|
Lothar Miller schrieb:
> und damit auch:
> 11011101101110 -- deine 110, 110
> 0110111001101110 -- und meine...
Natürlich, beim kopieren aus dem Rechner ist die erste 0 verloren
gegangen.