Kilka pytan o AVR



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Kilka pytan o AVR
Date: Wed, 3 Sep 2003 20:55:10 +0200


Witam,

rozpoczalem pisanie pewnego sterowniczka na
AVR 2313, a poniewaz to moj pierwszy program
na procesorki tej rodziny, to mam kilka pytan.

1. Do czego wlasciwie sluza rejestry r0-r15?
Z lektury Instruction Set Reference wynika, ze
sa one "ulomne" w stosunku do r16-r31, gdyz
nie moga byc argumentami wielu instrukcji. Czy
sa one przeznaczone wylacznie do pamietania
wynikow posrednich w dluzszych procedurach
czy tez maja jakies specjalne przeznaczenie?

2. Czy podczas resetu od watchdoga wszystkie
urzadzenia peryferyjne przyjmuja stan domyslny,
czy tez musze je zainicjowac recznie? Tzn. jesli
w dokumentacji dla urzadzenia (timera, komparatora
itd.) jest podane "initial state", to pojawia sie on
po kazdym rodzaju resetu, czy tylko po power-on?

3. Czy odczyt bajtu z EEPROMu zajmuje 1 cykl?

4. Dlaczego w symulatorze (AVRStudio 4) nie widac
poprawnej zawartosci EEPROMu tylko jakies smieci?
Plik hex wygenerowany przez kompilator tez wydaje sie
pokrywac wiecej pamieci EEPROM niz zainstalowano
w ukladzie:

0A0000001027E80364000A00010065
00000001FF

choc moje dane to:

.eseg

bcd:
.dw 10000
.dw 1000
.dw 100
.dw 10
.dw 1

Jak sobie poradzic z tym problemem?

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "GrzesieG" <gayos_at_nospam_USUN.interia.pl>
Subject: Re: Kilka pytan o AVR
Date: Wed, 3 Sep 2003 23:00:25 +0200


"Piotr Wyderski" napisał:
1. Do czego wlasciwie sluza rejestry r0-r15?
Z lektury Instruction Set Reference wynika, ze
sa one "ulomne" w stosunku do r16-r31, gdyz
nie moga byc argumentami wielu instrukcji. Czy
sa one przeznaczone wylacznie do pamietania
wynikow posrednich w dluzszych procedurach
czy tez maja jakies specjalne przeznaczenie?

Są ogólnego przeznaczenia, tak jak i r16-r31. Nie mogą być argumentami przy
operacjach bezpośrednich: ldi, cpi, subi, sbci, andi, ori, oraz sbr, cbr,
ser i mnożeniach. Ograniczenie wynika pewnie z długości instrukcji (16bit
ale dużo rozkazów). A specjalne znaczenie mają rejestry r0 i r1 (mnożenie).
Ja przyjąłem, że r0-r3 to rejestry operacyjne i nie wykorzystuję ich do
pamiętania wyników.

2. Czy podczas resetu od watchdoga wszystkie
urzadzenia peryferyjne przyjmuja stan domyslny,

Raczej tak, gdyż reset powoduje start programu od początku, więc jeśli nie
napiszesz procedury rozpoznającej źródło resetu, to i tak masz inicjalizację
jak dla power-on. Na pewno nie kasuje się RAM.

3. Czy odczyt bajtu z EEPROMu zajmuje 1 cykl?

;;;; przykład z programu:
sbi EECR, EERE ; ustaw znacznik odczytu (procesor czeka 4 cykle na bajt z
EE)
in ee_dane, EEDR
;;;;

4. Dlaczego w symulatorze (AVRStudio 4) nie widac
poprawnej zawartosci EEPROMu tylko jakies smieci?

Nie wiem, ja nie miałem problemów

Jak sobie poradzic z tym problemem?

Zrezygnowałem z sekcji .eseg i umieściłem na początku programu procedurę
sprawdzającą stan pewnej (tylko nie pierwszej!) komórki EEPROM. Jak wartość
jest różna to następuje inicjalizacja EEPROM. Zaleta - brak pliku *.eep

--
GrzesieG


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Roland" <rolandz_at_nospam_poczta.fm>
Subject: Re: Kilka pytan o AVR
Date: Thu, 4 Sep 2003 08:48:56 +0200


Zrezygnowałem z sekcji .eseg i umieściłem na początku programu procedurę
sprawdzającą stan pewnej (tylko nie pierwszej!) komórki EEPROM. Jak wartość
jest różna to następuje inicjalizacja EEPROM. Zaleta - brak pliku *.eep

Przy malej pamieci ogromna wada - niepotrzebne zuzycie pamieci...

Roland



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Kilka pytan o AVR
Date: Thu, 4 Sep 2003 10:47:25 +0200



GrzesieG wrote

Są ogólnego przeznaczenia, tak jak i r16-r31. Nie mogą być argumentami
przy operacjach bezpośrednich: ldi, cpi, subi, sbci, andi, ori, oraz sbr,
cbr,
ser i mnożeniach.

O to wlasnie mi chodzi -- skoro nie moga byc argumentami dla najbardziej
uzytecznych instrukcji, to trudno nazwac je "rejestrami ogolnego
przeznaczenia". :-)

Ograniczenie wynika pewnie z długości instrukcji (16bit ale dużo
rozkazów).

Najprawdopodobniej tak, choc mozliwosc wykonania clr na dowolnym
rejestrze, a ser tylko na r16--r31 jest nieco irytujaca.

Raczej tak, gdyż reset powoduje start programu od początku, więc jeśli nie
napiszesz procedury rozpoznającej źródło resetu, to i tak masz
inicjalizację
jak dla power-on.

Tylko pytanie jak duzo trzeba zainicjalizowac w power-on. Reset wywolany
przez watchdog oznacza, ze z powodu bledu oprogramowania lub zalocenia
elektromagnetycznego procesor znajduje sie w nieznanym stanie. I teraz
nie wiem co dokladnie robic podczas resetu: czy wszystkie zasoby po resecie
z dowolnego zrodla przechodza w stan domyslny (ktory w wielu przypadkach
odpowiada temu, co ustawiam podczas inicjalizacji), czy tez ich stan jest
nieznany i musze zainicjalizowac wszystkie zasoby, nawet takie z ktorych
nie korzystam (wyzerowac flagi zgloszen przerwan od UART-u, powylaczac
zrodla przerwan zewnetrznych ktore powinny same sie wylaczych podczas
resetu itd.) -- to jest "nieco" paranoiczne podejscie i dlatego chce sie
dowiedziec czy nie przesadzam. :-) BTW, czy na 2313 mozna wykryc
"sprzetowo", ze zrodlem resetu byl watchdog?

4. Dlaczego w symulatorze (AVRStudio 4) nie widac
poprawnej zawartosci EEPROMu tylko jakies smieci?

Nie wiem, ja nie miałem problemów

Juz sobie z tym poradzilem, wyglada na to, ze zawartosc EEPROM-u
trzeba zaladowac recznie wybierajac odpowiednie polecenie w menu
-- wowczas dziala.

Zrezygnowałem z sekcji .eseg i umieściłem na początku programu procedurę
sprawdzającą stan pewnej (tylko nie pierwszej!) komórki EEPROM.

Dlaczego nie pierwszej? Sa jakies problemy z EEPROMem?

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Grzegorz" <control_at_nospam_slupsk.pl>
Subject: Re: Kilka pytan o AVR
Date: Thu, 4 Sep 2003 12:38:14 +0200



Użytkownik "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl> napisał w
wiadomości news:bj6uad$3nq$1_at_nospam_nemesis.news.tpi.pl...

GrzesieG wrote

Są ogólnego przeznaczenia, tak jak i r16-r31. Nie mogą być argumentami
przy operacjach bezpośrednich: ldi, cpi, subi, sbci, andi, ori, oraz
sbr,
cbr,
ser i mnożeniach.

O to wlasnie mi chodzi -- skoro nie moga byc argumentami dla najbardziej
uzytecznych instrukcji, to trudno nazwac je "rejestrami ogolnego
przeznaczenia". :-)

Ograniczenie wynika pewnie z długości instrukcji (16bit ale dużo
rozkazów).

Najprawdopodobniej tak, choc mozliwosc wykonania clr na dowolnym
rejestrze, a ser tylko na r16--r31 jest nieco irytujaca.


Witam
Bo tak naprawdę instrukcje clr i ser nie istnieją :-)
clr r5 to tak naprawdę eor r5,r5 (operacja eor wykonywana jest na wszystkich
rejestrach)
ser r16 to naprawdę ldi r16,255 (operacja ldi działa tylko na rejestrach
górnych)
podobnie nie istnieje instrukcja np lsl r2 bo jest to poprostu add r2,r2

mnemoniki tych instrukcji są niejako wirtualne i trorzone przez assembler.


--
Pozdrawiam
Grzegorz Kurczyk

http://www.control.slupsk.pl
ftp://ftp.control.slupsk.pl
grzegorz_at_nospam_control.slupsk.pl
Gadu-Gadu: 1445218




========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Arek Karas" <karas_at_nospam_2com.pl>
Subject: Re: Kilka pytan o AVR
Date: Thu, 4 Sep 2003 20:13:46 +0200



O to wlasnie mi chodzi -- skoro nie moga byc argumentami dla najbardziej
uzytecznych instrukcji, to trudno nazwac je "rejestrami ogolnego
przeznaczenia". :-)
Ale wiele innych instrukcji moze na nich operowac.
To sie przydaje np. przy operacjach na liczbach wielobajtowych - nie trzeba
zapisywac i odczytywac z RAMu wynikow posrednich, co znacznie przyspiesza
program.
A tak uzywa rejestrow kompilator C IARa:
r0 - r1 - rejestry robocze, np. wynik mul, lpm
r2 - r15 - rejestry na zmiene lokalne
r16 - r23 - przekazywanie parametrow do funkcji oraz rejestry robocze
r24 - r27 - rejestry robocze
r28 - r29 - wskaznik stosu , przez ktory sa przekazywane parametry nie
miszczace sie w rejestrach
r30 - r31 - rejestry robocze


Raczej tak, gdyż reset powoduje start programu od początku, więc jeśli
nie
napiszesz procedury rozpoznającej źródło resetu, to i tak masz
inicjalizację
jak dla power-on.

Tylko pytanie jak duzo trzeba zainicjalizowac w power-on. Reset wywolany
przez watchdog oznacza, ze z powodu bledu oprogramowania lub zalocenia
elektromagnetycznego procesor znajduje sie w nieznanym stanie. I teraz
nie wiem co dokladnie robic podczas resetu: czy wszystkie zasoby po
resecie
z dowolnego zrodla przechodza w stan domyslny (ktory w wielu przypadkach
odpowiada temu, co ustawiam podczas inicjalizacji), czy tez ich stan jest
nieznany i musze zainicjalizowac wszystkie zasoby, nawet takie z ktorych
nie korzystam (wyzerowac flagi zgloszen przerwan od UART-u, powylaczac
zrodla przerwan zewnetrznych ktore powinny same sie wylaczych podczas
resetu itd.) -- to jest "nieco" paranoiczne podejscie i dlatego chce sie
dowiedziec czy nie przesadzam. :-) BTW, czy na 2313 mozna wykryc
"sprzetowo", ze zrodlem resetu byl watchdog?

W dokumentacji procesora przy opisie kazdego rejestru pisze wyraznie jak
jest inicjalizowany po resecie.
I nie ma znaczenia, co bylo powodem resetu. Wszystkie rejestry sa inicjowane
tak jak pisze w dok.

W 2313 nie mozna sprawdzic programowo, co bylo zrodlem resetu, opcja taka
jest dostepna w nowszych prockach, np. ATmega8, sa do tego odpowiednie flagi
w jednym z rejestrow.

Jesli chodzi o 2313 to czasem zdazaly sie problemy z poprawnym startem po
wlaczeniu zasilania. Wewnetrzny uklad PowerOnReset nie dziala w tym
procesorze dosc dobrze, dobrze jest dac zewnetrzny uklad resetu.
I pamietaj, ze komorka EEPROM o adresie 0 moze zostac przypadkiem skasowana,
lepiej w niej nic nie zapisywac.

Pozdrawiam
AK





========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Artur Lipowski <LAL_at_nospam_pro.onet.pl>
Subject: Re: Kilka pytan o AVR
Date: Fri, 05 Sep 2003 08:12:37 +0200


Arek Karas wrote:
...
W 2313 nie mozna sprawdzic programowo, co bylo zrodlem resetu, opcja taka
Własnie chodzi o to, że programowo to się da łatwo zrobić, nie ma tylko
wygodnego wsparcia w sprzęcie (tak jak w seriach mega lub tiny)

Pozdrawiam,
--
Artur Lipowski


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Kilka pytan o AVR
Date: Fri, 5 Sep 2003 21:39:02 +0200



Artur Lipowski wrote:

Własnie chodzi o to, że programowo to się da łatwo zrobić, nie ma tylko
wygodnego wsparcia w sprzęcie (tak jak w seriach mega lub tiny)

Tak, dokladnie o to chodzi: stan procesora w chwili zadzialania
watchdoga jest z definicji nieustalony, wiec programowe wykrywanie
bledu jest dosc zlozone. Wsparcie sprzetowe sporo by uproscilo
czesc diagnostyczna.

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!not-for-mai