Cześć,
mam zapytanie dotyczące przerwania IRQ w module radiowym nRF24L01+. Moduł pracuje jako nadajnik, wykorzystuję w nim funkcję potwierdzenia odbioru, pomyślne odebranie danych przez odbiornik powinno skutkować wystawieniem w nadajniku stanu niskiego na IRQ. Niestety nie zawsze tak się dzieje tzn. zwykle chwilę po nadaniu pakietu IRQ przechodzi w stan niski na ok. 19 ms i powraca do stanu wysokiego, lecz zdarza się, że IRQ pozostaje w stanie niskim, aż do przeprowadzenia ponownej transmisji, co widać na poniższym zrzucie z analizatora stanów logicznych (kanał 0 - pin IRQ). Pakiety są jednak zawsze odbierane poprawnie.

Zauważyłem, że problem występuje rzadziej, gdy pakiety nadawane są w większych odstępach czasu tzn. > 1s. Co może być przyczyną braku powrotu IRQ do stanu wysokiego? Po każdej transmisji następuje reset(), który ustawia rejestr STATUS na wartość 0x70.
Funkcję odpowiedzialną za przeprowadzenie transmisji oraz reset umieszczam poniżej.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po stronie odbiornika, wykorzystuje IRQ jako przerwanie dla mikrokontrolera, iż są odebrane nowe dane, które musi przesłać po USART do PC (procedura obsługi przerwania to właśnie transmisja po USART odebranego własnie pakietu danych). Tam działa to bez problemu.
Dziękuje za zainteresowanie moim problemem, liczę na pomoc i pozdrawiam!