logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega8 AVR-GCC - USART_UDRE_vect nie wykonuje procedury

krasnool 10 Paź 2012 23:51 1755 3
  • #1 11399336
    krasnool
    Poziom 11  
    Witam,

    napisałem program korzystający z USART-u. Zmiana stanu na wybranych wejściach uC ma powodować wysyłanie trzybajtowych pakietów danych. Wysyłanie odbywa się za pomocą przerwania USART_UDRE_vect. I oto dziwna rzecz:
    Pomimo, iż w SREG ustawiony jest najstarszy bit, w UCSRA sprzęt wystawia flagę pustego bufora, czyli UDRE jest ustawiony i wreszcie w swojej procedurze nadawczej odblokowuję przerwanie pustego bufora danych czyli ustawiam UDRIE w UCSRB, to procedura zawarta w przerwaniu i tak nie robi.
    Ściśle rzecz ujmując uruchamia się kilkakrotnie i później "umiera".
    Wszystkie wartości bitów które podałem powyżej, sprawdziłem załączając ledę na jednym z portów. Inaczej rzecz ujmując przerwanie ma wszystko co tylko potrzebuje do uruchomienia procedury a jednak tego nie czyni lub czyni tylko kilka razy. Poniżej przedstawiam kod.


    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #2 11399382
    stanleysts
    Poziom 27  
    Gdzie tu jest coś z c++?
  • #4 11427026
    krasnool
    Poziom 11  
    Szanowny kolego eleproject, dziękuję za pomoc. To strzał w 10-kę :)
    Okazało się, że usart otrzymywał dane, które ustawiały z jakiegoś powodu bity błędów. Ponieważ procedura w przerwaniu odbierającym dane w takim przypadku nie odczytywała danych z bufora UDR to przerwanie w nieskończoność było generowane. Z tego też powodu prawdopodobnie przerwanie nadawcze nie mogło się "dopchać" do działania. Problem jest rozwiązany.
REKLAMA