Casa > Notícies > Contingut

Exemple sobre com utilitzar l’emulador FT8xx a l’aplicació de mostra FT8xx

Apr 26, 2019

3 Utilitzant la biblioteca de l'emulador FT8xx

Aquest capítol proporcionarà un exemple de com utilitzar l’emulador FT8xx a la mostra FT8xx

aplicació. Es recomana als usuaris que es familiaritzin amb l’aplicació de la mostra FT8xx

(vegeu la secció Aplicació de mostra (+ EVE2) a la pàgina següent) abans de començar aquest capítol.

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

La interfície de l’emulador FT8xx es defineix als fitxers següents:

"Ft800emu_inttypes.h": la definició de tipus sencer per a diferents plataformes.

"Ft800emu_spi_i2c.h": el SPI / I

Declaració d'interfície 2C

"Ft800emu_emulator.h": la interfície per iniciar l'emulador

3.1 Inicieu l’emulador FT800

Per fer ús de l’emulador FT800, es requereix el projecte d’usuaris per trucar a l’API

"FT800EMU :: Emulator.run" amb el paràmetre específic. S'iniciarà la biblioteca de l’emulador

correctament i a punt per accedir-hi a través d’SPI / I

Interfície 2C.

Vegeu la figura 3: inicieu l’emulador FT8xx.

3.2 Treballar amb la interfície SPI / I2C.

La interfície SPI / I2C és la interfície de control de FT800. La biblioteca de l’emulador FT800 proporciona les API

simular la mateixa interfície. Des de l’aplicació de mostra FT800 es construeix en llenguatge C, en lloc de

C ++, un simple embolcall de l'APC C es presenta de la manera següent per facilitar la convenció de trucades.


#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 (dades uint8_t);

void Ft_GpuEmu_SPII2C_StartWrite (uint32_t addr);

#ifdef __cplusplus

}

#endif

Figura 4: API de la interfície C

La implementació és la següent:

void Ft_GpuEmu_SPII2C_begin ()

{

FT800EMU :: SPII2C.begin ();

}

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 (dades uint8_t)

{

torneu FT800EMU :: SPII2C.transfer (dades);

}

void Ft_GpuEmu_SPII2C_StartRead (uint32_t addr)

{

Ft_GpuEmu_SPII2C_csLow ();

Ft_GpuEmu_SPII2C_transfer ((addr >> 16) i 0xFF);

Ft_GpuEmu_SPII2C_transfer ((addr >> 8) i 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) i 0xFF) | 0x80);

Ft_GpuEmu_SPII2C_transfer ((addr >> 8) i 0xFF);

Ft_GpuEmu_SPII2C_transfer (addr & 0xFF);

}

Figura 5: implementació de l'AP C

3.3 Adaptació de l’aplicació de la mostra

L’aplicació de mostra FT800 fa servir una capa d’abstracció de maquinari (HAL) per fer l’aplicació

lògica independent de la plataforma de maquinari. Es defineix a "FT_Gpu_Hal.c" i els usuaris són

se suposa que l’ha conegut abans de seguir endavant.

Per adaptar l’aplicació de mostra a l’emulador FT800, s’exigeixen els canvis mínims: només

implementar les API definides a "FT_Gpu_Hal.c" com a continuació:

Ft_GpuEmu_SPII2C_end ();

}

ft_void_t Ft_Gpu_Hal_DeInit ()

{

}

/ * Les API per a la transferència de lectura / escriptura de forma contínua només amb un sistema de memòria intermèdia petit

ft_void_t Ft_Gpu_Hal_StartTransfer (Ft_Gpu_Hal_Context_t * host, FT_GPU_TRANSFERDIR_T

rw, ft_uint32_t addr)

{

si (FT_GPU_READ == rw) {

Ft_GpuEmu_SPII2C_StartRead (addr);

host-> estat = FT_GPU_HAL_READING;

} else {

Ft_GpuEmu_SPII2C_StartWrite (addr);

host-> estat = FT_GPU_HAL_WRITING;

}

}

ft_uint8_t Ft_Gpu_Hal_Transfer8 (Ft_Gpu_Hal_Context_t * host, valor ft_uint8_t)

{

torneu Ft_GpuEmu_SPII2C_transfer (valor);

}

ft_void_t Ft_Gpu_Hal_EndTransfer (host Ft_Gpu_Hal_Context_t *)

{

Ft_GpuEmu_SPII2C_csHigh ();

host-> estat = FT_GPU_HAL_OPENED;

}

ft_void_t Ft_Gpu_HostCommand (Ft_Gpu_Hal_Context_t * host, ft_uint8_t cmd)

{

// No implementat en FT800EMU. Sense funció de gestió d’alimentació a l’emulador.

}

ft_void_t Ft_Gpu_Hal_WrMem (host Ft_Gpu_Hal_Context_t *, ft_uint32_t addr, const

buffer ft_uint8_t *, longitud ft_uint32_t)

{

ft_uint32_t SizeTransfered = 0;

Ft_Gpu_Hal_StartTransfer (amfitrió, FT_GPU_WRITE, addr);

while (length--) {

Ft_Gpu_Hal_Transfer8 (host, * buffer);

buffer ++;

}

Ft_Gpu_Hal_EndTransfer (host);

}

ft_void_t Ft_Gpu_Hal_RdMem (host Ft_Gpu_Hal_Context_t *, ft_uint32_t addr, ft_uint8_t

* buffer, ft_uint32_t length)

{

ft_uint32_t SizeTransfered = 0;

Ft_Gpu_Hal_StartTransfer (amfitrió, FT_GPU_READ, addr);

while (length--) {

* buffer = Ft_Gpu_Hal_Transfer8 (host, 0);

buffer ++;

}

Ft_Gpu_Hal_EndTransfer (host);

}

Figura 6: Implantació de la capa d'abstracció de maquinari a l'API de l'emulador