Oddzielam temat od poprzedniego ze względu na inną naturę problemu.
Master generuje przerwanie od Timera2 co 1.15ms. Transmisja SPI ustawiona jest na CLK/4 co przy ośmiu bitach daje czas transmisji równy 0.004ms. Co jedno tyknięcie timera wysyłany jest jeden bajt - zatem 0.004ms co 1.15ms. Działa to wszystko pięknie, bez lagów i przepełniania stosu.
Slave ma załadowany kod:
Właściwie nic poza obsługą transmisji SPI. Po zakończeniu wysyłania generowane jest przerwanie, które odbiera dane od mastera i przygotowuje paczkę do wysłania przy następny połączeniu. Koniec.
Co działa źle? Ano ten kod cały czas działa w przerwaniu, nie wychodząc i nie wykonując nic co znajduje się w pętli głównej. Krótko - inkrementacja nie następuje ani razu. Gdy przerzucimy ją do obsługi przerwania - inkrementacja następuje.
Dlaczego tworzy się tak ogromna kolejka przerwań od SPI? Czy nie powinna być ona sprzężona z czasem jaki generuje master na timerze? Na logikę przerwanie w slave'ie powinno wystąpić (+/- parę taktów CPU) co przerwanie od timera w masterze.
Jakieś wskazówki?
Master generuje przerwanie od Timera2 co 1.15ms. Transmisja SPI ustawiona jest na CLK/4 co przy ośmiu bitach daje czas transmisji równy 0.004ms. Co jedno tyknięcie timera wysyłany jest jeden bajt - zatem 0.004ms co 1.15ms. Działa to wszystko pięknie, bez lagów i przepełniania stosu.
Slave ma załadowany kod:
Kod: C / C++
Właściwie nic poza obsługą transmisji SPI. Po zakończeniu wysyłania generowane jest przerwanie, które odbiera dane od mastera i przygotowuje paczkę do wysłania przy następny połączeniu. Koniec.
Co działa źle? Ano ten kod cały czas działa w przerwaniu, nie wychodząc i nie wykonując nic co znajduje się w pętli głównej. Krótko - inkrementacja nie następuje ani razu. Gdy przerzucimy ją do obsługi przerwania - inkrementacja następuje.
Dlaczego tworzy się tak ogromna kolejka przerwań od SPI? Czy nie powinna być ona sprzężona z czasem jaki generuje master na timerze? Na logikę przerwanie w slave'ie powinno wystąpić (+/- parę taktów CPU) co przerwanie od timera w masterze.
Jakieś wskazówki?
