EDAboard.com | EDAboard.eu | EDAboard.de | EDAboard.co.uk | RTV forum PL | NewsGroups PL

AVR32 - jak ruszyc z tym prockiem

elektroda.net NewsGroups Forum Index - Elektronika Polska - AVR32 - jak ruszyc z tym prockiem

Goto page 1, 2, 3  Next

SM
Guest

Fri Nov 06, 2009 3:59 pm   



Witam,

Czy kto¶ z obecnych tu bawi³ siê juz prockami AVR32?
Mam u siebie AT32UC3B0256 i nie mogê z nim zacz±æ.

AVR32 Studio - nie wiem jak utworzyæ prosty projekt
- jeden plik w asemblerze do skompilowania, aby
uzyskaæ gotowy plik do za³adowania do procka poprzez
bootloader po USB.

No to powalczy³em z konsoli z avr32-as:

.org 0x80000000

always:
rjmp always

i nie ³yka - wypisuje b³±d ¿e adresu org (wcale mnie
to nie dziwi bo 0x80000000 na 32-bit ze znakiem
jest przecie¿ ujemne).

W PDF jest:
- SRAM od 0x00000000, wielko¶æ 32KB
- FLASH od 0x80000000, wielko¶æ 256KB

Czy kto¶ mo¿e pomóc jak co¶ tak prostego ruszyæ?

Przeæwiczy³em ju¿ wiele ARMów (Atmela, Analoga, Philipsa)
i nigdy nie mia³em takich problemów jak z tym AVR32.

Pozdrawiam,
SM

SM
Guest

Fri Nov 06, 2009 5:07 pm   



....nie wiem czy poprawnie, ale co¶ "ruszy³o"

¼ród³o:

.text

.global _start

_start:
rjmp always

always:
rjmp always

asemblacja:
avr32-as.exe --noexecstack -R --no-pic --no-linkrelax -march=ucr3 -o
main.out main.s

linkowanie:
avr32-ld.exe --oformat elf32-avr32 -m avr32elf_uc3b0256 -Ttext
0x80002000 main.out

Adres ³adowania/uruchomienie 0x80002000 aby nie zadeptaæ
bootloadera.

Chocia¿ nie wiem jeszcze czy powy¿sze jest poprawne. £adowanie
chyba przez BatchISP.

SM

SM
Guest

Sat Nov 07, 2009 12:45 pm   



....a jednak wymiêkam z tym prockiem. niby wszystko OK a
nie moge nawet zmieniæ pinu procka.

SM

AK
Guest

Sat Nov 07, 2009 2:36 pm   



SM pisze:
Quote:
...a jednak wymiękam z tym prockiem. niby wszystko OK a
nie moge nawet zmienić pinu procka.

SM
Na stronie atmela sa przykaldowe projekty!

A co do obslugi AVRStudio32 to pocztaj o Eclipse.

Pozdr
AK

Adam Dybkowski
Guest

Sat Nov 07, 2009 11:22 pm   



AK pisze:

Quote:
...a jednak wymiękam z tym prockiem. niby wszystko OK a
nie moge nawet zmienić pinu procka.

Na stronie atmela sa przykaldowe projekty!
A co do obslugi AVRStudio32 to pocztaj o Eclipse.

Tak poza tym aby nie wyważać otwartych drzwi weź na warsztat gotowy
system operacyjny (np. Nut/OS). Jest tam masa sterowników, z których
można korzystać (USB, serial, I2C itp). A możliwość odpalenia kilku
procesów to dla niektórych i tak wisienka na torcie.

--
Adam Dybkowski
http://dybkowski.net/

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

SM
Guest

Sun Nov 08, 2009 6:33 am   



AK pisze:
Quote:
SM pisze:
...a jednak wymiękam z tym prockiem. niby wszystko OK a
nie moge nawet zmienić pinu procka.

SM
Na stronie atmela sa przykaldowe projekty!...

Niestety wszystko w C.

