Wydajność DMA w mikrokontrolerach 16-bitowych: Jak wykorzystać 80C186 i zarządzać pamięcią?
DMA w mikrokontrolerach
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: DMA w mikrokontrolerach
Date: Thu, 13 May 1999 18:42:00 +0200
Czesc,
Czy ktos mial cos wspolnego z mikrokontrolerami 16 bitowymi, ktore posiadaja
takze DMA?
Znalazlem taki procesorek 80C186 i ma on ponoc mozliwosc pisania i czytania
z portu szeregowego w trybie DMA.
Panowie - czy ktos wie jakie sa tego dodatnie cechy i czy (nie koniecznie
chodzi mi ten procek) program glowny moze sobie chodzic w czasie gdy
obslugiwany jest UART lub dowolne inne urzadzenie wewnatrz ?
Jak sie organizuje pamiec i jak sie chroni dane przed przepelnieniem
pamieci. Czy to sie jakos definiuje ile RAM przydziela sie dla obszaru
uzywanego przez urzadzenia w trybie DMA ?
Jakie sa zyski wydajnosciowe?
Chodzi mi o ogolna wymiane pogladaow o DMA w u-kontrolerach, niezaleznie od
ich konkretnego modelu.
Taka mala wymiana doswiadczen..
Juliusz
From: Dariusz Pakulski <darek_at_nospam_peket.pol.pl>
Subject: Re: DMA w mikrokontrolerach
Date: Fri, 14 May 1999 11:25:54 +0200
nic duzego nie wniose w szczegolnosci o DMA w u-kontrolerach, zale w
Z-80 bylo to tak ze transmisja DMA rzeczywiscie odbywala sie w tle racy
procesora (nie angazujac programu) choc nastepowalo zwolnienie pracy
procesora (w momentach kiedy DMA przejmowalo magistrale), jesli chodzi o
ograniczenie zakresu pamieci przeznaczonej do transmisji to odbywalo sie
to na zasadzie, ze programujac kontroler DMA wskazywales na poczatek
obszaru i ILOSC bajtow do przetransmitowania - czyli z gory planowales
wielkosc bloku po ktorego przetransmitowaniu przychodzilo przerwanie od
DMA.
a milo by bylo zeby na przyklad hardwarowo mozna bylo zaplanowac taki
buforek pierscieniowy, ktory jest uzupelniany z UART'a a czytany przez
program calkowicie asynchronicznie .....
Juliusz wrote:
Czesc,
Czy ktos mial cos wspolnego z mikrokontrolerami 16 bitowymi, ktore posiadaja
takze DMA?
Znalazlem taki procesorek 80C186 i ma on ponoc mozliwosc pisania i czytania
z portu szeregowego w trybie DMA.
Panowie - czy ktos wie jakie sa tego dodatnie cechy i czy (nie koniecznie
chodzi mi ten procek) program glowny moze sobie chodzic w czasie gdy
obslugiwany jest UART lub dowolne inne urzadzenie wewnatrz ?
Jak sie organizuje pamiec i jak sie chroni dane przed przepelnieniem
pamieci. Czy to sie jakos definiuje ile RAM przydziela sie dla obszaru
uzywanego przez urzadzenia w trybie DMA ?
Jakie sa zyski wydajnosciowe?
Chodzi mi o ogolna wymiane pogladaow o DMA w u-kontrolerach, niezaleznie od
ich konkretnego modelu.
Taka mala wymiana doswiadczen..
Juliusz
From: "Kumex" <kumex_at_nospam_polbox.com>
Subject: Re: DMA w mikrokontrolerach
Date: Fri, 14 May 1999 12:11:42 +0200
Wiem, ze 80C196KC i KD posiadaja caly mechanizm zwany w skrocie PTS
(Peripheral Transaction Server - o ile dobrze pamietam). Jest to chyba
cos w rodzaju takiego wewnetrzengo DMA.
Nie mam pod reka dokumentacji tego uC, wiec nie jestem w stanie podac
zadnych szczegolow. (PDFa dla 80C196KC/KD mozna "zlapac" np. na
serwerze Intela)
Kumex.
From: "Kumex" <kumex_at_nospam_polbox.com>
Subject: Re: DMA w mikrokontrolerach
Date: Fri, 14 May 1999 13:28:51 +0200
Kumex napisał(a) w wiadomości: <7hgsps$pn6$1_at_nospam_korweta.task.gda.pl>...
|Wiem, ze 80C196KC i KD posiadaja caly mechanizm zwany w skrocie PTS
|(Peripheral Transaction Server - o ile dobrze pamietam). Jest to
chyba
|cos w rodzaju takiego wewnetrzengo DMA.
|Nie mam pod reka dokumentacji tego uC, wiec nie jestem w stanie podac
|zadnych szczegolow. (PDFa dla 80C196KC/KD mozna "zlapac" np. na
|serwerze Intela)
Pogrzebalem i cos wygrzebalem.
Ponizej oryginalny tekst z manuala do 16-bitowych mikrokontrolerow
Intela (seria MCS-96), mowiacy ogolnie na temat PTS.
"2.3.5 Interrupt Service
The device?s flexible interrupt-handling system has two main
components: the programmable in-terrupt
controller and the peripheral transaction server (PTS). The
programmable interrupt con-troller
has a hardware priority scheme that can be modified by your software.
Interrupts that go
through the interrupt controller are serviced by interrupt service
routines that you provide.
The peripheral transaction server (PTS), a microcoded hardware
interrupt processor, provides high-speed,
low-overhead interrupt handling. You can configure most interrupts
(except NMI, trap,
and unimplemented opcode) to be serviced by the PTS instead of the
interrupt controller.
The PTS can transfer bytes or words, either individually or in blocks,
between any memory loca-tions,
manage multiple analog-to-digital (A/D) conversions, and generate
pulse-width modulated
(PWM) signals. PTS interrupts have a higher priority than standard
interrupts and may temporari-ly
suspend interrupt service routines. See Chapter 5, ?Standard and PTS
Interrupts,? for more in-formation."
(...)
"This microcontroller?s flexible interrupt-handling system has two
main components: the pro-grammable
interrupt controller and the peripheral transaction server (PTS). The
programmable
interrupt controller has a hardware priority scheme that can be
modified by your software. Inter-rupts
that go through the interrupt controller are serviced by interrupt
service routines that you
provide. The upper and lower interrupt vectors in special-purpose
memory (see Chapter 4,
?Memory Partitions?) contain the interrupt service routines?
addresses. The peripheral transac-tion
server (PTS), a microcoded hardware interrupt processor, provides
high-speed, low-over-head
interrupt handling; it does not modify the stack or the PSW. You can
configure most
interrupts (except NMI, trap, and unimplemented opcode) to be serviced
by the PTS instead of
the interrupt controller.
The PTS supports five special microcoded routines that enable it to
complete specific tasks in
much less time than an equivalent interrupt service routine can. It
can transfer bytes or words,
either individually or in blocks, between any memory locations; manage
multiple analog-to-dig-ital
(A/D) conversions; and generate pulse-width modulated (PWM) signals.
PTS interrupts have
a higher priority than standard interrupts and may temporarily suspend
interrupt service routines.
A block of data called the PTS control block (PTSCB) contains the
specific details for each PTS
routine (see ?Initializing the PTS Control Blocks? on page 5-18). When
a PTS interrupt occurs,
the priority encoder selects the appropriate vector and fetches the
PTS control block (PTSCB)."
To tyle, co mam.
Nigdy nie wykorzystywalem PTS, wiec nie wiem jak sie go programuje.
Kumex.
From: "Jan Niziołek" <jnelss_at_nospam_silesia.top.pl>
Subject: Re: DMA w mikrokontrolerach
Date: Fri, 14 May 1999 17:46:23 +0200
Cześć;
Ano coś działałem na procesorze z DMA (2 kanały) ale 8bit, HD64180 czyli
poczciwy Z180 !!!!
1MB pamięci 2xUART (jeden z RTS,CTS) 1x synchoniczny szeregowy 1x timer (może 2
nie pamiętam).
DMA w tym procesorze chodzi jak burza. IO-MEM MEM-MEM MEM-IO. Program głowny nie
może chodzić.
Kanał 0 DMA chodzi z UART 0. W pamięci nic nie tracisz bo wszystko siedzi w SFR.
Kilka nowych przerwań, budzi się jako Z80 a dalej już sam decydujesz co chcesz
robić. Fajny, wydajny procesor.
Na razie
Jan Niziołek
Juliusz wrote:
Czesc,
Czy ktos mial cos wspolnego z mikrokontrolerami 16 bitowymi, ktore posiadaja
takze DMA?
Znalazlem taki procesorek 80C186 i ma on ponoc mozliwosc pisania i czytania
z portu szeregowego w trybie DMA.
Panowie - czy ktos wie jakie sa tego dodatnie cechy i czy (nie koniecznie
chodzi mi ten procek) program glowny moze sobie chodzic w czasie gdy
obslugiwany jest UART lub dowolne inne urzadzenie wewnatrz ?
Jak sie organizuje pamiec i jak sie chroni dane przed przepelnieniem
pamieci. Czy to sie jakos definiuje ile RAM przydziela sie dla obszaru
uzywanego przez urzadzenia w trybie DMA ?
Jakie sa zyski wydajnosciowe?
Chodzi mi o ogolna wymiane pogladaow o DMA w u-kontrolerach, niezaleznie od
ich konkretnego modelu.
Taka mala wymiana doswiadczen..
Juliusz
From: "Jan Niziołek" <jnelss_at_nospam_silesia.top.pl>
Subject: Re: DMA w mikrokontrolerach
Date: Fri, 14 May 1999 17:55:20 +0200
Sorry że na raty !
Może chodzić w trybie z wykradaniem cykli czyli DMA w tle
I to by było na tyle .
JN
Jan Niziołek wrote:
Cześć;
. Program głowny nie może chodzić.
Juliusz
From: marekm_at_nospam_linux.org.pl (Marek Michalkiewicz)
Subject: Re: DMA w mikrokontrolerach
Date: 14 May 1999 16:08:35 GMT
Juliusz <juliusz_at_nospam_multi-ip.com.pl> wrote:
Czy ktos mial cos wspolnego z mikrokontrolerami 16 bitowymi, ktore posiadaja
takze DMA?
Ja to robiłem na AMD 188ES - na przerwaniach udało się uzyskać może
9600 (brak FIFO, prawie wszystko łącznie z obsługą przerwań pisane w C).
Po przejściu na DMA przy odbiorze (są 2 porty szeregowe i 2 kanały DMA
więc nadawanie nadal na przerwaniach, albo przez DMA ale tylko gdy
w tym czasie nie odbieramy - half duplex) spokojnie wyciąga 115200.
Panowie - czy ktos wie jakie sa tego dodatnie cechy i czy (nie koniecznie
chodzi mi ten procek) program glowny moze sobie chodzic w czasie gdy
obslugiwany jest UART lub dowolne inne urzadzenie wewnatrz ?
Chodzi (oczywiście trochę wolniej, ale przy 115200 trudno zauważyć).
Oczywiście gdyby to urządzenie było szybkie (rzędu MB/s), mogłoby
pewnie całkowicie zablokować magistralę.
Jak sie organizuje pamiec i jak sie chroni dane przed przepelnieniem
pamieci. Czy to sie jakos definiuje ile RAM przydziela sie dla obszaru
uzywanego przez urzadzenia w trybie DMA ?
Programuje się trochę ciężko - kiedyś przysiadłem, napisałem i działa,
ale teraz to już wolałbym nic w tym kodzie nie zmieniać :-).
Wpisuje się do rejestrów sterownika DMA adres początkowy i długość
obszaru pamięci. Bufora kołowego to już DMA samo nie załatwi - trzeba
w odpowiednim momencie "w locie" (na 188 - z przedrostkiem LOCK)
przestawiać DMA na początek bufora.
Jakie sa zyski wydajnosciowe?
Duże, ale też dużo zabawy. Jeśli chodzi o transmisję szeregową, to
jednak dużo łatwiej oprogramowuje się pospolitego UARTa z FIFO
(TL16C550A i pochodne - są też podwójne i poczwórne), a efekt podobny.
pozdrawiam
--
Marek Michałkiewicz <marekm_at_nospam_linux.org.pl>
AM ELEKTRONIK s. c., ul. Biała 7, 80-435 Gdańsk, tel./fax 058 3440061