Dlaczego zerowanie flag przerwa? w AVR nast?puje po wpisaniu 1

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:

formatting link

Reply to
slawek7
Loading thread data ...

Użytkownik "slawek7" snipped-for-privacy@wp.pl napisał w wiadomości news: snipped-for-privacy@g4g2000hsf.googlegroups.com...

Zapewne między innymi po to, żeby można było wyzerować taką flagę jednym rozkazem - zapisu rejestru.

Maciek

Reply to
Maciej Wywrocki

No niby tak na tej stronie jest napisane, ale przecież jak dajesz 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.

Reply to
slawek7

Użytkownik "slawek7" snipped-for-privacy@wp.pl napisał w wiadomości news: snipped-for-privacy@w3g2000hsg.googlegroups.com...

No bo właśnie zapis "1" powoduje skasowanie flagi przerwania. Jeżeli przerwanie chcesz wywołać programowo - po prostu wywołaj funkcję obsługującą je.

Maciek

Reply to
Maciej Wywrocki

A czytałeś ten FAQ podany w linku:

formatting link
Oni tam o tym piszą ale niezbyt zrozumiale, jakoś pokrętnie, czy nie?

Reply to
slawek7

Użytkownik "slawek7" snipped-for-privacy@wp.pl napisał w wiadomości news: snipped-for-privacy@q75g2000hsh.googlegroups.com...

No i właśnie tak jest. Generalnie chodzi o to, by móc jednym rozkazem OUT _skasować_ wybraną flagę w rejestrze. To, czy kasujemy ją wpisując wartość bitu równą 0 czy 1, jest sprawą drugorzędną (w AVR jest o akurat 1).

No a w czym tkwi problem?

Maciek

Reply to
Maciej Wywrocki

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. To na pewno gdzieś jest napisane tylko ja nie mogę dostać się do tegop gdzie.

czyli inaczej dlaczego własnie kasowanie jest poprzez 1.

Reply to
slawek7

Użytkownik "slawek7" snipped-for-privacy@wp.pl napisał w wiadomości news: snipped-for-privacy@q75g2000hsh.googlegroups.com...

Najistotniejszą różnicą jest chyba to, że w 51 można było kasować i ustawiać flagi przerwań, a w AVR tylko kasować. A czy zerem czy jedynką, to już chyba akademickie rozważania ... Pewnie tak ze względu na hardware procka wygodniej było.

Maciek

Reply to
Maciej Wywrocki

slawek7 pisze:

A czy 8051 to ich projekt? AFAIR Intela. Więc po prostu się na niego nie oglądali i zrobili tak, jak im było wygodniej albo wg nich słuszniej.

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).
Reply to
Adam Dybkowski

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.