Witam,
Temat wszędzie wałkowany, a jednak nigdzie nie znalazłem rozwiązania mojego problemu.
Mam funckję, która w domyśle ma odbierać dwa bajty ze slave'a. Robi to tak:
addr jako parametr jest zawsze 0xAB. Slave natomiast jest zafiksowany aby ciągle wysyłać 0xA1.
Rezultatem jest d = 0xABA1, zamiast 0xA1A1. Natomiast gdy pomiędzy te dwa bloki umieszczę zwłokę - np 1ms. To odczytuje prawidłowo 0xA1A1.
Jedna atmega (master) pracuje na 16Mhz, SPI ustawione na 1Mhz. slave pracuje na 8Mhz. Dodam jeszcze, że na tej magistrali jest jeszcze drugi slave (ENC28J60).
Jakieś sugestie co może być źle?
pozdrawiam
Temat wszędzie wałkowany, a jednak nigdzie nie znalazłem rozwiązania mojego problemu.
Mam funckję, która w domyśle ma odbierać dwa bajty ze slave'a. Robi to tak:
SPDR = addr;
while(!(SPSR&(1<<SPIF)));
d=SPDR;
SPDR = addr;
while(!(SPSR&(1<<SPIF)));
d+=SPDR<<8;addr jako parametr jest zawsze 0xAB. Slave natomiast jest zafiksowany aby ciągle wysyłać 0xA1.
Rezultatem jest d = 0xABA1, zamiast 0xA1A1. Natomiast gdy pomiędzy te dwa bloki umieszczę zwłokę - np 1ms. To odczytuje prawidłowo 0xA1A1.
Jedna atmega (master) pracuje na 16Mhz, SPI ustawione na 1Mhz. slave pracuje na 8Mhz. Dodam jeszcze, że na tej magistrali jest jeszcze drugi slave (ENC28J60).
Jakieś sugestie co może być źle?
pozdrawiam