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

Atmega328p - Softwerowy UART i zerowanie flagi INT0 BASCOM

knmp 08 Sty 2017 11:19 1035 5
REKLAMA
  • #1 16182153
    knmp
    Poziom 26  
    WItam

    W projekcie na Atmega328p wymagane są dwa UARTy, próbuję zrealizować drugi jako programowy którego odbiór danych miałby być uruchamiany przerwaniem INT0, mam kłopot z zerowaniem flagi EIFR przerwania, odbiór 1 bajtu danych wywołuje 2x wejście do przerwania, kombinuję by wejście do przerwania kasowało rejestry flagi INT0 jednak obojętnie czy piszę 0 czy 1 do EIFR to tak mam zawsze dwie 2x wywołane przerwanie... pytanie jak skutecznie to rozwiązać, ew. jak dobrze zrobić programowy UART który nie blokuje głównego programu a jest obsługiwany tylko wtedy gdy przyjdzie na niego bajt danych

    "
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    "
  • REKLAMA
  • #2 16182237
    kamyczek
    Poziom 38  
    knmp napisał:
    Eifr = &B00000011
    Set Eifr


    Sprawdziłeś co robi ten zapis bo coś mi się wydaje że tu masz problem , jak skasować wskaźnik przerwania masz w PDFie atmegi . Wywołanie przerwania powoduje zapis 1 w eifr kasuje się go manualnie zapisując wartość 1 , ale zeruje go też instrukcja powrotu z przerwania "reti" więc jak go ustawiasz manualnie przerwanie ko kasuje a ty go kolejny raz ustawiasz to masz 2 przerwania jedno po drugim . Instrukcja eifr= .... wpisuje wartość do eifr , instrukcja set eifr wpisuje do eifr wartość 0xff i masz kolejne przerwanie . Po prostu nie znasz znaczenia instrukcji które używasz i to jest problem.
  • REKLAMA
  • #3 16182286
    knmp
    Poziom 26  
    Set EIRF to już etap kombinowania, pomijając ten zapis próbowałem z Eifr = &B00000011 jak i Eifr = &B00000000 efekt jest ten sam 2x przerwanie... zamysł jest taki by wyzerować flagę zgłoszenia przerwania INT0 czyli ostatni bit rejestru EIFR a to mi nie działa... i chyba nie da się wymusić przerwania programowo wpisując w rejestr, to musi pochodzić pinu INT0
  • REKLAMA
  • Pomocny post
    #4 16182373
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 16184100
    knmp
    Poziom 26  
    Dziękuję za odpowiedz, z tym waitms to przyznaję umieściłem je tylko poglądowo by wstawić kawałek problematycznego kodu celem pokazania o co mi chodzi, program naturalnie działa, podpytam jeszcze co czynią te wstawki asemblerowe:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #6 16184123
    kamyczek
    Poziom 38  
    Jedna odkłada na stos r24 i sreg a druga je przywraca ze stosu ;)
REKLAMA