11. naloga: Neposredni dostop do pomnilnika (DMA)

Rok za oddajo: četrtek, 6. januar 2022, 07.57
Enoto DBGU uporabljajte tako, da bo znake sprejemala in oddajala s pomočjo DMA prenosov. Osnovne nastavitve ostanejo enake kot v 4.6 (podprogram DEBUG_INIT). Pri tem 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 (DEBUG_INIT) pokličite podprogram RCV_DMA, nato pa v zanki čakajte, da se DMA prenos zaključi (zastavica ENDRX). S klicem podprograma CHANGE zamenjajte velike in male črke v sprejetem nizu. Rezultat pošljite s pomočjo SND_DMA.

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.