#include <SPI.h>
Public Types | |
enum | tFrameMode { kChipSelect, kPreLatchPulse, kPostLatchPulse, kPreAndPostLatchPulse } |
enum | tSPIConstants { kReceiveFIFODepth =512, kTransmitFIFODepth =512 } |
Public Member Functions | |
SPI (DigitalOutput &clk, DigitalOutput &mosi, DigitalInput &miso) | |
SPI (DigitalOutput *clk, DigitalOutput *mosi, DigitalInput *miso) | |
SPI (DigitalOutput &clk, DigitalOutput &mosi) | |
SPI (DigitalOutput *clk, DigitalOutput *mosi) | |
SPI (DigitalOutput &clk, DigitalInput &miso) | |
SPI (DigitalOutput *clk, DigitalInput *miso) | |
virtual | ~SPI () |
void | SetBitsPerWord (uint32_t bits) |
uint32_t | GetBitsPerWord () |
void | SetClockRate (double hz) |
void | SetMSBFirst () |
void | SetLSBFirst () |
void | SetSampleDataOnFalling () |
void | SetSampleDataOnRising () |
void | SetSlaveSelect (DigitalOutput *ss, tFrameMode mode=kChipSelect, bool activeLow=false) |
void | SetSlaveSelect (DigitalOutput &ss, tFrameMode mode=kChipSelect, bool activeLow=false) |
DigitalOutput * | GetSlaveSelect (tFrameMode *mode=NULL, bool *activeLow=NULL) |
void | SetClockActiveLow () |
void | SetClockActiveHigh () |
virtual void | ApplyConfig () |
virtual uint16_t | GetOutputFIFOAvailable () |
virtual uint16_t | GetNumReceived () |
virtual bool | IsDone () |
bool | HadReceiveOverflow () |
virtual void | Write (uint32_t data) |
virtual uint32_t | Read (bool initiate=false) |
virtual void | Reset () |
virtual void | ClearReceivedData () |
Public Member Functions inherited from SensorBase | |
SensorBase () | |
virtual | ~SensorBase () |
Public Member Functions inherited from ErrorBase | |
virtual Error & | GetError () |
Retrieve the current error. Get the current error information associated with this sensor. | |
virtual const Error & | GetError () const |
virtual void | SetErrnoError (const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set error information associated with a C library call that set an error to the "errno" global variable. More... | |
virtual void | SetImaqError (int success, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set the current error information associated from the nivision Imaq API. More... | |
virtual void | SetError (Error::Code code, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | SetWPIError (const char *errorMessage, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) const |
Set the current error information associated with this sensor. More... | |
virtual void | CloneError (ErrorBase *rhs) const |
virtual void | ClearError () const |
Clear the current error information associated with this sensor. | |
virtual bool | StatusIsFatal () const |
Check if the current error code represents a fatal error. More... | |
Protected Attributes | |
tSPI * | m_spi |
tSPI::tConfig | m_config |
tSPI::tChannels | m_channels |
DigitalOutput * | m_ss |
Protected Attributes inherited from ErrorBase | |
Error | m_error |
Static Protected Attributes | |
static SEM_ID | m_semaphore = NULL |
Static Protected Attributes inherited from ErrorBase | |
static SEM_ID | _globalErrorMutex = semMCreate(SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE) |
static Error | _globalError |
Additional Inherited Members | |
Static Public Member Functions inherited from SensorBase | |
static void | DeleteSingletons () |
static uint32_t | GetDefaultAnalogModule () |
static uint32_t | GetDefaultDigitalModule () |
static uint32_t | GetDefaultSolenoidModule () |
static bool | CheckAnalogModule (uint8_t moduleNumber) |
static bool | CheckDigitalModule (uint8_t moduleNumber) |
static bool | CheckPWMModule (uint8_t moduleNumber) |
static bool | CheckRelayModule (uint8_t moduleNumber) |
static bool | CheckSolenoidModule (uint8_t moduleNumber) |
static bool | CheckDigitalChannel (uint32_t channel) |
static bool | CheckRelayChannel (uint32_t channel) |
static bool | CheckPWMChannel (uint32_t channel) |
static bool | CheckAnalogChannel (uint32_t channel) |
static bool | CheckSolenoidChannel (uint32_t channel) |
Static Public Member Functions inherited from ErrorBase | |
static void | SetGlobalError (Error::Code code, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) |
static void | SetGlobalWPIError (const char *errorMessage, const char *contextMessage, const char *filename, const char *function, uint32_t lineNumber) |
static Error & | GetGlobalError () |
Static Public Attributes inherited from SensorBase | |
static const uint32_t | kSystemClockTicksPerMicrosecond = 40 |
static const uint32_t | kDigitalChannels = 14 |
static const uint32_t | kAnalogChannels = 8 |
static const uint32_t | kAnalogModules = 2 |
static const uint32_t | kDigitalModules = 2 |
static const uint32_t | kSolenoidChannels = 8 |
static const uint32_t | kSolenoidModules = 2 |
static const uint32_t | kPwmChannels = 10 |
static const uint32_t | kRelayChannels = 8 |
static const uint32_t | kChassisSlots = 8 |
Protected Member Functions inherited from SensorBase | |
void | AddToSingletonList () |
Protected Member Functions inherited from ErrorBase | |
ErrorBase () | |
Initialize the instance status to 0 for now. | |
SPI bus interface class.
This class is intended to be used by sensor (and other SPI device) drivers. It probably should not be used directly.
The FPGA only supports a single SPI interface.
SPI::SPI | ( | DigitalOutput & | clk, |
DigitalOutput & | mosi, | ||
DigitalInput & | miso | ||
) |
Constructor for input and output.
clk | The digital output for the clock signal. |
mosi | The digital output for the written data to the slave (master-out slave-in). |
miso | The digital input for the input data from the slave (master-in slave-out). |
SPI::SPI | ( | DigitalOutput * | clk, |
DigitalOutput * | mosi, | ||
DigitalInput * | miso | ||
) |
Constructor for input and output.
clk | The digital output for the clock signal. |
mosi | The digital output for the written data to the slave (master-out slave-in). |
miso | The digital input for the input data from the slave (master-in slave-out). |
SPI::SPI | ( | DigitalOutput & | clk, |
DigitalOutput & | mosi | ||
) |
Constructor for output only.
clk | The digital output for the clock signal. |
mosi | The digital output for the written data to the slave (master-out slave-in). |
SPI::SPI | ( | DigitalOutput * | clk, |
DigitalOutput * | mosi | ||
) |
Constructor for output only.
clk | The digital output for the clock signal. |
mosi | The digital output for the written data to the slave (master-out slave-in). |
SPI::SPI | ( | DigitalOutput & | clk, |
DigitalInput & | miso | ||
) |
Constructor for input only.
clk | The digital output for the clock signal. |
miso | The digital input for the input data from the slave (master-in slave-out). |
SPI::SPI | ( | DigitalOutput * | clk, |
DigitalInput * | miso | ||
) |
Constructor for input only.
clk | The digital output for the clock signal. |
miso | The digital input for the input data from the slave (master-in slave-out). |
|
virtual |
Destructor.
|
virtual |
Apply configuration settings and reset the SPI logic.
|
virtual |
Empty the receive FIFO.
uint32_t SPI::GetBitsPerWord | ( | ) |
Get the number of bits from each word that the slave transmits or receives.
|
virtual |
Get the number of words received and currently available to be read from the receive FIFO.
|
virtual |
Get the number of words that can currently be stored before being transmitted to the device.
DigitalOutput * SPI::GetSlaveSelect | ( | tFrameMode * | mode = NULL , |
bool * | activeLow = NULL |
||
) |
Get the slave select line behavior.
mode | Frame mode: kChipSelect: active for the duration of the frame. kPreLatchPulse: pulses before the transfer of each frame. kPostLatchPulse: pulses after the transfer of each frame. kPreAndPostLatchPulse: pulses before and after each frame. |
activeLow | True if slave select line is active low. |
bool SPI::HadReceiveOverflow | ( | ) |
Determine if the receive FIFO was full when attempting to add new data at end of a transfer.
|
virtual |
Have all pending transfers completed?
|
virtual |
Read a word from the receive FIFO.
Waits for the current transfer to complete if the receive FIFO is empty.
If the receive FIFO is empty, there is no active transfer, and initiate is false, errors.
initiate | If true, this function pushes "0" into the transmit buffer and initiates a transfer. If false, this function assumes that data is already in the receive FIFO from a previous write. |
|
virtual |
Stop any transfer in progress and empty the transmit FIFO.
void SPI::SetBitsPerWord | ( | uint32_t | bits | ) |
Configure the number of bits from each word that the slave transmits or receives.
bits | The number of bits in one frame (1 to 32 bits). |
void SPI::SetClockActiveHigh | ( | ) |
Configure the clock output line to be active high. This is sometimes called clock polarity low.
void SPI::SetClockActiveLow | ( | ) |
Configure the clock output line to be active low. This is sometimes called clock polarity high.
void SPI::SetClockRate | ( | double | hz | ) |
Configure the rate of the generated clock signal. The default and maximum value is 76,628.4 Hz.
hz | The clock rate in Hertz. |
void SPI::SetLSBFirst | ( | ) |
Configure the order that bits are sent and received on the wire to be least significant bit first.
void SPI::SetMSBFirst | ( | ) |
Configure the order that bits are sent and received on the wire to be most significant bit first.
void SPI::SetSampleDataOnFalling | ( | ) |
Configure that the data is stable on the falling edge and the data changes on the rising edge.
void SPI::SetSampleDataOnRising | ( | ) |
Configure that the data is stable on the rising edge and the data changes on the falling edge.
void SPI::SetSlaveSelect | ( | DigitalOutput * | ss, |
tFrameMode | mode = kChipSelect , |
||
bool | activeLow = false |
||
) |
Configure the slave select line behavior.
ss | slave select digital output. |
mode | Frame mode: kChipSelect: active for the duration of the frame. kPreLatchPulse: pulses before the transfer of each frame. kPostLatchPulse: pulses after the transfer of each frame. kPreAndPostLatchPulse: pulses before and after each frame. |
activeLow | True if slave select line is active low. |
void SPI::SetSlaveSelect | ( | DigitalOutput & | ss, |
tFrameMode | mode = kChipSelect , |
||
bool | activeLow = false |
||
) |
Configure the slave select line behavior.
ss | slave select digital output. |
mode | Frame mode: kChipSelect: active for the duration of the frame. kPreLatchPulse: pulses before the transfer of each frame. kPostLatchPulse: pulses after the transfer of each frame. kPreAndPostLatchPulse: pulses before and after each frame. |
activeLow | True if slave select line is active low. |
|
virtual |
Write a word to the slave device. Blocks until there is space in the output FIFO.
If not running in output only mode, also saves the data received on the MISO input during the transfer into the receive FIFO.