{"id":2812,"date":"2020-06-19T08:22:31","date_gmt":"2020-06-19T06:22:31","guid":{"rendered":"https:\/\/botland.com.pl\/blog\/?p=2812"},"modified":"2023-05-24T09:50:50","modified_gmt":"2023-05-24T07:50:50","slug":"dma-bezposredni-dostep-do-pamieci","status":"publish","type":"post","link":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/","title":{"rendered":"DMA &#8211; Bezpo\u015bredni dost\u0119p do pami\u0119ci"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Czas czytania:<\/span> <span class=\"rt-time\"> 8<\/span> <span class=\"rt-label rt-postfix\">min.<\/span><\/span>\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2812\" class=\"elementor elementor-2812\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-47ca47e1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"47ca47e1\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-14083f09\" data-id=\"14083f09\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-861f889 elementor-widget elementor-widget-text-editor\" data-id=\"861f889\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Spora cz\u0119\u015b\u0107 elektronik\u00f3w pami\u0119ta czasy, w kt\u00f3rych na rynku kr\u00f3lowa\u0142y proste, 8-bitowe mikrokontrolery z rodzin 8051 oraz AVR. Nies\u0142abn\u0105ca popularno\u015b\u0107 \u201ema\u0142ych\u201d mikrokontroler\u00f3w (zw\u0142aszcza drugiej z wymienionych grup) daje si\u0119 stosunkowo \u0142atwo wyja\u015bni\u0107 \u2013 wiele urz\u0105dze\u0144 elektronicznych nie wymaga du\u017cej mocy obliczeniowej, zdolno\u015bci szybkiego wykonywania skomplikowanych oblicze\u0144 zmiennoprzecinkowych czy bardzo zaawansowanych uk\u0142ad\u00f3w peryferyjnych. Je\u017celi projektowany uk\u0142ad elektroniczny stawia konstruktorowi wy\u017csze wymagania wydajno\u015bciowe, najcz\u0119\u015bciej si\u0119ga on po jeden z licznych, 32-bitowych (a nawet 64-bitowych) procesor\u00f3w z rdzeniem ARM. Jednak wysoka cz\u0119stotliwo\u015b\u0107 taktowania, spora pami\u0119\u0107 RAM czy Flash to nadal nie wszystko \u2013 w bardziej z\u0142o\u017conych aplikacjach konieczne jest wsparcie rdzenia mikrokontrolera poprzez \u201ezwolnienie go\u201d z wykonywania operacji, kt\u00f3re wi\u0105\u017c\u0105 si\u0119 z przesy\u0142aniem du\u017cych ilo\u015bci danych \u2013 czy to w obszernych, jednolitych blokach, czy te\u017c w niewielkich porcjach, transferowanych z ogromn\u0105 cz\u0119sto\u015bci\u0105. W zdecydowanej wi\u0119kszo\u015bci wymienionych przypadk\u00f3w z odsiecz\u0105 przychodzi\u00a0<strong>uk\u0142ad DMA &#8211; bezpo\u015bredni dost\u0119p do pami\u0119ci<\/strong>. Z tego artyku\u0142u dowiesz si\u0119, jakie jest jego zadanie, jakie mo\u017cliwo\u015bci oferuje programi\u015bcie oraz w jakich sytuacjach jest najcz\u0119\u015bciej wykorzystywany.<\/p><h2>Praca bez DMA, czyli jak skutecznie straci\u0107 czas na najprostsze operacje<\/h2><p>Nie od dzi\u015b wiadomo, \u017ce podzia\u0142 zada\u0144 pomi\u0119dzy poszczeg\u00f3lnych pracownik\u00f3w firmy lub cz\u0142onk\u00f3w zespo\u0142u pozwala na efektywne wykorzystanie czasu i zasob\u00f3w, dost\u0119pnych na potrzeby realizacji danego przedsi\u0119wzi\u0119cia. Nie inaczej jest w \u015bwiecie mikrokontroler\u00f3w \u2013 wiele operacji, kt\u00f3re m\u00f3g\u0142by realizowa\u0107 rdze\u0144 procesora (a dok\u0142adniej jednostka artymetyczno-logiczna \u2013 ALU \u2013 b\u0119d\u0105ca \u201em\u00f3zgiem\u201d ca\u0142ego uk\u0142adu), mo\u017cna niejako \u201ezrzuci\u0107\u201d na bloki peryferyjne. Za\u0142\u00f3\u017cmy, \u017ce\u00a0<b><a href=\"https:\/\/botland.com.pl\/22-mikrokontrolery\" data-wpel-link=\"internal\">mikrokontroler<\/a>\u00a0<\/b>ma za zadanie odbiera\u0107 dane z jakiego\u015b urz\u0105dzenia zewn\u0119trznego (np. kamery) i zapisywa\u0107 je w buforze, czyli przygotowanym do tego celu obszarze pami\u0119ci operacyjnej (RAM) &#8211; w celu dalszej obr\u00f3bki, wy\u015bwietlenia czy te\u017c przes\u0142ania do innego podsystemu. Ci\u0105g danych jest odbierany przez uk\u0142ad peryferyjny (np. kontroler SPI), a poniewa\u017c ka\u017cdy kolejny bajt trafia do tego samego rejestru pami\u0119ci, natychmiast po przes\u0142aniu ostatniego bitu trzeba zapisa\u0107 odebran\u0105 warto\u015b\u0107 w odpowiednim miejscu bufora, zwalniaj\u0105c interfejs w celu umo\u017cliwienia odbioru kolejnego bajtu. Ka\u017cdy bajt jest zapisywany w kolejnej kom\u00f3rce bufora, st\u0105d pojawia si\u0119 konieczno\u015b\u0107 pilnowania, aby \u017cadna cz\u0119\u015b\u0107 danych nie zosta\u0142a przypadkowo nadpisana now\u0105 warto\u015bci\u0105 \u2013 dlatego ka\u017cdorazowo po zapisaniu nowego bajtu trzeba inkrementowa\u0107 (zwi\u0119ksza\u0107) zmienn\u0105, przechowuj\u0105c\u0105 adres (wska\u017anik) do kolejnej wolnej kom\u00f3rki bufora. Po tym nale\u017cy rozpocz\u0105\u0107 oczekiwanie na odebranie kolejnego bajtu danych i powt\u00f3rzy\u0107 ca\u0142\u0105 procedur\u0119. Je\u017celi dane przychodz\u0105 z du\u017c\u0105 cz\u0119stotliwo\u015bci\u0105 (co w przypadku kamery jest oczywiste), mo\u017ce zdarzy\u0107 si\u0119 sytuacja, w kt\u00f3rej czas procesora b\u0119dzie wykorzystany w tak du\u017cej cz\u0119\u015bci, \u017ce nie wystarczy go ju\u017c na wykonywanie innych operacji (np. przetwarzanie obrazu lub przes\u0142anie go do wy\u015bwietlacza). Identyczna sytuacja pojawia si\u0119 w aplikacjach realizuj\u0105cych odbi\u00f3r, odtwarzanie czy obr\u00f3bk\u0119 d\u017awi\u0119ku, danych pomiarowych, a nawet transmisji plik\u00f3w.<\/p><p>Dla jeszcze lepszego zobrazowania sytuacji wyobra\u017a sobie przypadek prostego generatora sygna\u0142\u00f3w, zrealizowanego na bazie mikrokontrolera. Przypu\u015b\u0107my, \u017ce chcesz generowa\u0107 sygna\u0142 sinusoidalny, tr\u00f3jk\u0105tny lub dowolny inny przebieg z u\u017cyciem (wbudowanego lub zewn\u0119trznego) przetwornika cyfrowo-analogowego (DAC). Pr\u00f3bki s\u0105 zapisane w pami\u0119ci RAM lub Flash, a w celu wygenerowania odpowiedniego przebiegu napi\u0119ciowego konieczne jest kolejne ich przesy\u0142anie do przetwornika DAC; po doj\u015bciu do ko\u0144ca tablicy odtwarzanie powinno rozpocz\u0105\u0107 si\u0119 od pocz\u0105tku. Za\u0142\u00f3\u017cmy w tym miejscu, \u017ce nie korzystamy z bardziej zaawansowanych metod wytwarzania sygna\u0142\u00f3w (tj. cyfrowej syntezy DDS), ale w zamian chcemy obci\u0105\u017cy\u0107 procesor kilkoma dodatkowymi zadaniami \u2013 w tym obs\u0142ug\u0105 wy\u015bwietlacza, pokazuj\u0105cego rodzaj i cz\u0119stotliwo\u015b\u0107 sygna\u0142u oraz klawiatury, s\u0142u\u017c\u0105cej do ustawiania parametr\u00f3w pracy urz\u0105dzenia. Poniewa\u017c dane musz\u0105 by\u0107 generowane w spos\u00f3b ci\u0105g\u0142y, procesor ma bardzo ma\u0142o czasu (je\u017celi w og\u00f3le znalaz\u0142by go w nat\u0142oku zada\u0144 zwi\u0105zanych z obs\u0142ug\u0105 przetwornika DAC) na odczytywanie stanu klawiszy czy przesy\u0142anie komend do wy\u015bwietlacza. W tym przypadku mamy do czynienia z sytuacj\u0105 niejako odwrotn\u0105 do przedstawionej w poprzednim przyk\u0142adzie: dane s\u0105 przesy\u0142ane z pami\u0119ci do uk\u0142adu peryferyjnego.<\/p><h3>Kontroler DMA \u2013 silne wsparcie w wymagaj\u0105cych aplikacjach<\/h3><p>Najpro\u015bciej rzecz ujmuj\u0105c:<br \/><strong>Zadaniem kontrolera DMA jest przesy\u0142anie danych ze wskazanej lokalizacji \u017ar\u00f3d\u0142owej (rejestru peryferyjnego lub miejsca w pami\u0119ci) do okre\u015blonego miejsca docelowego (kt\u00f3re tak\u017ce mo\u017ce by\u0107 rejestrem lub obszarem pami\u0119ci) w taki spos\u00f3b, aby informacje by\u0142y przekazywane bezb\u0142\u0119dnie i niejako automatycznie, bez konieczno\u015bci anga\u017cowania mocy obliczeniowej procesora<\/strong>. <b>Zadaniem programu jest zatem w\u0142a\u015bciwa konfiguracja i uruchomienie bloku DMA.<\/b><\/p><p>Dodatkowo, je\u017celi transfer anga\u017cuje tak\u017ce inne bloki peryferyjne (np. interfejs SPI, I2C, UART czy I2S, przetworniki analogowo-cyfrowe czy cyfrowo-analogowe, a nawet timery), konieczne jest \u201epodpi\u0119cie\u201d ich do kontrolera DMA, tj. w\u0142a\u015bciwe ustawienie \u201e\u015bcie\u017cek\u201d, jakimi b\u0119d\u0105 przesy\u0142ane dane oraz sygna\u0142y synchronizacji i wyzwalania transfer\u00f3w. Warto bowiem wiedzie\u0107, \u017ce DMA (w zale\u017cno\u015bci od sytuacji oraz wyboru okre\u015blonych blok\u00f3w)\u00a0<strong>mo\u017ce pracowa\u0107 w trybie pojedynczego transferu lub transfer\u00f3w cyklicznych<\/strong>. W tym pierwszym przypadku, kontroler \u2013 po przes\u0142aniu okre\u015blonej ilo\u015bci danych z miejsca \u017ar\u00f3d\u0142owego do lokalizacji docelowej \u2013 przerywa swoje dzia\u0142anie i pozostaje w gotowo\u015bci do kolejnej operacji, wywo\u0142anej programowo lub przez okre\u015blone zdarzenie sprz\u0119towe (np. sygna\u0142 z timera). W trybie cyklicznym DMA kontynuuje transfer danych po przes\u0142aniu zadanej liczby bajt\u00f3w lub s\u0142\u00f3w, rozpoczynaj\u0105c kolejn\u0105 operacj\u0119 od pocz\u0105tku bufora. Dzi\u0119ki temu u\u017cytkownik nie musi martwi\u0107 si\u0119 o ponowne rozpocz\u0119cie transferu, a tryb ten jest szczeg\u00f3lnie ch\u0119tnie wykorzystywany w sytuacjach wymagaj\u0105cych ci\u0105g\u0142ej transmisji danych \u2013 np. w przetwarzaniu d\u017awi\u0119ku cyfrowego.<\/p><h3>Budowa i po\u0142\u0105czenia bloku DMA<\/h3><p>Aby lepiej zobrazowa\u0107 budow\u0119 kontrolera DMA i wskaza\u0107 praktyczne implikacje, jakie z niej wyp\u0142ywaj\u0105, pos\u0142u\u017cymy si\u0119 jako przyk\u0142adem implementacj\u0105 DMA, zastosowan\u0105 w\u00a0<a href=\"https:\/\/botland.com.pl\/121-stm32\" data-wpel-link=\"internal\"><b>mikrokontrolerach STM32<\/b><\/a>\u00a0z rodziny F0. S\u0105 to stosunkowo niewielkie, ale wydajne i uniwersalne mikrokontrolery 32-bitowe z rdzeniem ARM Cortex M0. Warto zapozna\u0107 si\u0119 tutaj ze schematem przedstawiaj\u0105cy uproszczon\u0105 architektur\u0119 mikrokontrolera oraz DMA. Zar\u00f3wno sam rdze\u0144 Cortex-M0, jak i DMA, s\u0105 pod\u0142\u0105czone do tej samej macierzy (Bus matrix), niejako \u201espinaj\u0105cej\u201d wszystkie bloki g\u0142\u00f3wne oraz peryferyjne \u2013 w tym pami\u0119ci Flash i RAM, szyny do obs\u0142ugi port\u00f3w GPIO oraz most (Bridge), obs\u0142uguj\u0105cy wszystkie pozosta\u0142e peryferia.<\/p><p>Z opisanych po\u0142\u0105cze\u0144 wynika pierwsza, bardzo wa\u017cna cecha DMA \u2013 kontroler mo\u017ce uzyskiwa\u0107 dost\u0119p do pami\u0119ci oraz peryferi\u00f3w niezale\u017cnie od pracy rdzenia (czyli \u2013 niejako \u201er\u00f3wnolegle\u201d do aktualnie wykonywanych instrukcji, zawartych w programie). Oczywi\u015bcie, nie ma nic za darmo \u2013 w momencie, gdy DMA uzyskuje dost\u0119p np. do pami\u0119ci Flash lub kontrolera UART, rdze\u0144 procesora musi poczeka\u0107 na moment, gdy dany zas\u00f3b b\u0119dzie wolny. Dopiero wtedy rdze\u0144 mo\u017ce uzyska\u0107 dost\u0119p i wykona\u0107 zadane operacje. Taka forma dzia\u0142ania, w kt\u00f3rej dost\u0119p do zasob\u00f3w mikrokontrolera jest prze\u0142\u0105czany pomi\u0119dzy DMA oraz rdzeniem, pozwala na uzyskanie znacznych oszcz\u0119dno\u015bci czasowych \u2013 procesor nie musi samodzielnie realizowa\u0107 wszystkich procedur przesy\u0142ania danych, gdy\u017c \u2013 za cen\u0119 chwilowego \u201eoddania\u201d kontrolerowi DMA dost\u0119pu do pami\u0119ci i rejestr\u00f3w peryferyjnych \u2013 zostaje zwolniony z konieczno\u015bci samodzielnego realizowania ka\u017cdej, elementarnej operacji odczytu i zapisu nawet na sporych blokach danych.<\/p><p>Zwr\u00f3\u0107 teraz uwag\u0119 na schemat samego bloku DMA \u2013 zawiera on okre\u015blon\u0105 liczb\u0119 kana\u0142\u00f3w (tutaj jest ich pi\u0119\u0107, natomiast w du\u017cych mikrokontrolerach wielokrotnie wi\u0119cej), kt\u00f3re poprzez wsp\u00f3lny \u201eprze\u0142\u0105cznik\u201d s\u0105 doprowadzone do szyny, \u0142\u0105cz\u0105cej DMA z macierz\u0105. Ponadto kontroler zawiera w swojej strukturze blok, okre\u015blany jako arbiter \u2013 jego zadaniem jest decydowanie, kt\u00f3ry z kana\u0142\u00f3w DMA ma w danym momencie dost\u0119p do zasob\u00f3w mikrokontrolera. Ale czym dok\u0142adnie s\u0105 kana\u0142y DMA i jakie daj\u0105 mo\u017cliwo\u015bci programi\u015bcie?<\/p><h3>Kana\u0142y, priorytety i multipleksing, czyli jak unikn\u0105\u0107 zderzenia dw\u00f3ch poci\u0105g\u00f3w na tym samym torze?<\/h3><p>Powiedzieli\u015bmy ju\u017c, \u017ce kontroler DMA umo\u017cliwia dost\u0119p do r\u00f3\u017cnych zasob\u00f3w procesora bez konieczno\u015bci anga\u017cowania rdzenia w najprostsze operacje zapisu i odczytu. Ka\u017cdy kana\u0142 DMA, kt\u00f3ry ma by\u0107 zaprz\u0119gni\u0119ty do pracy w projektowanej aplikacji, musi by\u0107 uprzednio w\u0142a\u015bciwie skonfigurowany. Zapewne intuicyjnie domy\u015blasz si\u0119 ju\u017c, \u017ce ka\u017cdy z nich mo\u017ce pracowa\u0107 niezale\u017cnie od pozosta\u0142ych, realizuj\u0105c nawet zupe\u0142nie r\u00f3\u017cne funkcje. U\u017cycie kana\u0142\u00f3w (zamiast jednego, \u201ewielkiego\u201d kontrolera) jest pierwszym sposobem na unikni\u0119cie konfliktu podczas dost\u0119pu do poszczeg\u00f3lnych zasob\u00f3w procesora. Mo\u017cesz wyobrazi\u0107 sobie w du\u017cym uproszczeniu, \u017ce kana\u0142y DMA stanowi\u0105 osobne, r\u00f3wnoleg\u0142e torowiska na du\u017cym dworcu kolejowym. Po ka\u017cdym torze, w tym samym momencie, mo\u017ce przeje\u017cd\u017ca\u0107 inny poci\u0105g \u2013 w dowoln\u0105 stron\u0119 i z dowoln\u0105 pr\u0119dko\u015bci\u0105 (oczywi\u015bcie, w granicach swoich mo\u017cliwo\u015bci technicznych).<\/p><p>Co jednak zrobi\u0107, gdy dwa poci\u0105gi musz\u0105 skorzysta\u0107 z tego samego peronu, a nawet toru? Oczywistym (i jedynym mo\u017cliwym) wyj\u015bciem jest rzecz jasna zatrzymanie drugiego ze sk\u0142ad\u00f3w na czas przejazdu pierwszego, a \u2013 po zwolnieniu danego toru \u2013 wprowadzenie na\u0144 pierwszego pojazdu. W ten spos\u00f3b, kosztem nieuniknionego (cho\u0107 mo\u017cliwie najkr\u00f3tszego) przestoju, obydwa sk\u0142ady mog\u0105 bezpiecznie przejecha\u0107 okre\u015blony odcinek. Ruchem na stalowych szynach kolejowych odpowiada dr\u00f3\u017cnik, kt\u00f3rego zadaniem jest ustalenie pierwsze\u0144stwa danego poci\u0105gu, albo \u2013 m\u00f3wi\u0105c szerzej \u2013 kolejno\u015bci przejazdu wszystkich poci\u0105g\u00f3w oczekuj\u0105cych na dost\u0119p do zawiadywanego przeze\u0144 obszaru. W \u015bwiecie mikrokontroler\u00f3w te\u017c u\u017cywamy poj\u0119cia szyn \u2013 np. szyna adresowa i szyna danych \u2013 a za przydzielanie dost\u0119pu do nich odpowiednim peryferiom odpowiada tzw. arbiter. Jest to wyspecjalizowana cz\u0119\u015b\u0107 kontrolera DMA, kt\u00f3ra na podstawie ustalonych przez programist\u0119 priorytet\u00f3w \u201edopuszcza\u201d do danego zasobu wykorzystuj\u0105ce go bloki peryferyjne lub pami\u0119\u0107.<\/p><h2>Konfiguracja DMA<\/h2><p>Masz ju\u017c podstawowe informacje na temat sposobu dzia\u0142ania oraz najcz\u0119\u015bciej stosowanych scenariuszy wykorzystania kontrolera DMA. Zbierzmy zatem informacje na temat podstawowych parametr\u00f3w, kt\u00f3re trzeba skonfigurowa\u0107 (poprzez zapis odpowiednich rejestr\u00f3w), aby m\u00f3c skorzysta\u0107 z dobrodziejstw naszego kontrolera. Dla lepszego zobrazowania przedstawianego tematu, pos\u0142u\u017cymy si\u0119 zn\u00f3w przyk\u0142adem bloku DMA, oferowanego przez mikrokontrolery z rodziny STM32F0 (pe\u0142en opis znajdziesz w dokumentacji firmy ST \u2013 w tym przypadku jest to dokument nr RM0360).<\/p><p>Kontroler DMA musi \u201ewiedzie\u0107\u201d, sk\u0105d nale\u017cy pobiera\u0107 dane oraz do jakiej lokalizacji docelowej je przesy\u0142a\u0107. W tym celu konieczne jest ustawienie adres\u00f3w \u2013 w j\u0119zykach C lub C++ do rejestr\u00f3w adresowych DMA nale\u017cy wpisa\u0107 odpowiednie wska\u017aniki. Poniewa\u017c ka\u017cdy kana\u0142 mo\u017ce pracowa\u0107 na innych zasobach, dla ka\u017cdego z nich jest przewidziana osobna para rejestr\u00f3w adresowych: DMA_CPARx (gdzie x- numer kana\u0142u) oraz DMA_CMARx. Niezb\u0119dne jest okre\u015blenie, czy ka\u017cdy kolejny transfer danych ma odbywa\u0107 si\u0119 z u\u017cyciem tego samego rejestru (lub elementu bufora w pami\u0119ci), czy te\u017c do kolejnego \u2013 w tym drugim przypadku nale\u017cy w rejestrze konfiguracyjnym DMA_CCRx ustawi\u0107 bit MINC (je\u017celi adres bufora wpisano do rejestru DMA_CMARx) lub PINC (je\u017celi transfery maj\u0105 si\u0119 odbywa\u0107 do\/z kolejnych rejestr\u00f3w lub kom\u00f3rek, pocz\u0105wszy od adresu wpisanego do DMA_CPARx).<\/p><p>Poniewa\u017c jednak dane mog\u0105 mie\u0107 r\u00f3\u017cn\u0105 d\u0142ugo\u015b\u0107 (jednego bajtu \u2013 8 bit\u00f3w, s\u0142owa 16-bitowego lub 32-bitowego), konieczne jest tak\u017ce ustalenie rozmiaru pojedynczej danej w obu lokalizacjach osobno \u2013 do tego s\u0142u\u017c\u0105 bity MSIZE i PSIZE, r\u00f3wnie\u017c nale\u017c\u0105ce do rejestru DMA_CCRx. Ten sam rejestr zawiera tak\u017ce bity okre\u015blaj\u0105ce priorytet (bity PL0 oraz PL1), tryb pracy \u2013 pojedynczy lub cykliczny (bit CIRC), a tak\u017ce kierunek transferu pomi\u0119dzy obydwiema lokalizacjami (DIR). Liczb\u0119 transfer\u00f3w do wykonania po uruchomieniu DMA (lub w jednym cyklu, je\u017celi w\u0142\u0105czony jest tryb cykliczny) okre\u015bla zawarto\u015b\u0107 rejestru DMA_CNDTRx. Ponadto, wspomniany wcze\u015bniej rejestr DMA_CCRx zawiera bity pozwalaj\u0105ce na w\u0142\u0105czenie (zezwolenie na wywo\u0142ywanie) przerwa\u0144, informuj\u0105cych procesor o ko\u0144cu transmisji (bit TCIE), osi\u0105gni\u0119ciu po\u0142owy liczby zadanych transfer\u00f3w (HTIE) czy te\u017c o wyst\u0105pieniu b\u0142\u0119du (TEIE). Uruchomienie DMA musi oczywi\u015bcie tak\u017ce by\u0107 wykonane przez program \u2013 w tym celu nale\u017cy ustawi\u0107 bit EN. Warto doda\u0107, \u017ce \u2013 niejako wbrew nazwom \u2013 DMA w mikrokontrolerach STM32 (i nie tylko) pozwala tak\u017ce na wygodn\u0105 realizacj\u0119 przesy\u0142u danych pomi\u0119dzy dwiema r\u00f3\u017cnymi lokalizacjami pami\u0119ci \u2013 w tym celu nale\u017cy ustawi\u0107 bit MEM2MEM (r\u00f3wnie\u017c w rejestrze DMA_CCRx) \u2013 wtedy obydwa rejestry adresowe DMA_CMAR i DMA_CPAR powinny oczywi\u015bcie zawiera\u0107 wska\u017aniki na zmienne lub tablice, znajduj\u0105ce si\u0119 w kt\u00f3rej\u015b z dost\u0119pnych pami\u0119ci.<\/p><p>Niezwykle wa\u017cne jest \u2013 opr\u00f3cz ustawienia opisanych powy\u017cej rejestr\u00f3w \u2013 tak\u017ce odpowiednie skonfigurowanie blok\u00f3w peryferyjnych, kt\u00f3re maj\u0105 wsp\u00f3\u0142pracowa\u0107 z DMA. Przyk\u0142adowo, je\u017celi dane odbierane przez UART maj\u0105 by\u0107 zapisywane do bufora w pami\u0119ci RAM, to w trzecim rejestrze konfiguracyjnym kontrolera interfejsu szeregowego (USART_CR3) nale\u017cy ustawi\u0107 bit DMAR. Je\u017celi transfer ma si\u0119 odbywa\u0107 z pami\u0119ci do interfejsu UART, nale\u017cy ustawi\u0107 bit DMAT \u2013 przy czym warto doda\u0107, \u017ce dzi\u0119ki rozdzieleniu kana\u0142\u00f3w mo\u017cliwe jest jednoczesne wykorzystywanie DMA zar\u00f3wno do nadawania, jak i odbioru danych.<\/p><h3>DMA w du\u017cych mikrokontrolerach<\/h3><p>Dla uproszczenia opisu pos\u0142u\u017cyli\u015bmy si\u0119 przyk\u0142adem jednego z relatywnie prostszych mikrokontroler\u00f3w, nale\u017c\u0105cych do ogromnej rodziny STM32. Warto wiedzie\u0107, \u017ce w przypadku naprawd\u0119 sporych uk\u0142ad\u00f3w z rdzeniem ARM kontroler DMA mo\u017ce umo\u017cliwia\u0107 znacznie wi\u0119ksz\u0105 liczb\u0119 kombinacji adresowych dzi\u0119ki zastosowaniu \u2013 opr\u00f3cz kana\u0142\u00f3w \u2013 tak\u017ce tzw. strumieni (ang.\u00a0<em>stream<\/em>). Niekt\u00f3re mikrokontrolery maj\u0105 w swojej strukturze dwa osobne kontrolery DMA, za\u015b najwi\u0119ksi cz\u0142onkowie rodziny STM32 oferuj\u0105 ponadto specjalizowany kontroler Chrom-Art Accelerator(TM), oznaczany skr\u00f3tem DMA2D. Przyrostek \u201e2D\u201d jest nieprzypadkowy \u2013 blok ten s\u0142u\u017cy bowiem do obs\u0142ugi ramek obrazu, a jego przeznaczeniem jest uproszczenie i przyspieszenie powtarzalnych, prostych, ale jednocze\u015bnie czasoch\u0142onnych operacji, zwi\u0105zanych z wy\u015bwietlaniem grafiki \u2013 np. wype\u0142niania obrazu okre\u015blonym kolorem czy obs\u0142ug\u0119 przenikania i przezroczysto\u015bci.<\/p><h2>Podsumowanie<\/h2><p>W artykule przedstawili\u015bmy, do czego s\u0142u\u017cy kontroler DMA, jakie pe\u0142ni funkcje w praktycznych aplikacjach oraz jakie kroki nale\u017cy wykona\u0107 w celu zaprz\u0119gni\u0119cia go do pracy. Warto o tym pami\u0119ta\u0107 podczas pisania program\u00f3w na bardziej zaawansowanych mikrokontrolerach, gdy\u017c wykorzystanie kontrolera bezpo\u015bredniego dost\u0119pu do pami\u0119ci pozwala nie tylko znacznie upro\u015bci\u0107 pewne powtarzalne operacje na, niejednokrotnie obszernych, zbiorach danych, ale tak\u017ce umo\u017cliwia znaczne odci\u0105\u017cenie procesora. W wielu zastosowaniach odzyskana w ten spos\u00f3b moc obliczeniowa umo\u017cliwia sprawniejsze i bardziej niezawodne realizowanie wielu wa\u017cnych zada\u0144, niejednokrotnie krytycznych pod wzgl\u0119dem czasu wykonywania programu.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d7dbc7f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d7dbc7f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-de1f4e6\" data-id=\"de1f4e6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d79b538 elementor-widget elementor-widget-text-editor\" data-id=\"d79b538\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div id=\"k-faq-accord\"><h2>Kontroler DMA &#8211; FAQ<\/h2>\n    <div class=\"tabs\" itemscope=\"\" itemtype=\"https:\/\/schema.org\/FAQPage\">\n        <div class=\"tab\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n            <input type=\"checkbox\" id=\"chck1\" \/><h3>\n                <label class=\"tab-label\" for=\"chck1\" itemprop=\"name\">Co to znaczy DMA?\n                <\/label><\/h3>\n            <div class=\"tab-content\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n                <div itemprop=\"text\">\n<p>\nSkr\u00f3t DMA z ang. Direct Memory Access w bezpo\u015brednim t\u0142umaczeniu oznacza bezpo\u015bredni dost\u0119p do pami\u0119ci. To technika, w kt\u00f3rej urz\u0105dzenia pod\u0142\u0105czone np. do p\u0142yty g\u0142\u00f3wnej korzystaj\u0105 z pami\u0119ci operacyjnej RAM, bez konieczno\u015bci anga\u017cowania mocy obliczeniowej procesora (CPU). G\u0142\u00f3wnym celem wykorzystywania <a href=\"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#Praca-beznbspDMA-czyli-jak-skutecznie-stracic-czas-nanbspnajprostsze-operacje\" data-wpel-link=\"internal\">DMA<\/a>, czyli bezpo\u015bredniego dost\u0119pu do pami\u0119ci jest odci\u0105\u017cenie procesora g\u0142\u00f3wnego (m.in. od zada\u0144 zwi\u0105zanych z transferem danych).\n<\/p>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"tab\" itemscope=\"\" itemprop=\"mainEntity\" itemtype=\"https:\/\/schema.org\/Question\">\n            <input type=\"checkbox\" id=\"chck2\" \/><h3>\n                <label class=\"tab-label\" for=\"chck2\" itemprop=\"name\">Za co odpowiada kontroler DMA?\n                <\/label><\/h3>\n            <div class=\"tab-content\" itemscope=\"\" itemprop=\"acceptedAnswer\" itemtype=\"https:\/\/schema.org\/Answer\">\n                <div itemprop=\"text\">\n<p>\nG\u0142\u00f3wnym zadaniem kontrolera DMA jest przesy\u0142anie danych bezpo\u015brednio z konkretnej lokalizacji \u017ar\u00f3d\u0142owej (mo\u017ce to by\u0107 miejsce w pami\u0119ci lub rejestr peryferyjny) do wybranego miejsca. Nale\u017cy jednak zaznaczy\u0107, \u017ce przesy\u0142anie informacji tego typu jest bezb\u0142\u0119dne i w pewnym sensie automatyczne. Dodatkowo ca\u0142y proces nie wymaga anga\u017cowania procesora (jego mocy obliczeniowej). Ca\u0142y transfer DMA mo\u017ce odbywa\u0107 si\u0119 w postaci tak zwanych transfer\u00f3w cyklicznych lub pojedynczych.\n<\/p>\n                <\/div>\n            <\/div>\n        <\/div>    \n    <\/div>\n<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Pami\u0119\u0107 prawie absolutna. Przed Wami wyczerpuj\u0105ce informacje o pami\u0119ci DMA oraz jej konfiguracja. <\/p>\n","protected":false},"author":7,"featured_media":60266,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7],"tags":[147,221,222],"class_list":["post-2812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elektronika","tag-elektronika","tag-mikrokontrolery","tag-pamiec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DMA - Bezpo\u015bredni dost\u0119p do pami\u0119ci - Botland<\/title>\n<meta name=\"description\" content=\"Poznaj budow\u0119, spos\u00f3b dzia\u0142ania i zastosowania kontrolera bezpo\u015bredniego dost\u0119pu do pami\u0119ci (DMA) \u2013 odci\u0105\u017c sw\u00f3j procesor i odzyskaj zmarnowan\u0105 moc obliczeniow\u0105!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DMA - Bezpo\u015bredni dost\u0119p do pami\u0119ci - Botland\" \/>\n<meta property=\"og:description\" content=\"Poznaj budow\u0119, spos\u00f3b dzia\u0142ania i zastosowania kontrolera bezpo\u015bredniego dost\u0119pu do pami\u0119ci (DMA) \u2013 odci\u0105\u017c sw\u00f3j procesor i odzyskaj zmarnowan\u0105 moc obliczeniow\u0105!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/\" \/>\n<meta property=\"og:site_name\" content=\"Botland\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/Botland\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-19T06:22:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-24T07:50:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/05\/new2023-okladki-cz3_dma.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1510\" \/>\n\t<meta property=\"og:image:height\" content=\"755\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Anna Wieczorek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Anna Wieczorek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/\"},\"author\":{\"name\":\"Anna Wieczorek\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#\\\/schema\\\/person\\\/432699b001be1bfbf673d91827fb8735\"},\"headline\":\"DMA &#8211; Bezpo\u015bredni dost\u0119p do pami\u0119ci\",\"datePublished\":\"2020-06-19T06:22:31+00:00\",\"dateModified\":\"2023-05-24T07:50:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/\"},\"wordCount\":2729,\"publisher\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/new2023-okladki-cz3_dma.jpg\",\"keywords\":[\"elektronika\",\"mikrokontrolery\",\"pami\u0119\u0107\"],\"articleSection\":[\"Elektronika\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/\",\"name\":\"DMA - Bezpo\u015bredni dost\u0119p do pami\u0119ci - Botland\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/new2023-okladki-cz3_dma.jpg\",\"datePublished\":\"2020-06-19T06:22:31+00:00\",\"dateModified\":\"2023-05-24T07:50:50+00:00\",\"description\":\"Poznaj budow\u0119, spos\u00f3b dzia\u0142ania i zastosowania kontrolera bezpo\u015bredniego dost\u0119pu do pami\u0119ci (DMA) \u2013 odci\u0105\u017c sw\u00f3j procesor i odzyskaj zmarnowan\u0105 moc obliczeniow\u0105!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/#primaryimage\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/new2023-okladki-cz3_dma.jpg\",\"contentUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/new2023-okladki-cz3_dma.jpg\",\"width\":1510,\"height\":755},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/dma-bezposredni-dostep-do-pamieci\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DMA &#8211; Bezpo\u015bredni dost\u0119p do&nbsp;pami\u0119ci\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/\",\"name\":\"Botland\",\"description\":\"Blog Raspberry Pi, Arduino, elektronika i robotyka - Botland\",\"publisher\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#organization\",\"name\":\"Botland\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/botland.store\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/logo_kolor_WP_2-1.png\",\"contentUrl\":\"https:\\\/\\\/botland.store\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/04\\\/logo_kolor_WP_2-1.png\",\"width\":250,\"height\":57,\"caption\":\"Botland\"},\"image\":{\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/facebook.com\\\/Botland\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/#\\\/schema\\\/person\\\/432699b001be1bfbf673d91827fb8735\",\"name\":\"Anna Wieczorek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Anna-150x150.jpg\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Anna-150x150.jpg\",\"contentUrl\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/Anna-150x150.jpg\",\"caption\":\"Anna Wieczorek\"},\"description\":\"Kobieta w m\u0119skim \u015bwiecie robot\u00f3w. Zwi\u0105zana z Botlandem \\\"w\u0142a\u015bciwie od zawsze\\\". Estetka, kt\u00f3rej wsz\u0119dzie pe\u0142no. Wierzy, \u017ce na sen przyjdzie jeszcze czas. Po pracy entuzjastka kultury i kuchni hiszpa\u0144skiej.\",\"url\":\"https:\\\/\\\/botland.com.pl\\\/blog\\\/author\\\/anna\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DMA - Bezpo\u015bredni dost\u0119p do pami\u0119ci - Botland","description":"Poznaj budow\u0119, spos\u00f3b dzia\u0142ania i zastosowania kontrolera bezpo\u015bredniego dost\u0119pu do pami\u0119ci (DMA) \u2013 odci\u0105\u017c sw\u00f3j procesor i odzyskaj zmarnowan\u0105 moc obliczeniow\u0105!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/","og_locale":"pl_PL","og_type":"article","og_title":"DMA - Bezpo\u015bredni dost\u0119p do pami\u0119ci - Botland","og_description":"Poznaj budow\u0119, spos\u00f3b dzia\u0142ania i zastosowania kontrolera bezpo\u015bredniego dost\u0119pu do pami\u0119ci (DMA) \u2013 odci\u0105\u017c sw\u00f3j procesor i odzyskaj zmarnowan\u0105 moc obliczeniow\u0105!","og_url":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/","og_site_name":"Botland","article_publisher":"https:\/\/facebook.com\/Botland\/","article_published_time":"2020-06-19T06:22:31+00:00","article_modified_time":"2023-05-24T07:50:50+00:00","og_image":[{"width":1510,"height":755,"url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/05\/new2023-okladki-cz3_dma.jpg","type":"image\/jpeg"}],"author":"Anna Wieczorek","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Anna Wieczorek","Szacowany czas czytania":"14 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#article","isPartOf":{"@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/"},"author":{"name":"Anna Wieczorek","@id":"https:\/\/botland.com.pl\/blog\/#\/schema\/person\/432699b001be1bfbf673d91827fb8735"},"headline":"DMA &#8211; Bezpo\u015bredni dost\u0119p do pami\u0119ci","datePublished":"2020-06-19T06:22:31+00:00","dateModified":"2023-05-24T07:50:50+00:00","mainEntityOfPage":{"@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/"},"wordCount":2729,"publisher":{"@id":"https:\/\/botland.com.pl\/blog\/#organization"},"image":{"@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#primaryimage"},"thumbnailUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/05\/new2023-okladki-cz3_dma.jpg","keywords":["elektronika","mikrokontrolery","pami\u0119\u0107"],"articleSection":["Elektronika"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/","url":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/","name":"DMA - Bezpo\u015bredni dost\u0119p do pami\u0119ci - Botland","isPartOf":{"@id":"https:\/\/botland.com.pl\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#primaryimage"},"image":{"@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#primaryimage"},"thumbnailUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/05\/new2023-okladki-cz3_dma.jpg","datePublished":"2020-06-19T06:22:31+00:00","dateModified":"2023-05-24T07:50:50+00:00","description":"Poznaj budow\u0119, spos\u00f3b dzia\u0142ania i zastosowania kontrolera bezpo\u015bredniego dost\u0119pu do pami\u0119ci (DMA) \u2013 odci\u0105\u017c sw\u00f3j procesor i odzyskaj zmarnowan\u0105 moc obliczeniow\u0105!","breadcrumb":{"@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#primaryimage","url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/05\/new2023-okladki-cz3_dma.jpg","contentUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2023\/05\/new2023-okladki-cz3_dma.jpg","width":1510,"height":755},{"@type":"BreadcrumbList","@id":"https:\/\/botland.com.pl\/blog\/dma-bezposredni-dostep-do-pamieci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/botland.com.pl\/blog\/"},{"@type":"ListItem","position":2,"name":"DMA &#8211; Bezpo\u015bredni dost\u0119p do&nbsp;pami\u0119ci"}]},{"@type":"WebSite","@id":"https:\/\/botland.com.pl\/blog\/#website","url":"https:\/\/botland.com.pl\/blog\/","name":"Botland","description":"Blog Raspberry Pi, Arduino, elektronika i robotyka - Botland","publisher":{"@id":"https:\/\/botland.com.pl\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/botland.com.pl\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/botland.com.pl\/blog\/#organization","name":"Botland","url":"https:\/\/botland.com.pl\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.com.pl\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/botland.store\/blog\/wp-content\/uploads\/2018\/04\/logo_kolor_WP_2-1.png","contentUrl":"https:\/\/botland.store\/blog\/wp-content\/uploads\/2018\/04\/logo_kolor_WP_2-1.png","width":250,"height":57,"caption":"Botland"},"image":{"@id":"https:\/\/botland.com.pl\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/Botland\/"]},{"@type":"Person","@id":"https:\/\/botland.com.pl\/blog\/#\/schema\/person\/432699b001be1bfbf673d91827fb8735","name":"Anna Wieczorek","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2021\/02\/Anna-150x150.jpg","url":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2021\/02\/Anna-150x150.jpg","contentUrl":"https:\/\/botland.com.pl\/blog\/wp-content\/uploads\/2021\/02\/Anna-150x150.jpg","caption":"Anna Wieczorek"},"description":"Kobieta w m\u0119skim \u015bwiecie robot\u00f3w. Zwi\u0105zana z Botlandem \"w\u0142a\u015bciwie od zawsze\". Estetka, kt\u00f3rej wsz\u0119dzie pe\u0142no. Wierzy, \u017ce na sen przyjdzie jeszcze czas. Po pracy entuzjastka kultury i kuchni hiszpa\u0144skiej.","url":"https:\/\/botland.com.pl\/blog\/author\/anna\/"}]}},"_links":{"self":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/posts\/2812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/comments?post=2812"}],"version-history":[{"count":0,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/posts\/2812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/media\/60266"}],"wp:attachment":[{"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/media?parent=2812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/categories?post=2812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/botland.com.pl\/blog\/wp-json\/wp\/v2\/tags?post=2812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}