34#if defined(RP2040_PLATFORM)
40static int s_SpiOpened[2];
42bool EVE_Hal_NoInit =
false;
87 deviceInfo->
Opened = s_SpiOpened[deviceIdx];
101 return deviceIdx ? (phost->SpiPort == spi1) : (phost->SpiPort == spi0);
114 if (deviceIdx != 0 && deviceIdx != 1)
117#if EVE_DEFAULT_SPI0_ONLY
120 deviceIdx = (s_SpiOpened[1] < s_SpiOpened[0]) ? 1 : 0;
124 parameters->
PowerDownPin = deviceIdx ? EVE_DEFAULT_SPI1_PWD : EVE_DEFAULT_SPI0_PWD;
126 parameters->
SpiCsPin = (!s_SpiOpened[deviceIdx])
127 ? (deviceIdx ? EVE_DEFAULT_SPI1_CS1 : EVE_DEFAULT_SPI0_CS)
128 : (EVE_DEFAULT_SPI1_CS2 - (s_SpiOpened[0] + s_SpiOpened[1]));
129 parameters->SpiSckPin = deviceIdx ? EVE_DEFAULT_SPI1_SCK : EVE_DEFAULT_SPI0_SCK;
130 parameters->SpiMosiPin = deviceIdx ? EVE_DEFAULT_SPI1_MOSI : EVE_DEFAULT_SPI0_MOSI;
131 parameters->SpiMisoPin = deviceIdx ? EVE_DEFAULT_SPI1_MISO : EVE_DEFAULT_SPI0_MISO;
145 size_t deviceIdx = phost->SpiPort == spi1 ? 1 : 0;
146 spi_init(phost->SpiPort, 1000 * 1000);
147 gpio_set_function(phost->SpiMisoPin, GPIO_FUNC_SPI);
148 gpio_set_function(phost->SpiMosiPin, GPIO_FUNC_SPI);
149 gpio_set_function(phost->SpiSckPin, GPIO_FUNC_SPI);
153 gpio_set_dir(phost->
SpiCsPin, GPIO_OUT);
171 phost->SpiPort = parameters->
DeviceIdx ? spi1 : spi0;
173 phost->SpiSckPin = parameters->SpiSckPin;
174 phost->SpiMosiPin = parameters->SpiMosiPin;
175 phost->SpiMisoPin = parameters->SpiMisoPin;
179 eve_printf_debug(
"CS: GP%i, SCK: GP%i, MOSI: GP%i, MISO: GP%i, PWD: GP%i\n",
180 (
int)phost->
SpiCsPin, (
int)phost->SpiSckPin, (
int)phost->SpiMosiPin,
183#ifdef EVE_MULTI_GRAPHICS_TARGET
184 phost->GpuDefs = &EVE_GpuDefs_FT80X;
211 size_t deviceIdx = phost->SpiPort == spi1 ? 1 : 0;
213 --s_SpiOpened[deviceIdx];
215 if (!s_SpiOpened[deviceIdx])
217 spi_deinit(phost->SpiPort);
241 asm volatile(
"nop \n nop \n nop");
243 asm volatile(
"nop \n nop \n nop");
248 asm volatile(
"nop \n nop \n nop");
250 asm volatile(
"nop \n nop \n nop");
270 spidata[0] = (
addr >> 16);
271 spidata[1] = (
addr >> 8);
272 spidata[2] =
addr & 0xff;
274 spi_write_blocking(phost->SpiPort, spidata, 3 + phost->
SpiDummyBytes);
280 spidata[0] = (0x80 | (
addr >> 16));
281 spidata[1] = (
addr >> 8);
285 spi_write_blocking(phost->SpiPort, spidata, 3);
324 spi_read_blocking(phost->SpiPort, 0,
buffer, size);
336 spi_write_blocking(phost->SpiPort,
buffer, size);
418 buffer[1] = (value >> 8) & 0xFF;
419 buffer[2] = (value >> 16) & 0xFF;
507 transferred += (
uint32_t)strnlen(str, size) + 1;
510 if (transferred & padMask)
512 uint32_t pad = 4 - (transferred & padMask);
552 spi_write_blocking(phost->SpiPort, hcmd, 3);
567 hcmd[0] =
cmd & 0xff;
568 hcmd[1] = (
cmd >> 8) & 0xff;
569 hcmd[2] = (
cmd >> 16) & 0xff;
573 spi_write_blocking(phost->SpiPort, hcmd, 3);
633 writebyte = numchnls;
640 setSPI(phost, numchnls, numdummy);
701static absolute_time_t s_LastTime;
703static int32_t s_RemainderMicros;
713 s_LastTime = get_absolute_time();
715 s_RemainderMicros = 0;
727static inline void updateMillis()
729 absolute_time_t newTime = get_absolute_time();
730 int64_t diff = absolute_time_diff_us(s_LastTime, newTime);
731 diff += s_RemainderMicros;
742 s_LastTime = newTime;
744 s_RemainderMicros = (
int32_t)diff;
static uint32_t wrBuffer(EVE_HalContext *phost, const void *buffer, uint32_t size, bool progmem, bool string)
Write buffer to Coprocessor's comand fifo.
#define EVE_CMD_STRING_MAX
#define strcpy_s(dst, sz, src)
#define eve_progmem_const
@ EVE_SPI_TWO_DUMMY_BYTES
EVE_HalPlatform g_HalPlatform
EVE_HAL_EXPORT void EVE_Hal_wr8(EVE_HalContext *phost, uint32_t addr, uint8_t v)
Write 8 bits to Coprocessor's memory.
EVE_HAL_EXPORT bool EVE_Hal_powerCycle(EVE_HalContext *phost, bool up)
Toggle PD_N pin of FT800 board for a power cycle.
EVE_HAL_EXPORT uint64_t EVE_millis64()
Get clock in miliseond.
EVE_HAL_EXPORT uint8_t EVE_Hal_transfer8(EVE_HalContext *phost, uint8_t value)
Write 8 bits to Coprocessor.
EVE_HAL_EXPORT uint16_t EVE_Hal_transfer16(EVE_HalContext *phost, uint16_t value)
Write 2 bytes to Coprocessor.
EVE_HAL_EXPORT bool EVE_Hal_isDevice(EVE_HalContext *phost, size_t deviceIdx)
Check whether the context is the specified device.
EVE_HAL_EXPORT void EVE_Hal_info(EVE_DeviceInfo *deviceInfo, size_t deviceIdx)
Get info of the specified device. Devices of type EVE_HOST_UNKNOWN should be ignored.
EVE_HAL_EXPORT uint32_t EVE_millis()
Get clock in miliseond.
EVE_HAL_EXPORT void EVE_Hal_startTransfer(EVE_HalContext *phost, EVE_TRANSFER_T rw, uint32_t addr)
Start data transfer to Coprocessor.
EVE_HAL_EXPORT void EVE_Hal_hostCommand(EVE_HalContext *phost, uint8_t cmd)
Send a host command to Coprocessor.
EVE_HAL_EXPORT void EVE_Hal_setSPI(EVE_HalContext *phost, EVE_SPI_CHANNELS_T numchnls, uint8_t numdummy)
Set number of SPI channel.
EVE_HAL_EXPORT uint32_t EVE_Hal_transferString(EVE_HalContext *phost, const char *str, uint32_t index, uint32_t size, uint32_t padMask)
Transfer a string to EVE platform.
EVE_HAL_EXPORT size_t EVE_Hal_list()
List the available devices.
EVE_HAL_EXPORT void EVE_Hal_transferMem(EVE_HalContext *phost, uint8_t *result, const uint8_t *buffer, uint32_t size)
Transfer (read/write) a block data to Coprocessor.
EVE_HAL_EXPORT void EVE_sleep(uint32_t ms)
Sleep in milisecond.
EVE_HAL_EXPORT void EVE_Hal_transferProgMem(EVE_HalContext *phost, uint8_t *result, eve_progmem_const uint8_t *buffer, uint32_t size)
Transfer a block data from program memory.
EVE_HAL_EXPORT void EVE_Hal_restoreSPI(EVE_HalContext *phost)
EVE_HAL_EXPORT void EVE_Hal_endTransfer(EVE_HalContext *phost)
End data transfer.
EVE_HAL_EXPORT uint32_t EVE_Hal_currentFrequency(EVE_HalContext *phost)
Get current system clock of Coprocessor.
EVE_HAL_EXPORT void EVE_Hal_flush(EVE_HalContext *phost)
Flush data to Coprocessor.
EVE_HAL_EXPORT void EVE_Hal_hostCommandExt3(EVE_HalContext *phost, uint32_t cmd)
This API sends a 3byte command to the phost.
EVE_HAL_EXPORT uint32_t EVE_Hal_transfer32(EVE_HalContext *phost, uint32_t value)
Write 4 bytes to Coprocessor.
bool EVE_HalImpl_open(EVE_HalContext *phost, const EVE_HalParameters *parameters)
Opens a new HAL context using the specified parameters.
void EVE_Mcu_initialize()
Init FT9x host MCU.
bool EVE_HalImpl_defaults(EVE_HalParameters *parameters, size_t deviceIdx)
Get the default configuration parameters.
void EVE_Millis_release()
Release FT9x timer.
void EVE_HalImpl_close(EVE_HalContext *phost)
Close a HAL context.
void EVE_Mcu_release()
Release FT9x host MCU.
void EVE_HalImpl_initialize()
Initialize HAL platform.
void EVE_Millis_initialize()
Init FT9x timer.
bool EVE_UtilImpl_bootupDisplayGpio(EVE_HalContext *phost)
Display GPIO pins.
void EVE_HalImpl_idle(EVE_HalContext *phost)
Idle. Call regularly to update frequently changing internal state.
void EVE_HalImpl_release()
Release HAL platform.
static uint64_t s_TotalMilliseconds64
static uint8_t transfer8(EVE_HalContext *phost, uint8_t value)
Write 8 bit to Coprocessor.
void setSPI(EVE_HalContext *phost, EVE_SPI_CHANNELS_T numchnls, uint8_t numdummy)
Set number of SPI channel.
static void rdBuffer(EVE_HalContext *phost, uint8_t *buffer, uint32_t size)
Read a block data from Coprocessor.
unsigned long long uint64_t
static ft_uint32_t ft_uint8_t * buffer
static ft_void_t ft_uint32_t * cmd
EVE_SPI_CHANNELS_T SpiChannels