3 Korištenje FT8xx biblioteke emulatora
Ovo poglavlje će dati primjer kako koristiti FT8xx emulator u FT8xx uzorku
aplikacija. Korisnici se ohrabruju da se upoznaju sa FT8xx aplikacijom
(pogledajte odjeljak Primjer aplikacije (+ EVE2) na sljedećoj stranici) prije pokretanja ovog poglavlja.
http://www.ftdichip.com/Support/SoftwareExamples/FT800_Projects.htm
Sučelje emulatora FT8xx definirano je u sljedećim datotekama:
“Ft800emu_inttypes.h”: definicija za cijeli broj za različite platforme.
“Ft800emu_spi_i2c.h”: SPI / I
Deklaracija 2C sučelja
“Ft800emu_emulator.h”: interfejs za pokretanje emulatora
3.1 Pokrenite FT800 emulator
Da bi se koristio FT800 emulator, korisnikov projekt je potreban da pozove API
“FT800EMU :: Emulator.run” sa specifičnim parametrom. Pokrenut će se biblioteka emulatora
ispravno i spremno za pristup kroz SPI / I
2C interface.
Pogledajte Slika 3 - Pokrenite FT8xx emulator.
3.2 Rad sa SPI / I2C interfejsom.
SPI / I2C sučelje je kontrolno sučelje FT800. FT800 emulatorska biblioteka pruža API-je
simulira isti interfejs. Budući da je FT800 uzorak aplikacija izgrađena u C jeziku, umjesto
C ++, jedan jednostavan C API omotač je uveden kao ispod kako bi olakšao konvenciju pozivanja.
#ifdef __cplusplus
extern "C" {
#endif
#ifdef MSVC_FT800EMU
#define BUFFER_OPTIMIZATION
#endif
void Ft_GpuEmu_SPII2C_begin ();
void Ft_GpuEmu_SPII2C_csLow ();
void Ft_GpuEmu_SPII2C_csHigh ();
void Ft_GpuEmu_SPII2C_end ();
void Ft_GpuEmu_SPII2C_StartRead (uint32_t addr);
uint8_t Ft_GpuEmu_SPII2C_transfer (uint8_t podaci);
void Ft_GpuEmu_SPII2C_StartWrite (uint32_t addr);
#ifdef __cplusplus
}
#endif
Slika 4 - API C interfejsa
Implementacija je kako slijedi:
void Ft_GpuEmu_SPII2C_begin ()
{\ T
FT800EMU :: SPII2C.begin ();
}
void Ft_GpuEmu_SPII2C_csLow ()
{\ T
FT800EMU :: SPII2C.csLow ();
}
void Ft_GpuEmu_SPII2C_csHigh ()
{\ T
FT800EMU :: SPII2C.csHigh ();
}
void Ft_GpuEmu_SPII2C_end ()
{\ T
FT800EMU :: SPII2C.end ();
}
uint8_t Ft_GpuEmu_SPII2C_transfer (podaci uint8_t)
{\ T
return FT800EMU :: SPII2C.transfer (data);
}
void Ft_GpuEmu_SPII2C_StartRead (uint32_t addr)
{\ T
Ft_GpuEmu_SPII2C_csLow ();
Ft_GpuEmu_SPII2C_transfer ((addr >> 16) & 0xFF);
Ft_GpuEmu_SPII2C_transfer ((addr >> 8) & 0xFF);
Ft_GpuEmu_SPII2C_transfer (addr & 0xFF);
Ft_GpuEmu_SPII2C_transfer (0); // Dummy Read Byte
}
void Ft_GpuEmu_SPII2C_StartWrite (uint32_t addr)
{\ T
Ft_GpuEmu_SPII2C_csLow ();
Ft_GpuEmu_SPII2C_transfer (((addr >> 16) & 0xFF) | 0x80);
Ft_GpuEmu_SPII2C_transfer ((addr >> 8) & 0xFF);
Ft_GpuEmu_SPII2C_transfer (addr & 0xFF);
}
Slika 5 - Implementacija C API-ja
3.3 Uzorak za adaptaciju aplikacije
Primjer FT800 koristi sloj apstrakcije hardvera (HAL) za izradu aplikacije
logika nezavisna od hardverske platforme. Definiše se u “FT_Gpu_Hal.c” i korisnici su
pretpostavlja se da je upoznat s njim prije nego što krene naprijed.
Da biste prilagodili primjerak aplikacije na emulatoru FT800, potrebne su minimalne promjene: samo
implementirati API-je definirane u “FT_Gpu_Hal.c” kako slijedi:
Ft_GpuEmu_SPII2C_end ();
}
ft_void_t Ft_Gpu_Hal_DeInit ()
{\ T
}
/ * API-ji za čitanje / pisanje prijenosa kontinuirano samo s malim buffer sustavom * /
ft_void_t Ft_Gpu_Hal_StartTransfer (Ft_Gpu_Hal_Context_t * host, FT_GPU_TRANSFERDIR_T
rw, ft_uint32_t addr)
{\ T
ako (FT_GPU_READ == rw) {
Ft_GpuEmu_SPII2C_StartRead (addr);
host-> status = FT_GPU_HAL_READING;
} else {
Ft_GpuEmu_SPII2C_StartWrite (addr);
host-> status = FT_GPU_HAL_WRITING;
}
}
ft_uint8_t Ft_Gpu_Hal_Transfer8 (Ft_Gpu_Hal_Context_t * host, ft_uint8_t vrijednost)
{\ T
return Ft_GpuEmu_SPII2C_transfer (vrijednost);
}
ft_void_t Ft_Gpu_Hal_EndTransfer (Ft_Gpu_Hal_Context_t * host)
{\ T
Ft_GpuEmu_SPII2C_csHigh ();
host-> status = FT_GPU_HAL_OPENED;
}
ft_void_t Ft_Gpu_HostCommand (Ft_Gpu_Hal_Context_t * host, ft_uint8_t cmd)
{\ T
// Nije implementirano u FT800EMU. Nema funkcije upravljanja energijom u emulatoru.
}
ft_void_t Ft_Gpu_Hal_WrMem (Ft_Gpu_Hal_Context_t * host, ft_uint32_t addr, const
ft_uint8_t * bafer, ft_uint32_t dužina)
{\ T
ft_uint32_t SizeTransffered = 0;
Ft_Gpu_Hal_StartTransfer (host, FT_GPU_WRITE, addr);
dok (dužina--) {
Ft_Gpu_Hal_Transfer8 (host, * buffer);
buffer ++;
}
Ft_Gpu_Hal_EndTransfer (host);
}
ft_void_t Ft_Gpu_Hal_RdMem (Ft_Gpu_Hal_Context_t * host, ft_uint32_t addr, ft_uint8_t
* bafer, ft_uint32_t dužina)
{\ T
ft_uint32_t SizeTransffered = 0;
Ft_Gpu_Hal_StartTransfer (host, FT_GPU_READ, addr);
dok (dužina--) {
* buffer = Ft_Gpu_Hal_Transfer8 (host, 0);
buffer ++;
}
Ft_Gpu_Hal_EndTransfer (host);
}
Slika 6 - Implementacija sloja apstrakcije hardvera u emulatorskom API-ju