Witam!
ATmega32 16MHz jako slave odbiera dwa bajty po SPI 1MHz ( 15cm taśmy 10 żyłowej )od mastera LPC2148 . Jeżeli jest włączone tylko SPI, a inne przerwania są wyłączone jest wszystko dobrze. Jeżeli włączę przerwanie od timera2 generowane co 100us to zdarza się że atmega gubi jeden bajt i krzaczy się cała transmisja, ale po jakimś czasie jak zgubi następny to wraca wszystko do normy.
Czy istnieje możliwość, że podczas przerwania generowanego przez SPI przerwanie zgłaszane przez timera2 psuje całość?
Myślałem, aby wyłączać inne przerwania podczas obsługi SPI, ale problem jest w tym, że zarówno dokładne odmierzanie czasu jak i poprawna transmisja SPI jest dla mnie kluczowa ponieważ jest to układ regulacji silnikiem prądu stałego gdzie timer2 wyznacza częstotliwość pracy regulatora, a przez SPI przesyłana jest wartość referencyjna.
Za wszelkie wskazówki będę wdzięczny.
Poniżej obsługa przerwań:
ATmega32 16MHz jako slave odbiera dwa bajty po SPI 1MHz ( 15cm taśmy 10 żyłowej )od mastera LPC2148 . Jeżeli jest włączone tylko SPI, a inne przerwania są wyłączone jest wszystko dobrze. Jeżeli włączę przerwanie od timera2 generowane co 100us to zdarza się że atmega gubi jeden bajt i krzaczy się cała transmisja, ale po jakimś czasie jak zgubi następny to wraca wszystko do normy.
Czy istnieje możliwość, że podczas przerwania generowanego przez SPI przerwanie zgłaszane przez timera2 psuje całość?
Myślałem, aby wyłączać inne przerwania podczas obsługi SPI, ale problem jest w tym, że zarówno dokładne odmierzanie czasu jak i poprawna transmisja SPI jest dla mnie kluczowa ponieważ jest to układ regulacji silnikiem prądu stałego gdzie timer2 wyznacza częstotliwość pracy regulatora, a przez SPI przesyłana jest wartość referencyjna.
Za wszelkie wskazówki będę wdzięczny.
Poniżej obsługa przerwań:
Kod: C / C++