SM

SM
Guest

Sun Nov 08, 2009 6:34 am   



Adam Dybkowski pisze:
Quote:
AK pisze:

...a jednak wymiękam z tym prockiem. niby wszystko OK a
nie moge nawet zmienić pinu procka.

Na stronie atmela sa przykaldowe projekty!
A co do obslugi AVRStudio32 to pocztaj o Eclipse.

Tak poza tym aby nie wyważać otwartych drzwi weź na warsztat gotowy
system operacyjny (np. Nut/OS). Jest tam masa sterowników, z których
można korzystać (USB, serial, I2C itp). A możliwość odpalenia kilku
procesów to dla niektórych i tak wisienka na torcie.


Ja nie chcę używać żadnych gotowych OS-ów. Chce mieć tylko i
wyłącznie swój soft w ASMie żeby wycisnąć z procka ile się da.

Wśród przykładów Atmela wszystkie są "złożone" - nie znalazłem
właśnie takiego prostego przykładu jak mój - kilka linijek
w ASMie.

SM

SM
Guest

Sun Nov 08, 2009 8:13 am   



....walczê dalej

wyczyta³em ¿e BatchISP:
- kasuje flash pomijaj±c bootloader
- programuje flash nadpisuj±c bootloader
wiêc trzeba go do³±czyæ do swojego programu.

zgra³em go wiêc (flash od adresu 0x80000000 do 0x80001FFF) do³±czy³em
jak BIN do swojego ¼ród³a - nie dzia³a:

.equ GPIO_BASE, 0xFFFF1000
.equ GPIO_GPERS, 0x04
.equ GPIO_ODERS, 0x44
.equ GPIO_OVRS, 0x54

.macro mov.w rd, imm
mov \rd, LO(\imm)
orh \rd, HI(\imm)
.endm

.text

.global _start

_start:
.incbin "isp.bin" // 8192bytes (saved flash from 0x0000 to 0x1FFF)

program_start:
mov.w R0, GPIO_BASE

mov.w R1, (1 << 3)
st.w R0[GPIO_GPERS], R1

mov.w R1, (1 << 3)
st.w R0[GPIO_ODERS], R1

mov.w R1, (0 << 3)
st.w R0[GPIO_OVRS], R1

always:
rjmp always

_stop:

zgra³em jeszcze raz pomijaj±c dwa pierwsze bajty i wstawiaj±c tam
"trampoline" - nie dzia³a:

.equ GPIO_BASE, 0xFFFF1000
.equ GPIO_GPERS, 0x04
.equ GPIO_ODERS, 0x44
.equ GPIO_OVRS, 0x54

.macro mov.w rd, imm
mov \rd, LO(\imm)
orh \rd, HI(\imm)
.endm

.text

.global _start

_start:
rjmp program_start

.incbin "isp.bin" // 8190bytes (saved flash from 0x0002 to 0x1FFF)

program_start:
mov.w R0, GPIO_BASE

mov.w R1, (1 << 3)
st.w R0[GPIO_GPERS], R1

mov.w R1, (1 << 3)
st.w R0[GPIO_ODERS], R1

mov.w R1, (0 << 3)
st.w R0[GPIO_OVRS], R1

always:
rjmp always

_stop:

asemblacja:
avr32-as.exe -R -march=ucr1 -o main.out main.s

linkowanie:
avr32-ld.exe --oformat ihex -m avr32elf_uc3b0256 -Ttext 0x80000000 -Tbss
0x00000000 -o main.hex main.out

programowanie:
batchisp -device at32uc3b0256 -hardware usb -operation erase f memory
flash blankcheck loadbuffer main.hex program verify start reset 0

BatchISP pisze ¿e programuje, weryfikuje, wszystko OK, a i tak
pin PA3 nie chce przyj±æ poziomu niskiego. (Pomijam ju¿ to, ¿e
flash jest od 80000000 a BatchISP wszystko pokazuje od 0).
Generuje plik HEX od 80002000, BatchISP i tak ³aduje od 0.
No i teraz nie wiem co w³a¶ciwie to zero oznacza. Ale gówno.

