Fórum témák
» Több friss téma |
Cikkek » Egyszerű soros kommunikáció AVR-rel (UART) Egyszerű soros kommunikáció AVR-rel (UART)
Szerző: Fizikus, idő: Jún 12, 2010, Olvasva: 56951, Oldal olvasási idő: kb. 3 perc
Soros kommunikáció polling módszerrelUART beállításaMielőtt használni tudnánk, az UART-ot megfelelően be kell állítani. Létrehozok egy függvényt, ami automatikusan beállítja az UART-ot (az első 2 példaprogramban még nem használunk megszakításokat).
USART használata (adat küldése/fogadása) Miután elkészült az UART beállító függvény, most megnézzük, hogyan is lehet adatokat küldeni és fogadni a soros porton keresztül. Ez a cikk az UART-tal ismerkedőknek íródott, ezért a legegyszerűbb megoldásokat fogom alkalmazni és csak a soros kommunikációra fogok koncentrálni. Természetesen később, amikor már kicsit megismerkedtünk az UART-tal, akkor az UART polling-olása helyett a következő fejezetben megnézzük, hogyan lehet adatokat küldeni és fogadni a beépített UART megszakítások használatával. Adat küldése USART-talEz a függvény egy adott karakter adatot küld el az UART-tal. Lényegében csak az UART puffer-jébe írjuk be az elküldendő adatot, amit valójában már az UART küld el automatikusan a soros porton keresztül. Egy fontos dolgot kell észben tartanunk, mielőtt az UART kimenő pufferjébe adatot írnánk: először ellenőrizni kell, hogy a puffer szabad-e vagy nem. Ha foglalt, akkor az azt jelzi, hogy az UART még nem fejezte be a korábban kapott adat elküldését, de amint ezzel végzett, akkor átveszi a pufferből a következő adatot és elkezdi elküldeni azt. Fontos azt is megemlíteni, hogy a pufferben tárolt adat nem az az adat, amit az UART éppen küld. Az UART a pufferből a shift-regiszterébe olvassa az adatot, ami elkezdi elküldeni azt, ezáltal a puffer felszabadul és kész új adatok fogadására. Minden alkalommal, amikor az UART beolvassa a kimenő pufferből az adatokat, ezáltal törli is azt, és erről tájékoztatja is a mikrovezérlőt az UCSRA regiszter “USART Adat Regiszter Üressé Vált - UDRE” jelzőbitjének az átállításával. Az adatküldő függvényünkben ennek a bitnek az állapotát figyeljük folyamatosan, és amikor azt jelzi, hogy a puffer üres, s adatot írhatunk bele, akkor töltjük fel a kimenő puffert (UDR regisztert). A fent vázolt folyamatot követhetjük nyomon az alábbi ábrán: a) Az UDR kimenő puffere üres, de az előző adatbájt küldését még nem fejezte be a küldő Shift-regiszter. b) Ha új adatbájtot akarunk küldeni, akkor azt beírhatjuk az üres UDR kimenő pufferbe. Az előző adatbájt küldését még mindig nem fejezte be a küldő Shift-regiszter. c) Ha a küldő Shift-regiszter befejezte az előző adatbájt küldését, akkor automatikusan beolvassa az UDR kimenő pufferéből a következő elküldendő adatot. d) Az UDR puffer kiolvasása egyben ki is üríti azt (a tartalmát lenullázza) és ezáltal a TXC jelzőbit állapota is megváltozik, jelezve, hogy az UDR kimenő puffere üres, kész az újabb adat fogadására.
Adat beolvasása UART-talEz a függvény adatot olvas be az UART-ból. Például, ha a PC-vel adatot küldünk a mikrovezérlőnek (a), akkor az AVR UART az adatot automatikusan fogadja (b), és ha a bejövő adatbájt összes bitje megérezett, akkor az UDR bejövő puffer-be rakja, majd az UCSRA regiszter megfelelő jelzőbitjét is beállítja, ezzel jelezve, hogy az adat elérhető a bejövő pufferben (c). Innen már a mi felelősségünk (illetve a főprogramunké), hogy a pufferben lévő adatot kiolvassuk és feldolgozzuk (d), különben, ha időközben új adatbájt érkezik, akkor az előző adatot felülírja. Tehát írunk egy olyan “polling” függvényt, ami folyamatosan azt vizsgálja, hogy az UCSRA regiszter RXC bitje mikor jelzi, hogy új bejövő adat érkezett, majd azt beolvassa az UART UDR regiszteréből. Fontos megjegyezni, hogy amint az alábbi ábrán is látható, adat küldésekor egy bájt legkisebb helyiértékű bitjét (0. bit) küldjük először, a legmagasabb helyiértékű bit-jét (7. bit) pedig utoljára. Az adat fogadásakor is a 0-dik bit érkezik meg először és a 7-dik bit utoljára. Ezért a fogadó Shift regiszter “megfordítja” a beérkező bitek sorrendjét, hogy az adatbájton belül a megfelelő helyre kerüljenek.
A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |