Dom > Novice > Vsebine

Primer uporabe emulatorja FT8xx v vzorčni aplikaciji FT8xx

Apr 26, 2019

3 Uporaba knjižnice emulatorja FT8xx

To poglavje bo ponazorilo primer uporabe emulatorja FT8xx v vzorcu FT8xx

aplikacijo. Uporabnikom se priporoča, da se seznanijo z vzorčno aplikacijo FT8xx

(poglejte razdelek Sample App (+ EVE2) na naslednji strani) pred začetkom tega poglavja.

http://www.ftdichip.com/Support/SoftwareExamples/FT800_Projects.htm

Vmesnik emulatorja FT8xx je definiran v naslednjih datotekah:

“Ft800emu_inttypes.h”: definicija za celo vrsto za različne platforme.

“Ft800emu_spi_i2c.h”: SPI / I

Deklaracija vmesnika 2C

“Ft800emu_emulator.h”: vmesnik za zagon emulatorja

3.1 Zaženite emulator FT800

Za uporabo emulatorja FT800 je potreben projekt uporabnikov, ki mora poklicati API

“FT800EMU :: Emulator.run” z določenim parametrom. Knjižnica emulatorja se bo zagnala

pravilno in pripravljeno za dostop prek SPI / I

2C vmesnik.

Glejte sliko 3 - Začni emulator FT8xx.

3.2 Delo z vmesnikom SPI / I2C.

Vmesnik SPI / I2C je nadzorni vmesnik FT800. Knjižnica emulatorja FT800 nudi API-je

simulirati isti vmesnik. Ker je vzorčna aplikacija FT800 zgrajena v jeziku C, namesto

C ++, en preprost C API ovoj je predstavljen kot spodaj, da olajša klicne konvencije.


#ifdef __cplusplus

zunaj "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 (podatki uint8_t);

void Ft_GpuEmu_SPII2C_StartWrite (uint32_t addr);

#ifdef __cplusplus

}

#endif

Slika 4 - API vmesnika C

Izvajanje je spodaj:

void Ft_GpuEmu_SPII2C_begin ()

{

FT800EMU :: SPII2C. Začeti ();

}

void Ft_GpuEmu_SPII2C_csLow ()

{

FT800EMU :: SPII2C.csLow ();

}

void Ft_GpuEmu_SPII2C_csHigh ()

{

FT800EMU :: SPII2C.csHigh ();

}

void Ft_GpuEmu_SPII2C_end ()

{

FT800EMU :: SPII2C.end ();

}

uint8_t Ft_GpuEmu_SPII2C_transfer (podatki uint8_t)

{

vrnitev FT800EMU :: SPII2C.transfer (podatki);

}

void 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

}

void 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 Vzorec prilagajanja aplikacije

Vzorčna aplikacija FT800 uporablja aplikacijo Layer za abstrakcijo strojne opreme (HAL)

logika neodvisna od strojne platforme. Opredeljeno je v “FT_Gpu_Hal.c” in uporabniki so

domneva, da ga pozna, preden se premakne naprej.

Za prilagoditev vzorčne aplikacije na emulatorju FT800 so potrebne minimalne spremembe: samo

izvajati API-je, opredeljene v “FT_Gpu_Hal.c”, kot sledi:

Ft_GpuEmu_SPII2C_end ();

}

ft_void_t Ft_Gpu_Hal_DeInit ()

{

}

/ * API-ji za branje / pisanje prenosa neprekinjeno samo z majhnim vmesnim sistemom * /

ft_void_t Ft_Gpu_Hal_StartTransfer (Ft_Gpu_Hal_Context_t * gostitelj, FT_GPU_TRANSFERDIR_T

rw, ft_uint32_t addr)

{

če (FT_GPU_READ == rw) {

Ft_GpuEmu_SPII2C_StartRead (addr);

gostitelj -> status = FT_GPU_HAL_READING;

} else {

Ft_GpuEmu_SPII2C_StartWrite (addr);

gostitelj -> status = FT_GPU_HAL_WRITING;

}

}

ft_uint8_t Ft_Gpu_Hal_Transfer8 (Ft_Gpu_Hal_Context_t * gostitelj, vrednost ft_uint8_t)

{

vrne Ft_GpuEmu_SPII2C_transfer (vrednost);

}

ft_void_t Ft_Gpu_Hal_EndTransfer (gostitelj Ft_Gpu_Hal_Context_t *)

{

Ft_GpuEmu_SPII2C_csHigh ();

gostitelj -> status = FT_GPU_HAL_OPENED;

}

ft_void_t Ft_Gpu_HostCommand (Ft_Gpu_Hal_Context_t * gostitelj, ft_uint8_t cmd)

{

// Ne izvaja v FT800EMU. V Emulatorju ni funkcije za upravljanje porabe.

}

ft_void_t Ft_Gpu_Hal_WrMem (Ft_Gpu_Hal_Context_t * gostitelj, ft_uint32_t addr, const

ft_uint8_t * medpomnilnik, ft_uint32_t dolžina)

{

ft_uint32_t SizeTransffered = 0;

Ft_Gpu_Hal_StartTransfer (gostitelj, FT_GPU_WRITE, addr);

medtem (dolžina--) {

Ft_Gpu_Hal_Transfer8 (host, * buffer);

buffer ++;

}

Ft_Gpu_Hal_EndTransfer (gostitelj);

}

ft_void_t Ft_Gpu_Hal_RdMem (Ft_Gpu_Hal_Context_t * gostitelj, ft_uint32_t addr, ft_uint8_t

* medpomnilnik, ft_uint32_t dolžina)

{

ft_uint32_t SizeTransffered = 0;

Ft_Gpu_Hal_StartTransfer (gostitelj, FT_GPU_READ, addr);

medtem (dolžina--) {

* buffer = Ft_Gpu_Hal_Transfer8 (gostitelj, 0);

buffer ++;

}

Ft_Gpu_Hal_EndTransfer (gostitelj);

}

Slika 6 - Implementacija plasti abstrakcije strojne opreme v emulatorskem API-ju