logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Xmega][GCC]Jak używać DMA i innych dobrodziejstw w Xmega.

avr_elektronik 27 Paź 2009 20:07 6866 7
  • #1 7182570
    avr_elektronik
    Poziom 14  
    Witam,
    mam zamiar zastąpić w moich projektach µP MegaAVR nowymi AtXMega.
    Szukałem informacji na temat kontrolera DMA w procesorach Xmega, ale niestety jest bardzo mało informacji na ten temat. I tu moje pytanie czy ktoś może mi wyjaśnić jak uruchomić DMA pod kompilatorem AVR-GCC? Na marginesie dodam, że wiem co to jest DMA i wiem jaka jest zasada działania, chodzi mi raczej o praktyczne zastosowanie:)
  • #3 7183171
    tmf
    VIP Zasłużony dla elektroda
    Wszystko jest w notach katalogowych procesorow XMega, napisz z czym konkretnie masz problem to postaram sie wyjasnic. Co do wsparcia w gcc - to nie ma zadnego, jedyne co mozesz oczekiwac to definicje rejestrow i struktur danych. Ale zadnych gotowych rozwiazan w AVR-libc nie ma i sie nie spodziewaj. Tak samo jak np. nie ma funkcji obslugujacych timery.

    JarekC: korzysci ze stosowania DMA trudno przecenic. Chociazby wygodna obsluga UARTow, bez angazowania procesora - co normalnie jest trudne bo AVRy nie maja FIFO na UARTach - przygotowywujesz porcje danych do wyslania, ustawiasz DMA i zapominasz o sprawie. To samo praktycznie z kazdym interfejsem - I2C, SPI. Chcesz zbierac probki z ADC do bufora - ustawiasz DMA na ADC i juz, czekaz tylko na koniec akwizycji, nawet nie czekasz bo dostaniesz przerwanie.
    Masz LCD bez sterownika i twoj procek 90% czasu spedza w petli wysylajac kolejne linie na jakis port - ustawiasz DMA i juz, jedyne co robisz to co linie generujesz dodatkowe sygnaly sterujace do LCD. Obciazenie z 90% spadlo do 9 :)
  • #4 7183909
    avr_elektronik
    Poziom 14  
    JarekC <- w zasadzie nie jest mi potrzebna tak "spora" moc obliczeniowa jaką udostępnia XMega, ale porównując cenę AtMega128 i AtXMega128X3 to wole wybrać XMega i powoli się z nim oswajać:). Druga sprawa to, że np. AtMega128 nie jest zalecany do nowych konstrukcji.

    tmf <- dzięki za obszerny opis. Póki co badam temat na sucho:). Z tego co napisałeś wnioskuję, że masz doświadczenie z µP XMega, więc jeśli to nie problem doprecyzuj mi zasadę działania DMA na XMega. Dokładnie mam na myśli samo kopiowanie danych, jak się to odbywa, czy µP jest wtedy wolny tzn. może wykonywać inne instrukcje (to chyba była by wielowątkowość, a nie DMA)?
    Napisałeś, że DMA bardzo dobrze współgra z portem szeregowym lub LCD, czyli jak rozumiem kontroler DMA kopiuje z adresu źródłowego bloki 1 (oczywiście mogą być większe) bajtowe do ... właśnie gdzie? Bo jeśli kopiuje dane do układów peryferyjnych to poza wysyłaniem danych muszę kontrolować inne rejestry lub linie sterujące (np. w porcie szeregowym muszę sprawdzić czy bufor jest pusty).

    Coś mi się zdaję, że się zapętliłem...:)
  • #5 7184162
    Freddie Chopin
    Specjalista - Mikrokontrolery
    avr_elektronik napisał:
    porównując cenę AtMega128 i AtXMega128X3 to wole wybrać XMega i powoli się z nim oswajać:).

    Damn, obydwa strasznie drogie jak na kiepską moc i możliwości jakie mają. Jak zwykle Cortexy tańsze.

    Cytat:
    Coś mi się zdaję, że się zapętliłem...:)

    Mnie się coś zdaję, że nie przeczytałeś manuala i rozdziału o DMA, tam przecież WSZYSTKO jest wyjaśnione.

    4\/3!!
  • #6 7184240
    avr_elektronik
    Poziom 14  
    Freddie Chopin -> pewnie masz rację w temacie innych µP, ale dla mnie cena 22zł za AtXmega128X3 jest przystępna.

    Czytałem dokument Atmela AVR1304 i jest tam napisane, że kontroler DMA nie blokuje procesora.
    Cytat:
    The XMEGATM Direct Memory Access Controller (DMAC) is a highly flexible four-
    channel DMA Controller capable of transferring data between memories and
    peripherals with minimal CPU intervention. While the CPU spends time in low-
    power sleep modes or performs other tasks, the XMEGA DMAC offloads the CPU
    by taking care of mere data copying from one area to another.


    OK. Wszystko jest jasne, ale nadal nie wiem jak to działa.
    Jak rozumiem inicjuje transakcję z pomocą DMA i zapominam o całej sprawie, ale tak jak wspomniałem co ze sterowaniem (np. LCD)?
  • #7 7184436
    tmf
    VIP Zasłużony dla elektroda
    Za pomoca DMA mozesz kopiowac z pamieci do pamieci, z pamieci do IO lub odwrotnie. Procesor w tym czasie moze wykonywac inne instrukcje. Jesli to bedzie np. TWI lub UART to zasadnioczo nic nie musisz robic. Natomiast LCD podalem jako przyklad, kiedy DMA znacznie odciaza procesor, ale nie moze go wyreczyc, bo. np. co linie musisz generowac impulsy LP, lub FRM. Tak wiec w DMA w tym wypadku programujesz transfer jednej linii, jak sie zakonczy to wywolywane jest przerwanie w obsludze ktorego wystawiasz reszte impulsow sterujacych i ponownie ustawiasz transfer DMA na kolejna linie. Ale dzieki temu musisz wykonac tylko pare instrukcji, a nie programowo przeladowywac tysiace bajtow.
  • #8 7184579
    Konto nie istnieje
    Poziom 1  
REKLAMA