No to zabra³em siê za prosty przyk³ad z AVR Studio - sterowanie wyj¶cie.
Za³adowa³em. Dzia³a. Chcia³em podejrzeæ co gdzie sie ³aduje.
Przerabiam ELF na HEX poprzez ObjCopy - wywala b³±d!


Ale syf. Powoli wymiêkam. Robi³em ju¿ na chyba 8 ró¿nych rodzinach
procków (od 8bit do ARMów) ale takiego problemu z uruchomieniem
to jeszcze nie mia³em!

SM

SM
Guest

Sun Nov 08, 2009 8:53 am   



MAM! DZIA£A!

Dla zainteresowanych podajê przepis na uruchomienie AT32UC3B0256
bez ca³ego zbêdnego "baga¿u".

1. Programem BatchISP zgraæ bootloader (potrzebny gdy programujemy
u¿ywaj±c BatchISP poprzez USB - zawsze zadeptuje bootloader nie
uwzglêdniaj±c adresów ³adowania):

batchisp -device at32uc3b0256 -hardware usb -operation erase f memory
flash addrange 0x0 0x01FFF read savebuffer "C:\isp.hex" hex386

2. Programem Hex2Bin przerobiæ "isp.hex" na "isp.bin"

3. Napisaæ prosty program, np. taki jak poni¿ej (generowanie
przebiegu prostok±tnego na PA3): Zapisaæ pod nazw± "main.s".

.equ GPIO_BASE, 0xFFFF1000
.equ GPIO_GPERS, 0x04
.equ GPIO_ODERS, 0x44
.equ GPIO_OVR, 0x50

.text

.global _start

_start:
.incbin "isp.bin"

program_start:

// init

mov R0, LO(GPIO_BASE)
orh R0, HI(GPIO_BASE)
mov R1, (1 << 3)
st.w R0[GPIO_GPERS], R1
mov R1, (1 << 3)
st.w R0[GPIO_ODERS], R1

// pêtla

main_loop:

// zerowanie PA3

mov R1, (0 << 3)
st.w R0[GPIO_OVR], R1

// opó¼nienie

mov R2, 1000
del1: sub R2, R2, 1
brne del1

// ustawienie PA3

mov R1, (1 << 3)
st.w R0[GPIO_OVR], R1

// opó¼nienie

mov R2, 1000
del2: sub R2, R2, 1
brne del2

// powrót do pêtli

rjmp main_loop

_stop:

4. Asemblacja poprzez:

avr32-as.exe -R -march=ucr1 -o main.out main.s

5. Linkowanie poprzez:

avr32-ld.exe --oformat ihex -m avr32elf_uc3b0256 -Ttext 0x80000000 -Tbss
0x00000000 -o main.hex main.out

6. £adowanie do procka poprzez:

batchisp -device at32uc3b0256 -hardware usb -operation erase f memory
flash blankcheck loadbuffer main.hex program verify start reset 0

Po za³adowaniu program sam siê uruchomi. Bêdzie siê tak¿e uruchamia³
po resecie. Aby znów zaprogramowaæ procek nale¿y zewrzeæ do masy
PA13 i zresetowaæ go - wejdzie do bootloadera (programowania ISP
poprzez USB).

SM

Adam Dybkowski
Guest

Sun Nov 08, 2009 9:16 pm   



SM pisze:

Quote:
Ja nie chcę używać żadnych gotowych OS-ów. Chce mieć tylko i
wyłącznie swój soft w ASMie żeby wycisnąć z procka ile się da.

Wśród przykładów Atmela wszystkie są "złożone" - nie znalazłem
właśnie takiego prostego przykładu jak mój - kilka linijek
w ASMie.

