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

Jak działa zerowanie flag metodą R-M-W?

vp32 17 Sty 2020 11:06 438 3
REKLAMA
  • #1 18408472
    vp32
    Poziom 11  
    Cześć

    Natknąłem się na ciekawy przypadek, którego do końca nie rozumiem.
    W nocie dotyczącej AT90CAN128 (akurat ta była pod ręką, a nie w jakimś konkretnym celu) jest taki zapis dotyczący zerowania flag przerwań:

    This flag can generate an interrupt. It must be cleared using a read-modify-write software routine on the whole CANSTMOB register

    Szukając informacji znalazłem że chodzi tu o to, że flagi nie są zerowane jak typowe flagi w AVRach poprzez wpisanie 1 tylko jak zwykły rejestr zerem.

    Pytanie, o co dokładnie chodzi?
    Czy działa to tak
    1. CANSTMOB = 0;

    czy

    2. CANSTMOB = CANSTMOB & 0;


    PS. strona 261 noty
  • REKLAMA
  • #2 18408506
    simw
    Poziom 27  
    1 i 2 robią dokładnie to samo. Zerują cały rejestr więc to nie o to chodzi, raczej o:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W takim wypadku czyta, modyfikuje i zeruje interesujący bit, a resztę pozostawia bez zmian.
  • REKLAMA
  • #3 18414894
    vp32
    Poziom 11  
    Ja rozumiem jak działa instrukcja.
    Ja pytam raczej od strony uC.
    Czy do zerowania takich flag nie wystarczy CANSTMOB = 0;
    zakładając że chcemy jednym wpisem wyzerować wszystkie flagi w rejestrze a nie jedną konkretną.
REKLAMA