32-bitni mikrokontrolerji prinašajo v svetova elektrotehnike in računalništva povsem nove dimenzije. Med njimi sta tudi povezljivost v WiFi in internet stvari ter krmilnik DMA za hitre pomnilniške prenose.
V preteklem nadaljevanju smo predstavili podporo za med-mikrokontrolersko vodilo CAN, ki ga uporabljajo številni izdelovalci avtomobilov. Morda ga res prav pogosto ne potrebujemo, a je lahko nepogrešljiv, če PIC32 uporabimo kot vmesnik za povezavo PC z avtomobilsko diagnostično vtičnico.
Tokrat se bomo lotili krmilnika DMA (neposredni pomnilniški dostop, angl. direct memory access) in Ethernet povezav, tako ožičenih, kot brezžičnih (WiFi) in spletnih storitev. Uporabili bomo PIC32MZ in ESP8266. Praktičnih primerov je na tem področju res veliko. Denimo, PIC32 lahko uporabimo celo kot usmerjevalnik med WiFi in klasično ožičeno Ethernet povezavo. Poglavje V praksi pa tokrat začenjamo s PIC32 in ESP8266 ter funkcionalnostmi, ki dajejo PIC32 prednost pred drugimi mikrokontrolerji pri vstopu v Internet stvari.
Zgradba in delovanje
Krmilnik DMA
Brez krmilnika DMA (DMAC, angl. DMA controller) za masovne prenose podatkov med pomnilniki in hitrimi zunanjimi enotami danes ni resnega računalnika. A v nasprotju s PIC32, mnogi ceneni mikrokontrolerji drugih proizvajalcev, med njimi celo nekateri 32-bitni, DMAC nimajo.
DMAC je, poleg CPU-ja, drugi gospodar pomnilniškega in zunanjih vodil PIC32. Deluje brez posredovanja CPU in lahko zelo hitro prenaša podatke iz modulov SPI, UART, PMP, … ter med različnimi lokacijami v pomnilniku, saj mu za to ni potrebno dekodirati in izvajati strojnih ukazov. Ima 4 enake, neodvisne prenosne kanale, od katerih ima vsak 32-bitna izvorni in ponorni naslovni register. Povečevanje njunih vrednosti je med prenosom podatkov neodvisno. To pomeni, da lahko DMAC izvaja tudi večkratne zaporedne preslikave manjšega nabora pomnilniških lokacij v večje pomnilniško polje. Denimo, pri branju iz UART vse podatke prenesemo zaporedno iz ene lokacije v pomnilniškem prostoru PIC32, oziroma registra U2RXREG, pri pisanju pa ravno obratno, podatke iz daljšega pomnilniškega polja zaporedno zapisujemo na eno samo lokacijo v pomnilniškem prostoru PIC32, U2TXREG.
DMAC samodejno ugotovi stopnjo granulacije prenosa podatkov do 32-bitne beseda do enega bajta. Zato za razliko od osebnih računalnikov, ni potrebna poravnava pomnilniških lokacij, tako da bi bili, na primer izvorni in ponorni naslov ter dolžina prenosa deljivi s 4, če prenašamo 32-bitine pomnilniške beseda.
Prenos podatkov lahko prožimo programsko ali preko poljubne prekinitve. Nas bodo zanimale predvsem prekinitve UART-ov. Mogoča sta tudi enkratno ali ciklično proženje DMAC in veriženje prenosnih kanalov DMAC. Slednje je pomembno, ko želimo, da DMAC zaporedno izvede več hitrih prenosov podatkov med različnimi napravami.
Med prenosom podatkov so ključni registri, ki določajo: 32-bitni izvorni naslov, 32-bitni ponorni naslov, granulacijo, s katero povemo koliko bajtov se prenese ob posamični sprožitvi prenosa teh dolžini izvornega in ponornega pomnilniškega polja v bajtih. Slednji omogočata zaporedno branje in zaporedno pisanje podatkov na in iz pomnilniških lokaciji. Denimo, če želimo brati podatke iz vhodnega izravnalnika UART v pomnilniško polje, bosta tako dolžina izvornega polja kot dolžina posamičnega prenosa enaka 1, medtem ko bo dolžina ponornega polja enaka dolžini polja v pomnilniku, ki je na voljo za shranjevanje podatkov. Če bomo prenos prožili prekinitvijo ustreznega modula UART, CPU ne po potrebno za prenos podatkov v glavni pomnilnik narediti ničesar. Slednji se bodo enostavno pojavili.
Programiranje PIC32 (14)
2016_SE240_50