Witam,
Mój drugi post na elektrodzie więc bądźcie wyrozumiali. Postanowiłem zrobić nadawanie i odbieranie danych przy pomocy przerwań (pin NIRQ). Moduły działają w prostej maszynie stanów, są 3 stany:
-TRANSMIT: Inicjalizacja układów wewnętrznych w celu nadawania, transmisja danych
-RECEIVE: Inicjalizacja układów wewnętrznych w celu odbierania, Odbieranie danych
-IDLE: Wyłączenie wszystkich układów wewnętrznych
Domyślnym stanem jest IDLE.
Dane do wysłania pakowane są do bufora nadawczego i bajt po bajcie wysyłane w świat aż do napotkania znaku końca ramki. Sytuacja w przypadku odbiornika wygląda podobnie, odbieramy bajty aż dostaniemy bajt końca ramki.
Do wysyłania i odbierania stworzyłem dwie funkcje w których umieściłem pętle while na początku, aby zawsze czekały na zakończenie odbierania, bądź nadawania poprzedniej ramki.
W przypadku funkcji nadającej wszystko działa dobrze, dane wysyłane są bez problemu, natomiast w przypadku funkcji odbierającej program zawiesza się po odebraniu pierwszej ramki w drugim wywołaniu funkcji odbierajacej(dokładnie w pętli while). Czasem odbierze kilka ramek i się zawiesza, być może jest to kwestai czasowa, lecz wprowadzanie opóźnień nie pomaga.
Procedura obsługi przerwania:
Funkcję modułowe:
Z góry dziękuję za pomoc
Mój drugi post na elektrodzie więc bądźcie wyrozumiali. Postanowiłem zrobić nadawanie i odbieranie danych przy pomocy przerwań (pin NIRQ). Moduły działają w prostej maszynie stanów, są 3 stany:
-TRANSMIT: Inicjalizacja układów wewnętrznych w celu nadawania, transmisja danych
-RECEIVE: Inicjalizacja układów wewnętrznych w celu odbierania, Odbieranie danych
-IDLE: Wyłączenie wszystkich układów wewnętrznych
Domyślnym stanem jest IDLE.
Dane do wysłania pakowane są do bufora nadawczego i bajt po bajcie wysyłane w świat aż do napotkania znaku końca ramki. Sytuacja w przypadku odbiornika wygląda podobnie, odbieramy bajty aż dostaniemy bajt końca ramki.
Do wysyłania i odbierania stworzyłem dwie funkcje w których umieściłem pętle while na początku, aby zawsze czekały na zakończenie odbierania, bądź nadawania poprzedniej ramki.
W przypadku funkcji nadającej wszystko działa dobrze, dane wysyłane są bez problemu, natomiast w przypadku funkcji odbierającej program zawiesza się po odebraniu pierwszej ramki w drugim wywołaniu funkcji odbierajacej(dokładnie w pętli while). Czasem odbierze kilka ramek i się zawiesza, być może jest to kwestai czasowa, lecz wprowadzanie opóźnień nie pomaga.
Procedura obsługi przerwania:
Kod: C / C++
Funkcję modułowe:
Kod: C / C++
Z góry dziękuję za pomoc
