AVR32 - jak ruszyc z tym prockiem

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
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

Re: AVR32 - jak ruszyc z tym prockiem
...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

Re: AVR32 - jak ruszyc z tym prockiem
...a jednak wymiękam z tym prockiem. niby wszystko OK a
nie moge nawet zmienić pinu procka.

SM

Re: AVR32 - jak ruszyc z tym prockiem
SM pisze:
Quoted text here. Click to load it
Na stronie atmela sa przykaldowe projekty!
A co do obslugi AVRStudio32 to pocztaj o Eclipse.

Pozdr
AK

Re: AVR32 - jak ruszyc z tym prockiem
AK pisze:

Quoted text here. Click to load it


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 /

We've slightly trimmed the long signature. Click to see the full one.
Re: AVR32 - jak ruszyc z tym prockiem
Adam Dybkowski pisze:
Quoted text here. Click to load it

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

Re: AVR32 - jak ruszyc z tym prockiem
SM pisze:

Quoted text here. Click to load it

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 /

We've slightly trimmed the long signature. Click to see the full one.
Re: AVR32 - jak ruszyc z tym prockiem
Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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



Re: AVR32 - jak ruszyc z tym prockiem

Quoted text here. Click to load it
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.    

Quoted text here. Click to load it
Taaaa. Moze pora "wlaczyc" optymalizacje w kompilatorze ;)


Re: AVR32 - jak ruszyc z tym prockiem
Quoted text here. Click to load it

Zawsze będzie wolniej. Nawet pomijając osługę zdarzeń, semaforów,
mutexów, czyli robiąc w przerwaniu tylko obsługę przełączania wątków,
to sama ta obsługa przełączania zajmuje czas. Trzeba do kontekstu
zapisać stan bierzącego wątku i odtworzyć stan kolejnego
wątku z tablicy.
Tym bardziej że ja potrzebuję akurat w przerwaniu wywoływanym
z częstotliwością kilkuset herzów liczyć trajektorię dla
4 osi silników wraz z zachowaniem trapezowego profilu prędkości.

SM

Re: AVR32 - jak ruszyc z tym prockiem

Quoted text here. Click to load it
I to jest wlasnie clue problemu. Kto powiedzial, ze zawsze : zmierzyles,
sprawdziles czy tylko tak twierdzisz bo tam jest tyle kodu???

Quoted text here. Click to load it
Rescheduling jest wykonywany nie non-stop tylko gdy :
1. przyjdzie systemowe przerwanie zegarowe np. 10ms
2. w przerwaniu budzisz watek o wyzszym priorytecie niz biezacy
Pamietaj, ze przelacznie watkow jest silnie zoptymalizowani i jest napisane
w asemblerze - trzeba na stos zrzucic kontekst czyli w ARMie 16 rejestrow
natomiast twoja petla glowna tlucze non-stop.

Wszelkie elemnty programowania wspolbieznego sa uzyte tylko wtedy gdy ich
uzyjesz (same z siebie nie obciazaja systemu) a wygoda jest duza. Juz widze
te wydajna synchronizacje zadan na flagach;)
 
Quoted text here. Click to load it
Ze stosu i jest to raptem kilkadziesiat instrukcji procesora i jestes w
nowym watku, procedurki na flagach zuzywaja wiecej czasu procesora -
pamietaj ze sa wykonywne non-stop
 
Quoted text here. Click to load it
A to wyjasnia wszystko - czasochlone obliczenia w procedurze obslugi
przerwania. Nie twierdze, ze jest to zle w kazdym przypadku tj. gdy masz
tylko jedno zadanie do wykonania to jest ok - dosc typowa sytuacja na
kontrolerze.
Ale w sytuacji bardziej generycznej tj. kilka zadan do obrobienia
rownoczesnie JEST TO NIEACEPTOWEALNE bezwzgledu czy jest OS czy nie -
responsywnosc takiego systemu jest mala.


Re: AVR32 - jak ruszyc z tym prockiem
Quoted text here. Click to load it

W moim przypadku w przerwaniu realizowana jest generacja przebiegów
(impulsów krok +/-) dla silników (trajektoria, modyfikacja prędkości)
a główny program zajmuje się obsługą USB.
Chociaż trochę się martwię o tą obsługę USB. Nie wiem czy nie
będzie zbyt dużych opóźnień w odpowiedzi na komendy hosta.
Czas trwania 1 bitu dla full speed to 1/12MHz = 83ns. Wg standardu
USB ograniczenie czasowe nie może być mniejsze 16 bitów i większe
niż 18 bitów. Jeśli procek znajduje się za 5-tym hubem
to na odpowiedź mam 7,5 bitu. I to mnie trochę niepokoi.

SM


Re: AVR32 - jak ruszyc z tym prockiem
SM przemówił ludzkim głosem:

Quoted text here. Click to load it

A to że host wysyła pakiety do urządzenia co 1ms, to już ci nie
przeszkadza? Albo to, że program na PC może być wywłaszczony na dowolnie
długi czas i nic ci nie wyśle?

