CZeść.
Czy zastanawiał się ktś z Was kiedyś dlaczego a uC AVR zerownaie flag
przerwań następuje poprzez wpisanie do nich wartości =1.
Nie miałen okazji tego przetestować ale czy to prawda, że jeśli jest
zero i wpiszemy na miejsce flagi danego przerwania to nie zostanie
zgłoszone przerwanie, natomiast jeśli było wartość 1 to zostanie po
prostu wyzerowana.
Ale najawżniejsze pytanie. Jaka mogła być intencja twórców AVRów aby
zerowanie odbyło się poprzez wpisanie 1. Bo przezcież w uC serii 8051
jest jakoś logicznie i nawet dzięki temu można wygenerować przerwanie
programowo, a AVR ta sztuczka nie działa.
Czytałem ten FAQ ale nie wiele mi on wyjaśnia:
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_intbits
Maciek
zapis 1 to to samo byłoby jakbym zapisał 0, czy nie?
I dlaczego zapis 1 jeśli było tam zero nie spowoduje wygenerowania
programowego przerwania.
Maciek
A czytałeś ten FAQ podany w linku:
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_intbits
Oni tam o tym piszą ale niezbyt zrozumiale, jakoś pokrętnie, czy nie?
No a w czym tkwi problem?
Maciek
Nie chodzi mi właśnie o sprawę techiczną tylko dlaczego projektanci
AVRów założyli że kasowanie odbywa się 1. Chodzi mi o ta drugorzędną
sprawę. Był na pewno jakiś cel w tym że zmienili to w stosunku od
8051.
gdzie.
czyli inaczej dlaczego własnie kasowanie jest poprzez 1.
Maciek
BTW: W procesorach ARM od Atmela dopiero jest fajnie. Najczęściej w
rejestrach konfigurujących peryferia, przerwania czy przestrzeń I/O
większość operacji robi się wpisując jedynki na odpowiednie bity. Czyli
na przykład aby ustawić jakiś pin wyjściowy, wystarczy wpisać jedynkę na
odpowiadającą mu pozycję w rejestrze "zapalania pinów". Aby wyzerować
pin, trzeba wpisać jedynkę do rejestru "gaszenia pinów". W każdej chwili
można też odczytać bieżącą wysyłaną kombinację z rejestru "stanu wyjścia
pinów" no i oczywiście bieżący stan linii z całkiem innego rejestru
"stanu pinów" (coś jak rejestry np. PORTA i PINA w AVRach).
To bardzo wygodne podejście, pozwalające zmieniać stan dowolnego pinu
lub kilku, nie ruszając przy tym pozostałych i to bez potrzeby
sprawdzania, jak są obecnie skonfigurowane inne piny. Prawie tak samo
sprawy się mają z włączaniem/wyłączaniem przerwań (niezależne rejestry
"włączania" i "wyłączania", gdzie zawsze wpisuje się jedynki) i innych
ustawień dwustanowych. IMHO bardzo wygodne rozwiązanie tyle że mocno
zwiększa liczbę rejestrów SFR (nieistotne w ARMach mających adresowanie
32-bitowe).