RTV forum PL | NewsGroups PL

Zerowanie flag przerwań w AVR: dlaczego zapis 1 zmienia ich stan i intencje twórców?

Dlaczego zerowanie flag przerwań w AVR następuje po wpisaniu

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Zerowanie flag przerwań w AVR: dlaczego zapis 1 zmienia ich stan i intencje twórców?

slawek7
Guest

Fri Jul 13, 2007 6:19 am   



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

Maciej Wywrocki
Guest

Fri Jul 13, 2007 8:04 am   



Użytkownik "slawek7" <sholojda@wp.pl> napisał w wiadomości
news:1184303948.544067.114800@g4g2000hsf.googlegroups.com...
Quote:
CZeść.
Czy zastanawiał się ktś z Was kiedyś dlaczego a uC AVR zerownaie flag
przerwań następuje poprzez wpisanie do nich wartości =1.

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

Maciek

slawek7
Guest

Fri Jul 13, 2007 8:25 am   



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.

Maciej Wywrocki
Guest

Fri Jul 13, 2007 9:19 am   



Użytkownik "slawek7" <sholojda@wp.pl> napisał w wiadomości
news:1184311543.435066.324260@w3g2000hsg.googlegroups.com...
Quote:
I dlaczego zapis 1 jeśli było tam zero nie spowoduje wygenerowania
programowego przerwania.

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

slawek7
Guest

Fri Jul 13, 2007 11:46 am   



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?

Maciej Wywrocki
Guest

Fri Jul 13, 2007 12:06 pm   



Użytkownik "slawek7" <sholojda@wp.pl> napisał w wiadomości
news:1184323603.814786.103610@q75g2000hsh.googlegroups.com...
Quote:

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

slawek7
Guest

Fri Jul 13, 2007 1:43 pm   



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.

Maciej Wywrocki
Guest

Fri Jul 13, 2007 1:57 pm   



Użytkownik "slawek7" <sholojda@wp.pl> napisał w wiadomości
news:1184330637.795886.318370@q75g2000hsh.googlegroups.com...
Quote:
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.

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

Adam Dybkowski
Guest

Sat Jul 14, 2007 2:02 am   



slawek7 pisze:

Quote:
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.

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).

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

elektroda NewsGroups Forum Index - Elektronika Polska - Zerowanie flag przerwań w AVR: dlaczego zapis 1 zmienia ich stan i intencje twórców?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map