Korábban irtam volt a wireless modulról, illetve a kameráról is. Hardveres témában az volt a következő a "to do" listámon, hogy az FPGA bordomat bővítsem mégegy RS232-es egységgel, hogy mindkettővel tudjak valós időben kommunikálni. (Persze a tesztelési fázis alatt az is elég, ha az egyik soros eszközön leolvasott adatokat el tudom küldeni a másik soros eszközönk keresztűl a számítógépnek...)
A következő konfigurációból indultunk ki. Adott egy Nexys 2-s fejlesztőpanel:
Ezen felül rendelkezünk még egy RS232-es PMOD-al is,
valamint rendelkezésünkre áll a Xilinx SDK fejlesztőkörnyezet (újabb harminc napos licenszel). Kell még továbbá két darab soros átalakító kábel (mert a laptopon nincs soros bemenet). Egyiket egy rossz egérrel cseréltem, a másik jött a WiFly dobozban. Ha ezek mind megvannak, akkor már a nehezén túljutottunk.
Most jön a kódolás. Létrehozunk egy új projektet, beállítjuk a fejlesztőpanelt, kiválasztjuk a perifériákat (itt az egyik soros eszközt, ami a fejlesztőpanelen rajta van, azt be is tudjuk rakni -automatice-). Ha elkészült a projekt, kigeneráljuk a download.bit-et, hogy lássuk, biztosan működik-e. (Nem egyszer szívtam meg, hogy már ez sem működött. Persze a saját kárán tanul az ember...) Ha működik, akkor hozzáadunk az IP Catalog-ból egy XPS Uart (Lite) IP-t,
hozzákötjük a Master PLB buszhoz, beállítjuk a lefoglalható memóriaterületet (64Kb), megadunk neki egy stílusos nevet (az én esetemben ez "RS232_SECOND" lett) és a portoknál beállítjuk, hogy az RX és TX külső elérésü portok lesznek. Ha ezt jól csináltuk, az External Ports alatt a következő látvány tárul a szemünk elé :
Persze a piros nyilacska nem lesz ott :P . Ezután a következő lépés a system.ucf-be beírni, hogy ezek a külsőnek deklarált portok a valóságban hová is fognak mutatni. Ez már elég trükkös, mert sok helyről kell összenézni az adatokat (nomeg kell ide a csillagok együttállása meg egy 38 jegyű prímszám is ahhoz, hogy működjön...). Nálam ez így nézett ki:
Itt az M14-M16 kombinációt eltalálni majdnem olyan nehéz, mint az ötöslottó. Ezután kiegészítjük a programunkat a következő sorokkal :
//(...)
#include "xuartlite.h"
//====================================================
#define BAUDRATE 9600
#define USE_PARITY 0
#define PARITY_ODD 1
#define DATABITS 8
//====================================================
int main (void) {
//(...)
unsigned int i;
char hello[12]="Masik soros.";
XUartLite Second_Rs;
XUartLite_Config UART_Configuration;
UART_Configuration.DeviceId = XPAR_RS232_SECOND_DEVICE_ID;
UART_Configuration.RegBaseAddr = XPAR_RS232_SECOND_BASEADDR;
UART_Configuration.BaudRate = BAUDRATE;
UART_Configuration.UseParity = USE_PARITY;
UART_Configuration.ParityOdd = PARITY_ODD;
UART_Configuration.DataBits = DATABITS;
//UART init:
XUartLite_CfgInitialize (&Second_Rs, &UART_Configuration, XPAR_RS232_SECOND_BASEADDR) ;
xil_printf("-- Egyik soros port --\r\n");
while(XUartLite_IsSending(&Second_Rs));
i = XUartLite_Send(&Second_Rs, (Xuint8*)(hello), 12);
return 0;
}
Persze a kód nem teljes, csak a fontosabb kiegészítéseket másoltam ide be. S ha minden jól működött és szerencsénk volt (és a megfelelő 38 jegyű prímszámot választottuk), akkor az egyik soros porton megjelenik az
"-- Egyik soros port --"
másikon pedig a"Masik soros."
szöveg. Ha valamit nem jól csináltunk és épp nem a mi munkánkkal vannak elfoglalva az Istenek, akkor még azt is meg kell nézni, hogy hogyan állnak a jumperek a PMod-on. A Pmod-ról annyit kell még tudni, hogy kétféleképpen lehet konfigurálni. Az egyik működési forma a háromszálas (RXD, TXD, GND), a másik az ötszálas (CTS, RTS, RXD, TXD, GND). Mi az előbbit részesítjük előnyben. Emiatt az egyes jumper nyitott állapotban, a kettes pedig zárt állapotban kell legyen, hogy a működés esélyeit növeljük.
(A képeket köszönjük a Digilentnek. Sajnos az én fényképezőgépemmel nem sikerült ilyen szépet készíteni...)
Röviden ennyi volt a mai teljesítmény. Pénteken felmegyek az egyetemre, s ha a rektorúr ott lesz, utánakérdezek a neuronháló tanításnak.
0 megjegyzés:
Megjegyzés küldése