11. naloga: Neposredni dostop do pomnilnika (DMA)
Completion requirements
Due: Tuesday, 23 January 2024, 11:55 PM
Enoto USART3 oz- DBGU uporabljajte tako, da bo nize znakov sprejemala in oddajala s pomočjo DMA prenosov. Osnovne nastavitve enot USART3 oz. DBGU ostanejo enake kot pri nalogi z USART oziroma DBGU (podprograma _INIT). Pri tem dodatno napišite naslednje podprograme:
- Podprogram RCV_DMA, ki nastavi DMA krmilnik tako, da je pripravljen na sprejem naslednjih N znakov. Naslov polja, v katerega naj se znaki zapisujejo, naj dobi podprogram v registru R0, vrednost parametra N pa naj se prenese v podprogram preko registra R1. Parameter N ima lahko vrednost med 1 in 80. Če je vrednost parametra večja oziroma manjša, jo omejite na navedeni interval.
- Podprogram SND_DMA, ki nastavi DMA krmilnik tako, da je pripravljen na oddajo znakov. Naslov niza naj se prenese v podprogram preko registra R0, dolžina niza pa preko registra R1.
- Podprogram CHANGE, ki zamenja velike in male črke v nizu znakov. Naslov izvornega niza dobi podprogram v registru R0, naslov ponornega niza v registru R1, dolžino obeh nizov pa v registru R2.
V glavnem programu po začetnih nastavitvah (_INIT) pokličite podprogram SND_DMA, ki odda začetni niz znakov. Nato pokličite še RCV_DMA, kjer počakajte, da se DMA prenos zaključi. S klicem podprograma CHANGE zamenjajte velike in male črke v sprejetem nizu. Rezultat pošljite nazaj v PC s pomočjo SND_DMA.
Nalogo lahko rešite tudi na STM32H7 sistemu. Serijska povezava že deluje preko USB kabla in ni potrebno posebno povezovanje.
Dokumentacija je podana posebej.
FRI-SMS: Delo z lokalno testno prevezavo (Local Loopback, brez kabla):
V glavnem programu po začetnih nastavitvah (DEBUG_INIT) pokličite podprogram RCV_DMA in sprožite sprejem niza znakov. Nato pokličite podprogram RCV_DMA in sprožite oddajo niza znakov. Počakajte da se DMA oddaja niza znakov zaključi. Zaradi lokalne prevezave se bodo oddani znaki hkrati tudi sprejeli, zato preverite še, ali se je sprejem tudi zaključil (zastavica ENDRX). S klicem podprograma CHANGE zamenjajte velike in male črke v sprejetem nizu in jih vpišite v niz, ki se bo oddal v naslednji iteraciji.
- Podprogram RCV_DMA, ki nastavi DMA krmilnik tako, da je pripravljen na sprejem naslednjih N znakov. Naslov polja, v katerega naj se znaki zapisujejo, naj dobi podprogram v registru R0, vrednost parametra N pa naj se prenese v podprogram preko registra R1. Parameter N ima lahko vrednost med 1 in 80. Če je vrednost parametra večja oziroma manjša, jo omejite na navedeni interval.
- Podprogram SND_DMA, ki nastavi DMA krmilnik tako, da je pripravljen na oddajo znakov. Naslov niza naj se prenese v podprogram preko registra R0, dolžina niza pa preko registra R1.
- Podprogram CHANGE, ki zamenja velike in male črke v nizu znakov. Naslov izvornega niza dobi podprogram v registru R0, naslov ponornega niza v registru R1, dolžino obeh nizov pa v registru R2.
V glavnem programu po začetnih nastavitvah (_INIT) pokličite podprogram SND_DMA, ki odda začetni niz znakov. Nato pokličite še RCV_DMA, kjer počakajte, da se DMA prenos zaključi. S klicem podprograma CHANGE zamenjajte velike in male črke v sprejetem nizu. Rezultat pošljite nazaj v PC s pomočjo SND_DMA.
Nalogo lahko rešite tudi na STM32H7 sistemu. Serijska povezava že deluje preko USB kabla in ni potrebno posebno povezovanje.
Dokumentacija je podana posebej.
FRI-SMS: Delo z lokalno testno prevezavo (Local Loopback, brez kabla):
V glavnem programu po začetnih nastavitvah (DEBUG_INIT) pokličite podprogram RCV_DMA in sprožite sprejem niza znakov. Nato pokličite podprogram RCV_DMA in sprožite oddajo niza znakov. Počakajte da se DMA oddaja niza znakov zaključi. Zaradi lokalne prevezave se bodo oddani znaki hkrati tudi sprejeli, zato preverite še, ali se je sprejem tudi zaključil (zastavica ENDRX). S klicem podprograma CHANGE zamenjajte velike in male črke v sprejetem nizu in jih vpišite v niz, ki se bo oddal v naslednji iteraciji.