Bezpośrednie ustawianie, resetowanie pinów w AVR

Nov 24, 2004 4 Replies

Czy w AVR'ach mozna swobodnie ustawiac dowolne piny I/O bez niebezpieczeństwa zatrzasniecia fałszywej informacji w rejestrze pinu ustawionego jako WYJSCIE ? Tak jest niestety w PICach, ST6 i ST7 - chciałem trochę oszczedzić kodu wiec wolałbym pisąc na piny wprost. Prosze o jakiś link ewentualnie bo nic nie znalazłem na ten temat



Pozdrawiam



Andrzej



tzn o o ci chodzi? AFAIR to rejestry portów w AVR są read-modify-write, więc powinny być odporne...

Można spokojnie. W AVRach są oddzielne rejestry odczytu stanu portu, ustawiania stanu portu (i pull-up'ów) oraz ustawiania kierunku linii portu. Ustawienie jednego bitu w porcie, którego niektóre linie są wejściami, przykładowo:

PORTA |= (1 << nrbitu);

to instrukcja read-modify-write na rejestrze wyjściowym PORTA - jej działanie nie zależy od aktualnego stanu linii wejściowych. Takie problemy były zmorą architektury 8051, ale w AVRach jest wszystko w porządku.

BTW: W procesorach ARM jeszcze lepiej wymyślili: pod inny adres zapisuje się maskę bitów, które chcemy ustawić w I/O, a pod inny maskę bitów, które chcemy zgasić.

Dokładnie o to mi chodziło - to mocno upraszcza operację na portach - oczywiscie czasami. Ale jeżeli nie jest to konieczne to rzeczywiście set pin czy clear pin oszczedza troche kodu.

Takie

dokładnie, wiec wśród "starych" programistó pokutuje przekoannie że trzeba zawsze operowac na całym bajcie- porcie robiąc maski na pinach które chce sie rzeczywiście zmienic.

Tu widac że sporo ludzi przewinęło sie przez '51-ki i wiedzieli co trzeba poprawic.

Pozdrawiam

Andrzej Kasprzak

tez na to liczę ale w systemach bezobsługowych nie mozna sobie pozolić na szaleństwa i nie przewidziane przez projaktanta działanie wiec chce się upewnić.

Pozdrawiam

Andrzej Kasprzak

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required