Andrzej Kasprzak
Guest
Wed Nov 24, 2004 9:30 am
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
Marek Lewandowski
Guest
Wed Nov 24, 2004 7:13 pm
Andrzej Kasprzak wrote:
Quote:
Czy w AVR'ach mozna swobodnie ustawiac dowolne piny I/O
bez niebezpieczeństwa zatrzasniecia fałszywej informacji w rejestrze
pinu ustawionego jako WYJSCIE ?
tzn o o ci chodzi?
AFAIR to rejestry portów w AVR są read-modify-write, więc powinny być
odporne...
--
Marek Lewandowski ICQ# 10139051/GG# 154441
locustXpoczta|onet|pl
http://www.stud.uni-karlsruhe.de/~uyh0
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]
Adam Dybkowski
Guest
Thu Nov 25, 2004 12:47 am
Andrzej Kasprzak wrote:
Quote:
Czy w AVR'ach mozna swobodnie ustawiac dowolne piny I/O
bez niebezpieczeństwa zatrzasniecia fałszywej informacji w rejestrze
pinu ustawionego jako WYJSCIE ?
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ć.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
Andrzej Kasprzak
Guest
Thu Nov 25, 2004 10:10 am
Quote:
Czy w AVR'ach mozna swobodnie ustawiac dowolne piny I/O
bez niebezpieczeństwa zatrzasniecia fałszywej informacji w rejestrze
pinu ustawionego jako WYJSCIE ?
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.
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
Quote:
problemy były zmorą architektury 8051, ale w AVRach jest wszystko w
porządku.
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.
Quote:
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ć.
Tu widac że sporo ludzi przewinęło sie przez '51-ki i wiedzieli co trzeba
poprawic.
Pozdrawiam
Andrzej Kasprzak
Quote:
Andrzej Kasprzak
Guest
Thu Nov 25, 2004 10:12 am
Quote:
Czy w AVR'ach mozna swobodnie ustawiac dowolne piny I/O
bez niebezpieczeństwa zatrzasniecia fałszywej informacji w rejestrze
pinu ustawionego jako WYJSCIE ?
tzn o o ci chodzi?
AFAIR to rejestry portów w AVR są read-modify-write, więc powinny być
odporne...
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
Quote: