Dom > Vijesti > Sadržaj

Primjer o tome kako koristiti FT8xx emulator u FT8xx primjeru aplikacije

Apr 26, 2019

3 Korištenje knjižnice FT8xx Emulator

Ovo poglavlje daje primjer kako koristiti FT8xx emulator u FT8xx uzorku

primjena. Korisnici se potiču da se upoznaju s primjerom FT8xx uzorka

(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

2C deklaracija sučelja

“Ft800emu_emulator.h”: sučelje za pokretanje emulatora

3.1 Pokrenite FT800 emulator

Kako bi se koristio FT800 emulator, korisnikov projekt je potreban za pozivanje API-ja

“FT800EMU :: Emulator.run” s određenim parametrom. Pokrenut će se knjižnica emulatora

ispravno i spremno za pristup putem SPI / I

2C sučelje.

Pogledajte Slika 3 - Pokrenite FT8xx emulator.

3.2 Rad s SPI / I2C sučeljem.

SPI / I2C sučelje je kontrolno sučelje FT800. FT800 knjižnica emulatora pruža API-je za

simulirati isto sučelje. Budući da je FT800 uzorak aplikacija izgrađena u C jeziku, umjesto

C ++, jedan jednostavan C API omot uveden je kako bi olakšao konvenciju pozivanja.


#ifdef __cplusplus

vanjski "C" {

#završi ako

#ifdef MSVC_FT800EMU

#define BUFFER_OPTIMIZATION

#završi ako

void Ft_GpuEmu_SPII2C_begin ();

nevažeće Ft_GpuEmu_SPII2C_csLow ();

nevažeće Ft_GpuEmu_SPII2C_csHigh ();

nevažeći Ft_GpuEmu_SPII2C_end ();

nevažeće 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

}

#završi ako

Slika 4 - API sučelja C

Implementacija je kako slijedi:

poništi Ft_GpuEmu_SPII2C_begin ()

{

FT800EMU :: SPII2C.begin ();

}

poništi Ft_GpuEmu_SPII2C_csLow ()

{

FT800EMU :: SPII2C.csLow ();

}

nevažeći Ft_GpuEmu_SPII2C_csHigh ()

{

FT800EMU :: SPII2C.csHigh ();

}

poništi Ft_GpuEmu_SPII2C_end ()

{

FT800EMU :: SPII2C.end ();

}

uint8_t Ft_GpuEmu_SPII2C_transfer (uint8_t podaci)

{

povrat FT800EMU :: SPII2C.transfer (podaci);

}

nevažeći Ft_GpuEmu_SPII2C_StartRead (uint32_t addr)

{

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

}

nevažeći Ft_GpuEmu_SPII2C_StartWrite (uint32_t addr)

{

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 Primjer prilagodbe aplikacije

Uzorak aplikacije FT800 koristi sloj apstrakcije hardvera (HAL) za izradu aplikacije

logika neovisna o hardverskoj platformi. Definiran je 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 FT800 emulatoru, 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 ()

{

}

/ * API-ji za čitanje / pisanje prijenosa kontinuirano samo s malim tampon sustavom * /

ft_void_t Ft_Gpu_Hal_StartTransfer (Ft_Gpu_Hal_Context_t * host, FT_GPU_TRANSFERDIR_T

rw, ft_uint32_t addr)

{

ako (FT_GPU_READ == rw) {

Ft_GpuEmu_SPII2C_StartRead (addr);

host-> status = FT_GPU_HAL_READING;

}drugo{

Ft_GpuEmu_SPII2C_StartWrite (addr);

host-> status = FT_GPU_HAL_WRITING;

}

}

ft_uint8_t Ft_Gpu_Hal_Transfer8 (Ft_Gpu_Hal_Context_t * host, vrijednost ft_uint8_t)

{

vrati Ft_GpuEmu_SPII2C_transfer (vrijednost);

}

ft_void_t Ft_Gpu_Hal_EndTransfer (Ft_Gpu_Hal_Context_t * host)

{

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)

{

// Nije implementirano u FT800EMU. Nema značajke 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 * međuspremnik, ft_uint32_t duljina)

{

ft_uint32_t SizeTransffered = 0;

Ft_Gpu_Hal_StartTransfer (domaćin FT_GPU_WRITE, addr);

dok (dužina--) {

Ft_Gpu_Hal_Transfer8 (domaćin, * pufer);

pufer ++;

}

Ft_Gpu_Hal_EndTransfer (domaćina);

}

ft_void_t Ft_Gpu_Hal_RdMem (Ft_Gpu_Hal_Context_t * host, ft_uint32_t addr, ft_uint8_t

* međuspremnik, ft_uint32_t duljina)

{

ft_uint32_t SizeTransffered = 0;

Ft_Gpu_Hal_StartTransfer (domaćin FT_GPU_READ, addr);

dok (dužina--) {

* međuspremnik = Ft_Gpu_Hal_Transfer8 (host, 0);

pufer ++;

}

Ft_Gpu_Hal_EndTransfer (domaćina);

}

Slika 6 - Implementacija sloja apstrakcije hardvera u emulatorskom API-ju