ADI iSensor FX3 Firmware  v2.9.4-pub
Firmware for the Analog Devices EVAL-ADIS-FX3 IMU Evaluation Platform. This firmware can be compiled using the Cypress EZ USB Suite IDE
SpiFunctions.h
Go to the documentation of this file.
1 
19 #ifndef SPI_FUNCTIONS_H
20 #define SPI_FUNCTIONS_H
21 
22 /* Include the main header file */
23 #include "main.h"
24 
26 typedef struct BitBangSpiConf
27 {
29  uint8_t MOSI;
30 
32  uint8_t MISO;
33 
35  uint8_t CS;
36 
38  uint8_t SCLK;
39 
41  uint32_t HalfClockDelay;
42 
44  uint16_t CSLeadDelay;
45 
47  uint16_t CSLagDelay;
48 
50  CyBool_t CPHA;
51 
53  CyBool_t CPOL;
55 
56 /* SPI configuration functions */
57 CyU3PReturnStatus_t AdiGetSpiSettings();
58 CyBool_t AdiSpiUpdate(uint16_t index, uint16_t value, uint16_t length);
59 CyU3PReturnStatus_t AdiSpiResetFifo(CyBool_t isTx, CyBool_t isRx);
60 CyU3PSpiConfig_t AdiGetSpiConfig();
61 void AdiSetSpiWordLength(uint8_t wordLength);
62 void AdiPrintSpiConfig(CyU3PSpiConfig_t config);
63 CyU3PReturnStatus_t AdiRestartSpi();
64 
65 /* SPI data transfer functions */
67 void AdiSpiTransferWord(uint8_t *txBuf, uint8_t *rxBuf);
68 CyU3PReturnStatus_t AdiTransferBytes(uint32_t writeData);
69 CyU3PReturnStatus_t AdiWriteRegByte(uint16_t addr, uint8_t data);
70 CyU3PReturnStatus_t AdiReadRegBytes(uint16_t addr);
71 
72 /* Bitbang SPI functions */
73 CyU3PReturnStatus_t AdiBitBangSpiHandler();
74 
76 #define BITBANG_HALFCLOCK_OFFSET 5
77 
79 #define STALL_COUNT_OFFSET 10
80 
82 #define GPIO_HIGH (1 << 31)|(1 << 5)|(1 << 4)|(1 << 0)
83 
85 #define GPIO_LOW (1 << 31)|(1 << 5)|(1 << 4)
86 
87 #endif
ManualDMABuffer
CyU3PDmaBuffer_t ManualDMABuffer
Definition: main.c:92
S_TO_TICKS_MULT
#define S_TO_TICKS_MULT
Definition: main.h:369
AdiReadRegBytes
CyU3PReturnStatus_t AdiReadRegBytes(uint16_t addr)
This function reads a single 16 bit SPI word from a slave device.
Definition: SpiFunctions.c:710
AdiSpiResetFifo
CyU3PReturnStatus_t AdiSpiResetFifo(CyBool_t isTx, CyBool_t isRx)
This function resets the SPI FIFO and disables the SPI block after completion.
Definition: SpiFunctions.c:832
AdiGetSpiConfig
CyU3PSpiConfig_t AdiGetSpiConfig()
This function parses the SPI control registers into an easier to work with config struct.
Definition: SpiFunctions.c:615
AdiWaitForSpiNotBusy
static void AdiWaitForSpiNotBusy()
Waits for the SPI controller busy bit to be not set.
Definition: SpiFunctions.c:815
BoardState::DrPolarity
CyBool_t DrPolarity
Definition: main.h:174
BoardState::DrActive
CyBool_t DrActive
Definition: main.h:171
AdiBitBangSpiTransferCPHA0
static void AdiBitBangSpiTransferCPHA0(uint8_t *MOSI, uint8_t *MISO, uint32_t BitCount, BitBangSpiConf config)
Performs a single bit banged SPI transfer. Pins must already be configured as needed.
Definition: SpiFunctions.c:551
LegacyIMU
@ LegacyIMU
Definition: main.h:111
AdiBitBangSpiHandler
CyU3PReturnStatus_t AdiBitBangSpiHandler()
This function handles bit bang SPI requests from the control endpoint.
Definition: SpiFunctions.c:221
CSPin
static uvint32_t * CSPin
Definition: SpiFunctions.c:39
AdiRestartSpi
CyU3PReturnStatus_t AdiRestartSpi()
This function restarts the SPI controller.
Definition: SpiFunctions.c:188
BoardState::WatchDogEnabled
CyBool_t WatchDogEnabled
Definition: main.h:177
BitBangSpiConf
Definition: SpiFunctions.h:27
STALL_COUNT_OFFSET
#define STALL_COUNT_OFFSET
Definition: SpiFunctions.h:79
AdiSetSpiWordLength
void AdiSetSpiWordLength(uint8_t wordLength)
Sets the SPI controller word length (4 - 32 bits)
Definition: SpiFunctions.c:793
GPIO_HIGH
#define GPIO_HIGH
Definition: SpiFunctions.h:82
BitBangSpiConf::MOSI
uint8_t MOSI
Definition: SpiFunctions.h:29
MISOPin
static uvint32_t * MISOPin
Definition: SpiFunctions.c:42
BoardState::DutType
PartType DutType
Definition: main.h:153
BitBangSpiConf::CPHA
CyBool_t CPHA
Definition: SpiFunctions.h:50
AdiSpiTransferWord
void AdiSpiTransferWord(uint8_t *txBuf, uint8_t *rxBuf)
Bi-directional SPI transfer function, in register mode. Optimized for speed.
Definition: SpiFunctions.c:120
BitBangSpiConf::HalfClockDelay
uint32_t HalfClockDelay
Definition: SpiFunctions.h:41
AdiSpiUpdate
CyBool_t AdiSpiUpdate(uint16_t index, uint16_t value, uint16_t length)
This function handles a vendor command request to update the SPI/DR Pin configuration.
Definition: SpiFunctions.c:931
AdiSpiPrepareForTransfer
void AdiSpiPrepareForTransfer()
Set up the SPI for a register based transfer.
Definition: SpiFunctions.c:72
FX3State
BoardState FX3State
Definition: main.c:112
StreamState
Struct to store the current data stream state information.
Definition: main.h:204
AdiBitBangSpiSetup
static CyU3PReturnStatus_t AdiBitBangSpiSetup(BitBangSpiConf config)
Configures all pins and timers needed to bitbang a SPI connection.
Definition: SpiFunctions.c:323
AdiGetSpiSettings
CyU3PReturnStatus_t AdiGetSpiSettings()
This function handles vendor commands to get the current SPI configuration from the FX3.
Definition: SpiFunctions.c:886
BitBangSpiConf::MISO
uint8_t MISO
Definition: SpiFunctions.h:32
AdiPrintSpiConfig
void AdiPrintSpiConfig(CyU3PSpiConfig_t config)
Prints a given SPI config over the UART debug port.
Definition: SpiFunctions.c:647
AdiGetSpiConfig
CyU3PSpiConfig_t AdiGetSpiConfig()
This function parses the SPI control registers into an easier to work with config struct.
Definition: SpiFunctions.c:615
AdiWriteRegByte
CyU3PReturnStatus_t AdiWriteRegByte(uint16_t addr, uint8_t data)
This function writes a single byte of data over the SPI bus.
Definition: SpiFunctions.c:763
SCLKPin
static uvint32_t * SCLKPin
Definition: SpiFunctions.c:36
AdiSetSpiWordLength
void AdiSetSpiWordLength(uint8_t wordLength)
Sets the SPI controller word length (4 - 32 bits)
Definition: SpiFunctions.c:793
StreamState::BytesPerFrame
uint32_t BytesPerFrame
Definition: main.h:206
BoardState::StallTime
uint32_t StallTime
Definition: main.h:165
SCLKLowTime
static uint32_t SCLKLowTime
Definition: SpiFunctions.c:54
BoardState
Struct to store the current board state (SPI config, USB speed, etc)
Definition: main.h:148
ADcmXL2021
@ ADcmXL2021
Definition: main.h:102
AdiTransferBytes
CyU3PReturnStatus_t AdiTransferBytes(uint32_t writeData)
This function performs a protocol agnostic SPI bi-directional SPI transfer of (1, 2,...
Definition: SpiFunctions.c:671
BitBangSpiConf::CSLeadDelay
uint16_t CSLeadDelay
Definition: SpiFunctions.h:44
ChannelToPC
CyU3PDmaChannel ChannelToPC
Definition: main.c:76
AdiSpiPrepareForTransfer
void AdiSpiPrepareForTransfer()
Set up the SPI for a register based transfer.
Definition: SpiFunctions.c:72
ADcmXL1021
@ ADcmXL1021
Definition: main.h:99
AdiReadRegBytes
CyU3PReturnStatus_t AdiReadRegBytes(uint16_t addr)
This function reads a single 16 bit SPI word from a slave device.
Definition: SpiFunctions.c:710
AdiGetSpiSettings
CyU3PReturnStatus_t AdiGetSpiSettings()
This function handles vendor commands to get the current SPI configuration from the FX3.
Definition: SpiFunctions.c:886
AdiSpiResetFifo
CyU3PReturnStatus_t AdiSpiResetFifo(CyBool_t isTx, CyBool_t isRx)
This function resets the SPI FIFO and disables the SPI block after completion.
Definition: SpiFunctions.c:832
AdiSleepForMicroSeconds
CyU3PReturnStatus_t AdiSleepForMicroSeconds(uint32_t numMicroSeconds)
This function blocks thread execution for a specified number of microseconds.
Definition: HelperFunctions.c:73
AdiPrintSpiConfig
void AdiPrintSpiConfig(CyU3PSpiConfig_t config)
Prints a given SPI config over the UART debug port.
Definition: SpiFunctions.c:647
BoardState::SpiConfig
CyU3PSpiConfig_t SpiConfig
Definition: main.h:150
BoardState::WatchDogPeriodMs
uint32_t WatchDogPeriodMs
Definition: main.h:180
ADcmXL3021
@ ADcmXL3021
Definition: main.h:105
BoardState::DrPin
uint16_t DrPin
Definition: main.h:168
SCLKActiveMask
static uint32_t SCLKActiveMask
Definition: SpiFunctions.c:48
BitBangSpiConf::CPOL
CyBool_t CPOL
Definition: SpiFunctions.h:53
IMU
@ IMU
Definition: main.h:108
main.h
Main header file for the Analog Devices iSensor FX3 Demonstration Platform firmware.
SPIWordLen
static uint32_t SPIWordLen
Definition: SpiFunctions.c:57
AdiBitBangSpiHandler
CyU3PReturnStatus_t AdiBitBangSpiHandler()
This function handles bit bang SPI requests from the control endpoint.
Definition: SpiFunctions.c:221
AdiSpiUpdate
CyBool_t AdiSpiUpdate(uint16_t index, uint16_t value, uint16_t length)
This function handles a vendor command request to update the SPI/DR Pin configuration.
Definition: SpiFunctions.c:931
GPIO_LOW
#define GPIO_LOW
Definition: SpiFunctions.h:85
AdiTransferBytes
CyU3PReturnStatus_t AdiTransferBytes(uint32_t writeData)
This function performs a protocol agnostic SPI bi-directional SPI transfer of (1, 2,...
Definition: SpiFunctions.c:671
BitBangSpiConf
struct BitBangSpiConf BitBangSpiConf
SCLKInactiveMask
static uint32_t SCLKInactiveMask
Definition: SpiFunctions.c:51
AdiWriteRegByte
CyU3PReturnStatus_t AdiWriteRegByte(uint16_t addr, uint8_t data)
This function writes a single byte of data over the SPI bus.
Definition: SpiFunctions.c:763
StreamThreadState
StreamState StreamThreadState
Definition: main.c:122
AdiSpiTransferWord
void AdiSpiTransferWord(uint8_t *txBuf, uint8_t *rxBuf)
Bi-directional SPI transfer function, in register mode. Optimized for speed.
Definition: SpiFunctions.c:120
SpiFunctions_c
@ SpiFunctions_c
Definition: ErrorLog.h:54
AdiBitBangSpiTransferCPHA1
static void AdiBitBangSpiTransferCPHA1(uint8_t *MOSI, uint8_t *MISO, uint32_t BitCount, BitBangSpiConf config)
Performs a single bit banged SPI transfer. Pins must already be configured as needed.
Definition: SpiFunctions.c:465
SpiFunctions.h
Header file for all SPI related functions.
BitBangSpiConf::CSLagDelay
uint16_t CSLagDelay
Definition: SpiFunctions.h:47
BitBangSpiConf::SCLK
uint8_t SCLK
Definition: SpiFunctions.h:38
AdiConfigureWatchdog
void AdiConfigureWatchdog()
Configures the FX3 watchdog timer based on the current board state.
Definition: HelperFunctions.c:227
USBBuffer
uint8_t USBBuffer[4096]
AdiRestartSpi
CyU3PReturnStatus_t AdiRestartSpi()
This function restarts the SPI controller.
Definition: SpiFunctions.c:188
AdiLogError
void AdiLogError(FileIdentifier File, uint32_t Line, uint32_t ErrorCode)
Logs a firmware error to flash memory for later examination.
Definition: ErrorLog.c:51
BITBANG_HALFCLOCK_OFFSET
#define BITBANG_HALFCLOCK_OFFSET
Definition: SpiFunctions.h:76
BitBangSpiConf::CS
uint8_t CS
Definition: SpiFunctions.h:35
MOSIPin
static uvint32_t * MOSIPin
Definition: SpiFunctions.c:45