Ale coś się tak uczepił asemblera. Istnieje przecież na świecie
kompilator gcc - czyli bez dodatkowych wydatków można pisać programy w
C. To nie PIC w końcu. No a program napisany w C/C++ zawsze w
przyszłości będziesz mógł łatwo przenieść np. na bardziej wydajną
platformę. Po co zawracać sobie głowę asemblerem właściwie (tzn. znać
warto aby rozumieć, co wyprodukował kompilator - ale nie warto pisać
samemu w asm).

--
Adam Dybkowski
http://dybkowski.net/

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

SM
Guest

Mon Nov 09, 2009 5:51 am   



Quote:
Ale coś się tak uczepił asemblera.

Bo dla mnie ważna jest szybkość procka.
W ASMie sam mogę dobrać sobie każdą instrukcję, najbardziej
optymalną, nie ma zbędnych "dodatków" jakie generuje kompilator.
Żaden kompilator języka wysokiego poziomu nie da tak
wydajnego kodu jak pisanie samemu w ASMie.

Quote:
Istnieje przecież na świecie
kompilator gcc - czyli bez dodatkowych wydatków można pisać programy w
C. To nie PIC w końcu. No a program napisany w C/C++ zawsze w
przyszłości będziesz mógł łatwo przenieść np. na bardziej wydajną
platformÄ™.

Osiągi jakie ma AVR32 idealnie mi pasują. Do tej pory robiłem na
ARMach Atmela, Philipsa, Analoga i brakowało mi wielu rzeczy jakie
ma AVR32 (np. sprzętowego szybkiego dzielenia).
Spośród procków mających kilkadziesiąt MIPSów i będących w cenie
AVR32, to te wypadajÄ… najlepiej.

Quote:
Po co zawracać sobie głowę asemblerem właściwie (tzn. znać
warto aby rozumieć, co wyprodukował kompilator - ale nie warto pisać
samemu w asm).

Przy dużych projektach robię tak, że procedurki pisze w ASMie
(przede wszystkim przerwania) a potem łącze to w logiczną całość
w C. Wtedy mam idealne jak dla mnie rozwiÄ…zanie - w miarÄ™ szybkie
(dzięki ASM) a jednocześnie logicznie przejrzyste działanie programu
jakie daje język wysokiego poziomu.

Fajne były ARMy Atmela SAM7S ale okazało się że mają problemy
ze startem przy zbyt wolnym narastaniu napięcia zasilającego.
Po prostu nie startował. Zależało mi na procku który ma
zewnętrzny reset, abym mógł mocno filtrowac napięcie zasilania
(układ pracuje w mocno zakłóconym środowisku), i puścić go
kiedy będzie już można do tego sprzętowe dzielenie. SAM7S tego
nie miały.

SM

cepu69
Guest

Mon Nov 09, 2009 7:16 pm   



SM wrote:

Quote:
Ja nie chcê u¿ywaæ ¿adnych gotowych OS-ów. Chce mieæ tylko i
wy³±cznie swój soft w ASMie ¿eby wycisn±æ z procka ile siê da.
Jedno bynajmniej nie wyklucza drugiego.

Apropo OS'a:
Typow implementacja watkow we wlasnym, wycisnietym sofcie ->
Odpytywanie non-stop wszystkich pocedurek czy czasem ktoras nie ma czegos do
zrobienia - jakiez to szybkie i wydajne;)
Wszak przeciez scheduler to diabel wcielony, ktory zzera nasze cene zasoby a
nasza "petla glowna" nie.

Quote:
Ale co¶ siê tak uczepi³ asemblera.

Bo dla mnie wa¿na jest szybko¶æ procka.
W ASMie sam mogê dobraæ sobie ka¿d± instrukcjê, najbardziej
optymaln±, nie ma zbêdnych "dodatków" jakie generuje kompilator.
¯aden kompilator jêzyka wysokiego poziomu nie da tak
wydajnego kodu jak pisanie samemu w ASMie.
Taaaa. Moze pora "wlaczyc" optymalizacje w kompilatorze Wink


