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
... 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
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ś
) ... 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
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 ]