Panowie ale ja już niejednokrotnie pisałem na tym forum, że to całkowicie KARKOŁOMNA i wręcz wypaczona droga aby programując w C na 8 bitowcu, i chcąc odebrać coś czy wysłać w postaci kilku czy więcej bajtów zaczynać od "rozbebeszania" że tak powiem podstawowych funkcji do wysyłania pojedynczego bajtu
![Smutny :(](https://forum.atnel.pl/images/smilies/icon_e_sad.gif)
... no kilka dni temu był iście podobny temat tyle że tam kolega pytał o przesyłanie 4 czy 8 bajtów za pomocą kodowania Manchester ... i zaczął podobnie ....
tzn owszem dałoby radę to zrobić ale .... ale nie tędy droga w C
![Smutny :(](https://forum.atnel.pl/images/smilies/icon_e_sad.gif)
GIGANTYCZNĄ ZALETĄ w C jest to - że jak piszesz obsługę CZEGOKOLWIEK jakieś transmisji itp ... to zakoduj sobie w pamięci że ZAWSZE ale to ZAWSZE - PIERWSZY KROK to napisanie funkcji do odbierającej czy wysyłającej najmniejszy fragment zjadliwy dla twojego procka. Czyli np w 8-bitowcu będziesz pisał funkcję do wysyłania/odbierania pojedynczego bajtu, w 16-bitowym procku funkcję do transferu słowa a w ARM ? często do transferu podwójnego słowa
A co później - a później to już ZAWSZE tak samo - gdy masz najmniejszy klocuszek LEGO to składasz z niego większą funkcję, po prostu wywołując w przypadku 8-bitowca 4-krotnie ten najmniejszy klocek
to tyle odnośnie idei
a teraz - oczywiście że przesunięcia są tu tak samo dobre jak unie - tyle że trzeba jedno i drugie dobrze zakodować. Tzn ta twoja funkcja
ReadDWordSpi()
nie działa z prostego powodu .... o czym za chwilę - ale pomyśl sobie - gdybyś miał za chwilę z jakiegoś innego układu po SPI odebrać nie 4 a 8 bajtów to co ? pisałbyś funkcję do odbioru zmiennej 64-bitowej ? ... ok a jeśli miałbyś odebrać 12 bajtów to co? ... to QUNIEC tak ? nie ma większych zmiennych ... ?
dlatego podpowiem ci co robisz źle w tej swojej funkcji ale na prawdę uwierz mi - przerób ją tak żeby 4 razy wywołać funkcję odbioru jednego bajtu - pomyśl - przecież już przez to zaoszczędzisz niepotrzebnemu traceniu pamięci FLASH ok ???
a teraz dlaczego masz kłopot z przesunięciami - tak na szybko i na oko - bo pewnie znowu (piszę znowu bo już chyba kiedyś też miałeś z tym problem - ale zwróciłem ci uwagę i poradziłeś sobie a teraz pewnie zapomniałeś
![Puszcza oko ;)](https://forum.atnel.pl/images/smilies/icon_e_wink.gif)
) ... otóż zapomniałeś o tym:
http://atnel.pl/domyslna-promocja-do-typu-int.htmla u ciebie - hmm sam się przyjrzyj pod tym kątem tej linijce w swojej funkcji:
DwordADC = SPDR << 24;
i myślę że od razu dostrzeżesz co w niej się złego dzieje
![Puszcza oko ;)](https://forum.atnel.pl/images/smilies/icon_e_wink.gif)
ale jak nie to pytaj śmiało dalej
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]