eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAVR32 - jak ruszyc z tym prockiem
Ilość wypowiedzi w tym wątku: 39

  • 31. Data: 2009-11-11 18:03:17
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: Zbych <a...@o...pl>

    SM przemówił ludzkim głosem:

    > 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!!!

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


  • 32. Data: 2009-11-11 18:26:23
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: SM <b...@k...com.pl>

    > 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.

    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


  • 33. Data: 2009-11-13 07:35:19
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: SM <b...@k...com.pl>

    Znowu trochę posiedziałem nad prockiem.
    Ale masakra.
    Chyba z żadnym prockiem nie miałem tyle
    kombinowania (chociażby ze samą strukturą
    programu że asembler i linker poprawnie
    przygotowali dane do ładowania do procka).
    Skonfigurowałem procka, ruszyłem przerwania
    na timerze.

    Wszystko lekko rąbnięte przez sam fakt, że
    Atmel dał flash od adresu 0x80000000 a to
    w integer jest liczba ujemna! Asembler
    głupieje przy bezpośrednim ustawieniu
    sekcji org na ten adres, bo dla niego to
    liczba ujemna i stwierdza że kompilacja
    odbywa się w ujemną stronę. Trzeba więc
    robić offset w linkerze. Ale tu kolejny
    zgrzyt bo stałe zdefiniowane jako różnica
    adresów wychodzą wtedy Linkerowi błędnie
    (np. offset autoprzerwania względem EVBA).

    Ostatecznie rozwiązałem to tak:

    //
    ====================================================
    =======================
    // Start of data memory.
    //
    ====================================================
    =======================

    .section .bss, "", @nobits
    .org 0

    stack_beg:
    .skip 256
    stack_end:

    //
    ====================================================
    =======================
    // Start of program memory.
    //
    ====================================================
    =======================

    .section .text, "ax", @progbits

    .global _start

    _start:
    .incbin "isp.bin" // original bootloader saved from flash memory

    //
    ====================================================
    =======================
    // Ints vectors.
    //
    ====================================================
    =======================

    StartEVBA:

    program_begin:
    rjmp program_start

    rjmp Int0Handler
    rjmp Int1Handler
    rjmp Int2Handler
    rjmp Int3Handler

    .equ Int0Offset, 4 >> 1
    .equ Int1Offset, 8 >> 1
    .equ Int2Offset, 12 >> 1
    .equ Int3Offset, 16 >> 1

    //
    ====================================================
    =======================
    // Timer 0 interrupt.
    //
    ====================================================
    =======================

    Int0Handler:

    // reset int flag

    mov.w r8, TC0_BASE
    ld.w r9, r8[TC_SR]

    // change PA3 pin

    mov.w r8, LBM_BASE
    mov r9, (1 << 3)
    st.w r8[LBM_OVR0T], r9

    // int exit

    rete

    //
    ====================================================
    =======================
    // Program start.
    //
    ====================================================
    =======================

    program_start:

    // --- stack

    mov.w sp, stack_end

    ****************************************************
    ************************

    i ustawiam:

    // set EVBA pointer

    mov.w r0, StartEVBA
    mtsr SYSREG_EVBA, r0

    // set autovector offset for group 14

    mov.w r0, INTC_BASE
    mov.w r1, Int0Offset
    st.w r0[INTC_IPR0 + 4*14], r1

    i oczywiście wszystko działa, ale ile musiałem czasu stracić
    żeby coś tak prostego zrobić.

    Nie mogli dać flasha od 0x40000000. Przeciez mieliby wtedy 1GB
    na rozbudowę RAM i 1GB (minus rejestry) na FLASH.

    SM


  • 34. Data: 2009-11-19 07:41:33
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: SM <b...@k...com.pl>

    > 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.
    >

    Mam zrobione USB CDC więc mogę podać "wyniki":

    Całość w ASMie i jednej pętli. Program wygląda tak:

    Na starcie:
    Inicjalizacja procka (flahs, clock,...).
    Inicjalizacja timera 0 (i przerwań).
    Inicjalizacja USART.
    Inicjalizacja USB.

    W głównej pętli:
    Obsługa USART
    Obsługa USB

    Program to co odbierze na USB wysyła na USART, to co
    odbierze na USART wysyła na USB.

    Poza główną pętla obsługa przerwania od timera 0 co 1ms
    (tak dla celów testowo-poznawczych przerwań)

    Całość (razem ze strukturami USB) zajęła mi 1920 bajtów.

    SM


  • 35. Data: 2009-11-20 22:42:02
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: Adam Dybkowski <a...@4...pl>

    SM pisze:

    > Mam zrobione USB CDC więc mogę podać "wyniki":
    > Całość w ASMie i jednej pętli. Program wygląda tak:
    >
    > Na starcie:
    > Inicjalizacja procka (flahs, clock,...).
    > Inicjalizacja timera 0 (i przerwań).
    > Inicjalizacja USART.
    > Inicjalizacja USB.
    >
    > W głównej pętli:
    > Obsługa USART
    > Obsługa USB
    >
    > Program to co odbierze na USB wysyła na USART, to co
    > odbierze na USART wysyła na USB.

    No to teraz przerób główną pętlę na przerwania aby program mógł robić
    też coś pożytecznego. Bo zniżenie całego procka AVR32 do roli konwertera
    USB-RS232 to dla niego zniewaga. :)

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

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


  • 36. Data: 2009-11-21 03:55:37
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: SM <b...@k...com.pl>

    > No to teraz przerób główną pętlę na przerwania aby program mógł robić
    > też coś pożytecznego. Bo zniżenie całego procka AVR32 do roli konwertera
    > USB-RS232 to dla niego zniewaga. :)

    Oczywiście nie ma sprawy, aby wrzucić to w przerwanie czy też
    obsłużyć na dodatkowym tasku, ale ja właśnie mam potrzebę
    aby główna pętla zajmowała się "mniej ważnymi" operacjami
    (jak np. transmisja z USB), a najważniejsza część programu
    będzie wywoływana co dokładnie odmierzany czas - czyli przerwaniu.

    Przygotowałem sobie także "środowisko" aby pisać soft
    na procka w C+ASM. Korzystam z edytora ConTEXT i
    środowiska GCC.

    Te AVR32 spodobały mi się na tyle, że chyba dłużej przy nich
    zabawię. Przyznaję że wzięła mnie już ochota na stworzenie
    własnego środowiska i kompilatora dla niego. No chyba że
    zagłębie się w źródła gcc i go przerobię tak, aby
    generował kod wynikowy bardziej podobny do sposobu w jaki
    pisze w asm-ie (chodzi mi przede wszystkim o sposób
    dostępo do zmiennych globalnych w SRAM. Kompilator
    używa lddpc, a ja zwykłego ld i adresowanie pośrednie
    z przesunięciem - poświęcam na to jeden rejestr r7.
    adresuję r7[adres_zmiennej] - offset jest 16bit więc
    wystarcza na całe 32KB SRAM. No chyba że jest jakaś
    opcja gcc która coś takiego potrafi wymusić).
    Jeszcze się trochę przyjrzę jaki kod generuje gcc.

    Ale same AVR32 zaczynają mi się niezmiernie podobać.
    Mam pomysł na większy (jak sądzę bardzo ciekawy)
    projekt, ale muszę gdzieś dorwać kilka AT32UC3A3128
    w jakiejś rozsądnej cenie.

    Pozdrawiam,
    SM


  • 37. Data: 2009-11-21 03:58:06
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: SM <b...@k...com.pl>

    > No to teraz przerób główną pętlę na przerwania aby program mógł robić
    > też coś pożytecznego. Bo zniżenie całego procka AVR32 do roli konwertera
    > USB-RS232 to dla niego zniewaga. :)

    Oczywiście nie ma sprawy, aby wrzucić to w przerwanie czy też
    obsłużyć na dodatkowym tasku, ale ja właśnie mam potrzebę
    aby główna pętla zajmowała się "mniej ważnymi" operacjami
    (jak np. transmisja z USB), a najważniejsza część programu
    będzie wywoływana co dokładnie odmierzany czas - czyli przerwaniu.

    Przygotowałem sobie także "środowisko" aby pisać soft
    na procka w C+ASM. Korzystam z edytora ConTEXT i
    środowiska GCC.

    Te AVR32 spodobały mi się na tyle, że chyba dłużej przy nich
    zabawię. Przyznaję że wzięła mnie już ochota na stworzenie
    własnego środowiska i kompilatora dla niego. No chyba że
    zagłębie się w źródła gcc i go przerobię tak, aby
    generował kod wynikowy bardziej podobny do sposobu w jaki
    pisze w asm-ie (chodzi mi przede wszystkim o sposób
    dostępo do zmiennych globalnych w SRAM. Kompilator
    używa lddpc, a ja zwykłego ld i adresowanie pośrednie
    z przesunięciem - poświęcam na to jeden rejestr r7.
    adresuję r7[adres_zmiennej] - offset jest 16bit więc
    wystarcza na całe 32KB SRAM. No chyba że jest jakaś
    opcja gcc która coś takiego potrafi wymusić).
    Jeszcze się trochę przyjrzę jaki kod generuje gcc.

    Ale same AVR32 zaczynają mi się niezmiernie podobać.
    Mam pomysł na większy (jak sądzę bardzo ciekawy)
    projekt, ale muszę gdzieś dorwać kilka AT32UC3A3128
    w jakiejś rozsądnej cenie.

    Pozdrawiam,
    SM


  • 38. Data: 2009-11-24 18:41:52
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: "Artur M. Piwko" <m...@b...pl>

    In the darkest hour on Thu, 19 Nov 2009 08:41:33 +0100,
    SM <b...@k...com.pl> screamed:
    > Poza główną pętla obsługa przerwania od timera 0 co 1ms
    > (tak dla celów testowo-poznawczych przerwań)
    >
    > Całość (razem ze strukturami USB) zajęła mi 1920 bajtów.
    >

    Rozmiar nie jest tak istotny, jak czas, który zajęło pisanie.

    --
    [ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:223B ]
    [ 19:41:16 user up 12266 days, 7:36, 1 user, load average: 0.97, 0.71, 0.02 ]

    APATHY ERROR: Don't bother striking any key.


  • 39. Data: 2009-11-25 04:45:08
    Temat: Re: AVR32 - jak ruszyc z tym prockiem
    Od: SM <b...@k...com.pl>

    >
    > Rozmiar nie jest tak istotny, jak czas, który zajęło pisanie.
    >

    Rozgryzanie procka - 3dni.
    USB-CDC - 2dni.

    Więc pryszcz, biorąc pod uwagę to że będę używał tej samej
    mojej procedury USB-CDC w wielu projektach.

    Cała obsługa USB-CDC jest niewielka - 460 linii. Pisania
    dużo nie było. Gorzej z rozgryzaniem procka.

    W wolnej chwili zrobię mu test szybkości. Zakupiłem
    DAC stereo 16bit i zobaczę czy wyrobi się w roli
    syntezatora FM (emulacja Yamahy DX-7). Jak da radę
    z polifonią przynajmniej 8 to robię sobie kompletny
    syntezator na dwóch AVR32 i SDRAMie.

    SM

strony : 1 ... 3 . [ 4 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: