AVR - jak skopiowac bit

Przerwania przeciez musza zachowac rejestr stanu i odtworzyc go przed powrotem z przerwania. Nie programowalem duzo w assemblerze AVR, ale wydaje mi sie ze bez jednego skoku sie nie da. Kod ktory proponuje to:

rejest Rr zawiera tu wartosc w ktorej jest interesujacy nas bit SET ; ustaw bit T SBRS Rr, numer_bitu_zrodlowego ; bit = 1 -> omin nastepny rozkaz CLT ; wyzeruj bit T CLI ; atomowa zmiana zawartosci portu - zablokuj przerwania IN Rd, port_wyjsciowy ; stan portu BLD Rd, numer_bitu_docelowego ; ustaw odpowiedni bit na rowny T OUT port_wyjsciowy, Rd ; wpisz nowa zawartosc portu SEI ; przywrocenie stanu przerwan

przy czym w oznaczeniach Rd i Rr d i r to numery z odpowiednich zakresów (np r <0, 31>, a d <0, 15> - musisz sprawdzić w dokumentacji procesora)

Jak w przerwaniach nie modyfikujesz port_wyjsciowy mozesz zrezygnowac z instrukcji CLI oraz SEI

Mariusz

Reply to
MariuszC
Loading thread data ...
Reply to
invalid unparseable

SJ przemówił ludzkim głosem:

Jak masz takie wymagania co do kontrolera to przesiądź się na ciscowe procki renesasa. Znajdziesz tam instrukcje do manipulowania pojedynczymi bitami w _całej_ przestrzeni adresowej, operacje logiczne (and, or, xor, także z negacją jednego z argumentów) na pojedynczych bitach, warunkowe kopiowanie jednej z _dwóch_ wartości do bitów, rejestrów, ramu itd.

Reply to
Zbych

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.