forked
« Back to documentation index
SPI Class Reference
A SPI Master, used for communicating with SPI slave devices.
More...
#include <SPI.h >
Inherits NonCopyable< SPI > .
Public Member Functions
SPI (PinName mosi, PinName miso, PinName sclk, PinName ssel=NC)
Create a SPI master connected to the specified pins.
void format (int bits, int mode=0)
Configure the data transmission format.
void frequency (int hz=1000000)
Set the spi bus clock frequency.
virtual int write (int value)
Write to the SPI Slave and return the response.
virtual int write (const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length)
Write to the SPI Slave and obtain the response.
virtual void lock (void)
Acquire exclusive access to this SPI bus.
virtual void unlock (void)
Release exclusive access to this SPI bus.
void set_default_write_value (char data)
Set default write data SPI requires the master to send some data during a read operation.
template<typename Type >
int transfer (const Type *tx_buffer, int tx_length, Type *rx_buffer, int rx_length, const event_callback_t &callback, int event=SPI_EVENT_COMPLETE)
Start non-blocking SPI transfer using 8bit buffers.
void abort_transfer ()
Abort the on-going SPI transfer, and continue with transfer's in the queue if any.
void clear_transfer_buffer ()
Clear the transaction buffer.
void abort_all_transfers ()
Clear the transaction buffer and abort on-going transfer.
int set_dma_usage (DMAUsage usage)
Configure DMA usage suggestion for non-blocking transfers.
Protected Member Functions
void irq_handler_asynch (void)
SPI IRQ handler.
int transfer (const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event)
Common transfer method.
int queue_transfer (const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event)
void start_transfer (const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t &callback, int event)
Configures a callback, spi peripheral and initiate a new transfer.
void start_transaction (transaction_t *data)
Start a new transaction.
void dequeue_transaction ()
Dequeue a transaction.
Detailed Description
A SPI Master, used for communicating with SPI slave devices.
The default format is set to 8-bits, mode 0, and a clock frequency of 1MHz
Most SPI devices will also require Chip Select and Reset signals. These can be controlled using DigitalOut pins
Note: Synchronization level: Thread safe
Example:
#include "mbed.h"
SPI device(p5, p6, p7);
DigitalOut cs(p8);
int main() {
device.lock();
cs = 0;
int response = device.write(0xFF);
cs = 1;
device.unlock();
}
Definition at line 76 of file SPI.h .
Constructor & Destructor Documentation
SPI
(
PinName
mosi ,
PinName
miso ,
PinName
sclk ,
PinName
ssel = NC
)
Create a SPI master connected to the specified pins.
mosi or miso can be specfied as NC if not used
Parameters:
mosi SPI Master Out, Slave In pin
miso SPI Master In, Slave Out pin
sclk SPI Clock pin
ssel SPI chip select pin
Definition at line 27 of file SPI.cpp .
Member Function Documentation
void abort_all_transfers
(
)
Clear the transaction buffer and abort on-going transfer.
Definition at line 152 of file SPI.cpp .
void abort_transfer
(
void
)
Abort the on-going SPI transfer, and continue with transfer's in the queue if any.
Definition at line 136 of file SPI.cpp .
void clear_transfer_buffer
(
)
Clear the transaction buffer.
Definition at line 145 of file SPI.cpp .
void dequeue_transaction
(
)
[protected]
Dequeue a transaction.
Definition at line 211 of file SPI.cpp .
void format
(
int
bits ,
int
mode = 0
)
Configure the data transmission format.
Parameters:
bits Number of bits per SPI frame (4 - 16)
mode Clock polarity and phase mode (0 - 3)
mode | POL PHA
-----+--------
0 | 0 0
1 | 0 1
2 | 1 0
3 | 1 1
Definition at line 43 of file SPI.cpp .
void frequency
(
int
hz = 1000000
)
Set the spi bus clock frequency.
Parameters:
hz SCLK frequency in hz (default = 1MHz)
Definition at line 58 of file SPI.cpp .
void irq_handler_asynch
(
void
)
[protected]
void lock
(
void
)
[virtual]
Acquire exclusive access to this SPI bus.
Definition at line 111 of file SPI.cpp .
int queue_transfer
(
const void *
tx_buffer ,
int
tx_length ,
void *
rx_buffer ,
int
rx_length ,
unsigned char
bit_width ,
const event_callback_t &
callback ,
int
event
)
[protected]
Parameters:
tx_buffer The TX buffer with data to be transfered. If NULL is passed, the default SPI value is sent
tx_length The length of TX buffer in bytes
rx_buffer The RX buffer which is used for received data. If NULL is passed, received data are ignored
rx_length The length of RX buffer in bytes
bit_width The buffers element width
callback The event callback function
event The logical OR of events to modify
Returns: Zero if a transfer was added to the queue, or -1 if the queue is full
Definition at line 167 of file SPI.cpp .
void set_default_write_value
(
char
data )
Set default write data SPI requires the master to send some data during a read operation.
Different devices may require different default byte values. For example: A SD Card requires default bytes to be 0xFF.
Parameters:
data Default character to be transmitted while read operation
Definition at line 119 of file SPI.cpp .
int set_dma_usage
(
DMAUsage
usage )
Configure DMA usage suggestion for non-blocking transfers.
Parameters:
usage The usage DMA hint for peripheral
Returns: Zero if the usage was set, -1 if a transaction is on-going
Definition at line 158 of file SPI.cpp .
Start a new transaction.
Parameters:
Definition at line 206 of file SPI.cpp .
void start_transfer
(
const void *
tx_buffer ,
int
tx_length ,
void *
rx_buffer ,
int
rx_length ,
unsigned char
bit_width ,
const event_callback_t &
callback ,
int
event
)
[protected]
Configures a callback, spi peripheral and initiate a new transfer.
Parameters:
tx_buffer The TX buffer with data to be transfered. If NULL is passed, the default SPI value is sent
tx_length The length of TX buffer in bytes
rx_buffer The RX buffer which is used for received data. If NULL is passed, received data are ignored
rx_length The length of RX buffer in bytes
bit_width The buffers element width
callback The event callback function
event The logical OR of events to modify
Definition at line 196 of file SPI.cpp .
int transfer
(
const void *
tx_buffer ,
int
tx_length ,
void *
rx_buffer ,
int
rx_length ,
unsigned char
bit_width ,
const event_callback_t &
callback ,
int
event
)
[protected]
Common transfer method.
Parameters:
tx_buffer The TX buffer with data to be transfered. If NULL is passed, the default SPI value is sent
tx_length The length of TX buffer in bytes
rx_buffer The RX buffer which is used for received data. If NULL is passed, received data are ignored
rx_length The length of RX buffer in bytes
bit_width The buffers element width
callback The event callback function
event The logical OR of events to modify
Returns: Zero if the transfer has started or was added to the queue, or -1 if SPI peripheral is busy/buffer is full
Definition at line 127 of file SPI.cpp .
int transfer
(
const Type *
tx_buffer ,
int
tx_length ,
Type *
rx_buffer ,
int
rx_length ,
const event_callback_t &
callback ,
int
event = SPI_EVENT_COMPLETE
)
Start non-blocking SPI transfer using 8bit buffers.
Parameters:
tx_buffer The TX buffer with data to be transfered. If NULL is passed, the default SPI value is sent
tx_length The length of TX buffer in bytes
rx_buffer The RX buffer which is used for received data. If NULL is passed, received data are ignored
rx_length The length of RX buffer in bytes
callback The event callback function
event The logical OR of events to modify. Look at spi hal header file for SPI events.
Returns: Zero if the transfer has started, or -1 if SPI peripheral is busy
Definition at line 170 of file SPI.h .
void unlock
(
void
)
[virtual]
Release exclusive access to this SPI bus.
Definition at line 115 of file SPI.cpp .
int write
(
const char *
tx_buffer ,
int
tx_length ,
char *
rx_buffer ,
int
rx_length
)
[virtual]
Write to the SPI Slave and obtain the response.
The total number of bytes sent and recieved will be the maximum of tx_length and rx_length. The bytes written will be padded with the value 0xff.
Parameters:
tx_buffer Pointer to the byte-array of data to write to the device
tx_length Number of bytes to write, may be zero
rx_buffer Pointer to the byte-array of data to read from the device
rx_length Number of bytes to read, may be zero
Returns: The number of bytes written and read from the device. This is maximum of tx_length and rx_length.
Definition at line 103 of file SPI.cpp .
int write
(
int
value )
[virtual]
Write to the SPI Slave and return the response.
Parameters:
value Data to be sent to the SPI slave
Returns: Response from the SPI slave
Definition at line 95 of file SPI.cpp .