Re: AVR32 - jak ruszyc z tym prockiem
Quoted text here. Click to load it

A co ma jedno z drugim wspólnego? Przecież pisałem o czasie
oczekiwania na odpowiedź, a nie o tym że czas pomiędzy
dwoma pakietami SOF to 1ms. Skąd w takim razie
ograniczenie oczekiwania na odpowiedź do 18 bitów?
No chyba że chodzi tu o odpowiedź sprzętowego
kontrolera USB w procku, a nie mojego softu
obsługującego USB.

Quoted text here. Click to load it

Czyli mam liczyć na to że program obsługujący będzie
"przyhamowywany" i tylko dlatego soft będzie działał.

SM

Re: AVR32 - jak ruszyc z tym prockiem
SM przemówił ludzkim głosem:
Quoted text here. Click to load it

Oczywiście, to kontroler zajmuje się sygnalizacją, czy ma coś w buforze
do wysłania, czy nie.

Quoted text here. Click to load it

Tak to napisałeś jakby twój soft musiał dostawać nowe dane z
dokładnością co do us. Jeśli tak nie jest to ok.


Re: AVR32 - jak ruszyc z tym prockiem
Zbych pisze:
Quoted text here. Click to load it

No to chyba się kompletnie nie rozumiemy.

Przykład:
1. Host USB wysyła do urządzenia pakiet "In Token"
2. Urządzenie USB odpowiada pakietem "Data"
3. Host USB wysyła do urządzenia pakiet "Handshake"

Sterownik USB w uC informuje mnie, że odebrał dane - czyli
pakiet "In Token". Ja te dane interpretuje i odsyłam
"Data". I pytanie - jak długo Host czeka na odpowiedź
od urządzenia?

W książce wyczytałem:
"Czas pomiędzy dwoma kolejnymi pakietami SOF nazywany jest
ramką". Ramka wynosi 1ms. Czyli wnioskuję że Host wysyła
pakiet "In Token" poprzedzony przez SOF. Ja odpowiadam
"Data" również z nagłówkiem SOF, ale nie w tej samej 1ms
bo między dwoma pakietami SOF ma być 1ms przerwy (czyli
ramka).
Ale dalej czytam:
"Stąd wyrażone w bitach maksymnalne opóźnienie w dotarciu
odpowiedzi do gosta wynosi 16 bitów. Właśnie to opóźnienie
jest podstawą do określenia ograniczenia czasowego
oczekiwania na odpowiedź w urządzeniu nadającym".
W wcześniej:
w najgorszym przypadku przejście przez 5 hubów może
zająć 350ns. "Ostatni hub przesyła pakiet do urządzenia,
które po jego odebraniu i sprawdzeniu wysyła
odpowiedź. SPECYFIKACJA PODAJE, że czas na WYMIENIONE
OPERACJE liczony od momentu dotarcia odpowiedzi do
huba [...] nie może przekroczyć 7,5 bitu."

No to zaczynam nie całkiem rozumieć o co tu chodzi.

SM

Re: AVR32 - jak ruszyc z tym prockiem
SM przemówił ludzkim głosem:

Quoted text here. Click to load it

Jeśli nie zdążysz wstawić do bufora danych to kontroler wyśle
informację, że nic nie ma do wysłania. Tym steruje sprzęt, więc nie ma
co się przejmować czy zdążysz. Za 1ms host ponowi pytanie. Jeśli wtedy
będzie coś w buforze, to kontroler to wyśle.

Re: AVR32 - jak ruszyc z tym prockiem
Quoted text here. Click to load it

Aaaa no to teraz jasne. Bałem się że sterownik USB w uC
musi dostać dane wtedy kiedy chce tego host, a potem
one przepadają.

Ale jak tak, no to spoko. W razie czego będę miał
komunikcję co drugą ramkę i tyle.

Dzięki,
   SM

Re: AVR32 - jak ruszyc z tym prockiem
...chodzi o czas Round-Trip Delay wynoszący 1,5us.

"The maximum length of a standard USB cable is 5.0 meters (16.4 ft). The
primary reason for this limit is the maximum allowed round-trip delay of
about 1500 ns. If a USB device does not answer to host commands within
the allowed time, the host considers the command to be lost."

"The USB Specification allows a maximum period of approximately 1.5
microseconds for the round-trip delay of a single communication from a
host computer to a device and back to the computer"

Jeśli urządzenie USB nie odpowie Hostowi USB w czasie 1,5us,
Host uznaje komendę za "straconą" (nie odebraną).

Właśnie tym czasem się martwię. W 1,5us muszę odebrać dane od
sterownika USB w uC, zanalizować je, i odesłać odpowiedź.
Ponieważ mogę być za 5-tym Hubem to na wszystko pozostaje mi
7,5 bitu * 83ns (FullSpeed) 623ns!!!

SM


Re: AVR32 - jak ruszyc z tym prockiem
SM przemówił ludzkim głosem:

Quoted text here. Click to load it

Nie musisz. Dane mogą pójść do hosta przy następnej ramce.

Site Timeline