Witam,
Już kilka dni siedzę nad tą sprawą i nie mogę jej rozwiązać.
Dwie AtMega8 nie chcą się dogadać przez SPI. Szukałem już w internecie i na Elektrodzie, bezskutecznie. Było kilka podobnych tematów, ale żaden mi nie pomógł.
Ten temat jest najbliżej mojego problemu, ale nawet po użyciu źródeł z "rozwiązanego" problemu nie chce to poprawnie chodzić - nawet gdy ilość przesłanych bajtów ograniczę do jednego.
Problem polega na tym, że dane z Mastera muszą być przesłane aż trzykrotnie, żeby Slave je odebrał. Pierwsze przesłanie aktywuje w slave przerwanie i Slave zawiesza się w bezczynności na którymś z poleceń SPIIN. Kolejne przesłanie odbiera dane w dziwnej (losowej) kolejności, lub odbiera jakieś śmieci, a dopiero trzecie przesłanie danych odbiera poprawne wartości. Sytuacja taka jest niedopuszczalna, bo przy takim transferze slave jest na 15s (3 pętle mastera) odcięty od realizacji swoich zadań.
Dlaczego polecenie SPIIN zatrzymuje kontroler? Chyba nie powinno się tak dziać, nawet jeśli nie przychodzi żaden bajt.
Bardzo proszę o pomoc, bo już nie mam pomysłu co może być nie tak. Poniżej zamieszczam moje listingi:
Master:
Slave:
Już kilka dni siedzę nad tą sprawą i nie mogę jej rozwiązać.
Dwie AtMega8 nie chcą się dogadać przez SPI. Szukałem już w internecie i na Elektrodzie, bezskutecznie. Było kilka podobnych tematów, ale żaden mi nie pomógł.
Ten temat jest najbliżej mojego problemu, ale nawet po użyciu źródeł z "rozwiązanego" problemu nie chce to poprawnie chodzić - nawet gdy ilość przesłanych bajtów ograniczę do jednego.
Problem polega na tym, że dane z Mastera muszą być przesłane aż trzykrotnie, żeby Slave je odebrał. Pierwsze przesłanie aktywuje w slave przerwanie i Slave zawiesza się w bezczynności na którymś z poleceń SPIIN. Kolejne przesłanie odbiera dane w dziwnej (losowej) kolejności, lub odbiera jakieś śmieci, a dopiero trzecie przesłanie danych odbiera poprawne wartości. Sytuacja taka jest niedopuszczalna, bo przy takim transferze slave jest na 15s (3 pętle mastera) odcięty od realizacji swoich zadań.
Dlaczego polecenie SPIIN zatrzymuje kontroler? Chyba nie powinno się tak dziać, nawet jeśli nie przychodzi żaden bajt.
Bardzo proszę o pomoc, bo już nie mam pomysłu co może być nie tak. Poniżej zamieszczam moje listingi:
Master:
Code: basic4gl
Slave:
Code: basic4gl