Jerry1111
Guest

Mon Nov 09, 2009 11:04 pm   



SM wrote:
Quote:
Ale coś się tak uczepił asemblera.

Bo dla mnie ważna jest szybkość procka.
W ASMie sam mogę dobrać sobie każdą instrukcję, najbardziej
optymalną, nie ma zbędnych "dodatków" jakie generuje kompilator.
Żaden kompilator języka wysokiego poziomu nie da tak
wydajnego kodu jak pisanie samemu w ASMie.

Poeksperymentuj - gcc czesto jest 'dosc' pomyslowy. Mi sie juz od kilku
lat nie kalkuluje czasowo pisanie w ASM. Jedynie krytyczne czasowo
przerwania pisze w ASM (a i to staram sie to ograniczyc do wrzucenia
danej do kolejki do dalszego przetwarzania w C).

Quote:
Fajne były ARMy Atmela SAM7S ale okazało się że mają problemy
ze startem przy zbyt wolnym narastaniu napięcia zasilającego.
Po prostu nie startował.

AVR32 (na pewno UC3A0512) ma to samo - jak za wolno napiecie narasta to
procek sie zatrzaskuje i grzeje, wiec uwazaj. W pdfie nigdzie o tym nie
znalazlem.


--
Jerry1111

Adam Dybkowski
Guest

Mon Nov 09, 2009 11:53 pm   



SM pisze:

Quote:
Ale coś się tak uczepił asemblera.

Bo dla mnie ważna jest szybkość procka.
W ASMie sam mogę dobrać sobie każdą instrukcję, najbardziej
optymalną, nie ma zbędnych "dodatków" jakie generuje kompilator.
Żaden kompilator języka wysokiego poziomu nie da tak
wydajnego kodu jak pisanie samemu w ASMie.

No to pościgaj się z gcc. Duet kompilator+optymalizator potrafi czasami
tak wymyślić sekwencję instrukcji, dodatkowo ze zmienioną kolejnością,
że w ASM musiałbyś długo siedzieć i kombinować, czy W OGÓLE da się to
napisać jeszcze optymalniej. A biorąc pod uwagę czas zużyty na pisanie
programu (czyli kasa w firmie na to wydana) - to ASM jest kompletnie
nieopłacalny. Dolicz jeszcze czas usuwania błędów z tysięcy linii kodu w
asemblerze, brrrr.

--
Adam Dybkowski
http://dybkowski.net/

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

SM
Guest

Tue Nov 10, 2009 6:20 am   



Quote:
...No to pościgaj się z gcc. Duet kompilator+optymalizator potrafi czasami
tak wymyślić sekwencję instrukcji, dodatkowo ze zmienioną kolejnością,
że w ASM musiałbyś długo siedzieć i kombinować, czy W OGÓLE da się to
napisać jeszcze optymalniej.

No to może trochę się nim pobawie. Tak z ciekawości zobaczę jaki kod
mu wyjdzie z włączona na maksa optymalizacją. Tym bardziej że muszę
napisać sobie obsługę USB-CDC w ASMie. Raz już pisałem dla
SAM7S, teraz muszę ją przepisać na AVR32. Zobacze jak to wyjdzie w ASM
i GCC.

Quote:
... A biorąc pod uwagę czas zużyty na pisanie
programu (czyli kasa w firmie na to wydana) - to ASM jest kompletnie
nieopłacalny. Dolicz jeszcze czas usuwania błędów z tysięcy linii kodu w
asemblerze, brrrr.


Mam taką metodę pisania programów że błędy raczej mi się nie zdarzają,
więc ASM to nie problem.

SM

Goto page 1, 2, 3  Next

elektroda.net NewsGroups Forum Index - Elektronika Polska - AVR32 - jak ruszyc z tym prockiem

RTV map EDAboard.com map News map EDAboard.eu map EDAboard.de map EDAboard.co.uk map