SPI.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*!*****************************************************************************
33  * @file SPI.h
34  *
35  * @brief SPI driver interface
36  *
37  * The SPI driver interface provides device independent APIs, data types,
38  * and macros. The SPI header file should be included in an application as
39  * follows:
40  * @code
41  * #include <ti/drivers/SPI.h>
42  * @endcode
43  *
44  * # Overview #
45  * The Serial Peripheral Interface (SPI) driver is a generic, full-duplex
46  * driver that transmits and receives data on a SPI bus. SPI is sometimes
47  * called SSI (Synchronous Serial Interface).
48  * The SPI protocol defines the format of a data transfer over the SPI bus,
49  * but it leaves flow control, data formatting, and handshaking mechanisms
50  * to higher-level software layers.
51  *
52  * The APIs in this driver serve as an interface to a typical RTOS
53  * application. Its purpose is to redirect the SPI APIs to specific
54  * driver implementations which are specified using a pointer to a
55  * #SPI_FxnTable. The specific SPI implementations are responsible for
56  * creating all the RTOS specific primitives to allow for thread-safe
57  * operation.
58  *
59  * The SPI driver operates on some key definitions and assumptions:
60  * - The driver operates transparently from the chip select. Some SPI
61  * controllers feature a hardware chip select to assert SPI slave
62  * peripherals. See the specific peripheral implementations on chip
63  * select requirements.
64  *
65  * - The SPI protocol does not account for a built-in handshaking mechanism
66  * and neither does this SPI driver. Therefore, when operating in
67  * ::SPI_SLAVE mode, the application must provide such a mechanism to
68  * ensure that the SPI slave is ready for the SPI master. The SPI slave
69  * must call SPI_transfer() *before* the SPI master starts transmitting.
70  * Some example application mechanisms could include:
71  * - Timed delays on the SPI master to guarantee the SPI slave is ready
72  * for a SPI transaction.
73  * - A form of GPIO flow control from the slave to the SPI master to notify
74  * the master when ready.
75  *
76  * # Usage #
77  *
78  * To use the SPI driver to send data over the SPI bus, the application
79  * calls the following APIs:
80  * - SPI_init(): Initialize the SPI driver.
81  * - SPI_Params_init(): Initialize a #SPI_Params structure with default
82  * values. Then change the parameters from non-default values as
83  * needed.
84  * - SPI_open(): Open an instance of the SPI driver, passing the
85  * initialized parameters, or NULL, and an index (described later).
86  * - SPI_transfer(): Transmit/receive data. This function takes a
87  * #SPI_Transaction argument that specifies buffers for data to be
88  * transmitted/received.
89  * - SPI_close(): De-initialize the SPI instance.
90  *
91  * The following code example opens a SPI instance as a master SPI,
92  * and issues a transaction.
93  *
94  * @code
95  * SPI_Handle spi;
96  * SPI_Params spiParams;
97  * SPI_Transaction spiTransaction;
98  * uint8_t transmitBuffer[MSGSIZE];
99  * uint8_t receiveBuffer[MSGSIZE];
100  * bool transferOK;
101  *
102  * SPI_init(); // Initialize the SPI driver
103  *
104  * SPI_Params_init(&spiParams); // Initialize SPI parameters
105  * spiParams.dataSize = 8; // 8-bit data size
106  *
107  * spi = SPI_open(Board_SPI0, &spiParams);
108  * if (spi == NULL) {
109  * while (1); // SPI_open() failed
110  * }
111  *
112  * // Fill in transmitBuffer
113  *
114  * spiTransaction.count = MSGSIZE;
115  * spiTransaction.txBuf = transmitBuffer;
116  * spiTransaction.rxBuf = receiveBuffer;
117  *
118  * transferOK = SPI_transfer(spi, &spiTransaction);
119  * if (!transferOK) {
120  * // Error in SPI or transfer already in progress.
121  * }
122  * @endcode
123  *
124  * More details on usage are provided in the following subsections.
125  *
126  * ### SPI Driver Configuration #
127  *
128  * In order to use the SPI APIs, the application is required
129  * to provide device-specific SPI configuration in the Board.c file.
130  * The SPI driver interface defines a configuration data structure:
131  *
132  * @code
133  * typedef struct SPI_Config_ {
134  * SPI_FxnTable const *fxnTablePtr;
135  * void *object;
136  * void const *hwAttrs;
137  * } SPI_Config;
138  * @endcode
139  *
140  * The application must declare an array of SPI_Config elements, named
141  * SPI_config[]. Each element of SPI_config[] must be populated with
142  * pointers to a device specific SPI driver implementation's function
143  * table, driver object, and hardware attributes. The hardware attributes
144  * define properties such as the SPI peripheral's base address, and
145  * the MOSI and MISO pins. Each element in SPI_config[] corresponds to
146  * a SPI instance, and none of the elements should have NULL pointers.
147  * There is no correlation between the index and the
148  * peripheral designation (such as SPI0 or SPI1). For example, it is
149  * possible to use SPI_config[0] for SPI1.
150  *
151  * Because the SPI configuration is very device dependent, you will need to
152  * check the doxygen for the device specific SPI implementation. There you
153  * will find a description of the SPI hardware attributes. Please also
154  * refer to the Board.c file of any of your examples to see the SPI
155  * configuration.
156  *
157  * ### Initializing the SPI Driver #
158  *
159  * SPI_init() must be called before any other SPI APIs. This function
160  * iterates through the elements of the SPI_config[] array, calling
161  * the element's device implementation SPI initialization function.
162  *
163  * ### SPI Parameters
164  *
165  * The #SPI_Params structure is passed to the SPI_open() call. If NULL
166  * is passed for the parameters, SPI_open() uses default parameters.
167  * A #SPI_Params structure is initialized with default values by passing
168  * it to SPI_Params_init().
169  * Some of the SPI parameters are described below. To see brief descriptions
170  * of all the parameters, see #SPI_Params.
171  *
172  * #### SPI Mode
173  * The SPI driver operates in both SPI master and SPI slave modes.
174  * Logically, the implementation is identical, however the difference
175  * between these two modes is driven by hardware. The default mode is
176  * ::SPI_MASTER, but can be set to slave mode by setting ::SPI_Params.mode
177  * to ::SPI_SLAVE in the parameters passed to SPI_open(). See
178  * <a href="#Master_Slave_Modes"> Master/Slave Modes</a> for further
179  * details.
180  *
181  * #### SPI Transfer Mode
182  * The SPI driver supports two transfer modes of operation: blocking and
183  * callback. The transfer mode is determined by the transferMode parameter
184  * in the SPI_Params data structure. The SPI driver
185  * defaults to blocking mode, if the application does not set it.
186  * Once a SPI driver is opened, the only way to change the operation mode
187  * is to close and re-open the SPI instance with the new transfer mode.
188  *
189  * In blocking mode, a task's code execution is blocked until a SPI
190  * transaction has completed or a timeout has occurred. This ensures
191  * that only one SPI transfer operates at a given time. Other tasks requesting
192  * SPI transfers while a transfer is currently taking place will receive
193  * a FALSE return value. If a timeout occurs the transfer is canceled, the
194  * task is unblocked & will receive a FALSE return value. The transaction
195  * count field will have the amount of frames which were transferred
196  * successfully before the timeout. In blocking mode, transfers cannot be
197  * performed in software or hardware ISR context.
198  *
199  * In callback mode, a SPI transaction functions asynchronously, which
200  * means that it does not block code execution. After a SPI transaction
201  * has been completed, the SPI driver calls a user-provided hook function.
202  * Callback mode is supported in the execution context of tasks and
203  * hardware interrupt routines. However, if a SPI transaction is
204  * requested while a transaction is taking place, SPI_transfer() returns
205  * FALSE.
206  *
207  * #### SPI Frame Formats and Data Size
208  * The SPI driver can configure the device's SPI peripheral to transfer
209  * data in several SPI format options: SPI (with various polarity and phase
210  * settings), TI, and Micro-wire. The frame format is set with
211  * SPI_Params.frameFormat. Some SPI implementations may not support all frame
212  * formats & the SPI driver will fail to opened. Refer to the device specific
213  * implementation documentation for details on which frame formats are
214  * supported.
215  *
216  * The smallest single unit of data transmitted onto the SPI bus is called
217  * a SPI frame and is of size SPI_Params.dataSize. A series of SPI frames
218  * transmitted/received on a SPI bus is known as a SPI transaction.
219  *
220  * ### Opening the SPI Driver #
221  * After initializing the SPI driver by calling SPI_init(), the application
222  * can open a SPI instance by calling SPI_open(). This function
223  * takes an index into the SPI_config[] array, and a SPI parameters data
224  * structure. The SPI instance is specified by the index of the SPI in
225  * SPI_config[]. Only one SPI index can be used at a time;
226  * calling SPI_open() a second time with the same index previously
227  * passed to SPI_open() will result in an error. You can,
228  * though, re-use the index if the instance is closed via SPI_close().
229  *
230  * If no SPI_Params structure is passed to SPI_open(), default values are
231  * used. If the open call is successful, it returns a non-NULL value.
232  *
233  * Example opening a SPI driver instance in blocking mode:
234  * @code
235  * SPI_Handle spi;
236  * SPI_Params spiParams;
237  *
238  * SPI_Params_init(&spiParams);
239  * spiParams.transferMode = SPI_MODE_BLOCKING;
240  * spi = SPI_open(Board_SPI0, &spiParams);
241  *
242  * if (spi == NULL) {
243  * // Error opening SPI
244  * }
245  * @endcode
246  *
247  * Example opening a SPI driver instance in callback mode:
248  * @code
249  * SPI_Handle spi;
250  * SPI_Params spiParams;
251  *
252  * SPI_Params_init(&spiParams);
253  * spiParams.transferMode = SPI_MODE_CALLBACK;
254  * spiParams.transferCallbackFxn = UserCallbackFxn;
255  *
256  * spi = SPI_open(Board_SPI0, &spiParams);
257  * if (spi == NULL) {
258  * // Error opening SPI
259  * }
260  * @endcode
261  *
262  *
263  * ### SPI Transactions #
264  *
265  * A SPI transaction consists of a series of SPI frames
266  * transmitted/received on a SPI bus. A SPI transaction is performed
267  * using SPI_transfer(). SPI_transfer() accepts a pointer to a
268  * #SPI_Transaction structure that dictates the quantity of data to be
269  * sent and received.
270  * The SPI_Transaction.txBuf and SPI_Transaction.rxBuf are both pointers
271  * to data buffers. If txBuf is NULL, the driver sends SPI frames with all
272  * data set to the default value specified in the hardware attributes. If
273  * rxBuf is NULL, the driver discards all SPI frames received. SPI_transfer()
274  * of a SPI transaction is performed atomically.
275  *
276  * @warning The use of NULL as a sentinel txBuf or rxBuf value to determine
277  * whether the SPI transaction includes a tx or rx component implies
278  * that it is not possible to perform a transmit or receive transfer
279  * directly from/to a buffer with a base address of 0x00000000. To support
280  * this rare use-case, the application will have to manually copy the
281  * contents of location 0x00000000 to/from a temporary buffer before/after
282  * the tx/rx SPI transaction.
283  *
284  * When the SPI is opened, the dataSize value determines the element types
285  * of txBuf and rxBuf. If the dataSize is from 4 to 8 bits, the driver
286  * assumes the data buffers are of type uint8_t (unsigned char). If the
287  * dataSize is from 8 to 16 bits, the driver assumes the data buffers are
288  * of type uint16_t (unsigned short). If the dataSize is greater than
289  * 16 bits, the driver assumes the data buffers are uint32_t (unsigned long).
290  * Some SPI driver implementations may not support all data sizes; refer
291  * to device specific SPI implementation documentation for details on
292  * what data sizes are supported.
293  *
294  * The optional SPI_Transaction.arg variable can only be used when the
295  * SPI driver has been opened in callback mode. This variable is used to
296  * pass a user-defined value into the user-defined callback function.
297  *
298  * SPI_transfer() always performs full-duplex SPI transactions. This means
299  * the SPI simultaneously receives data as it transmits data. The application
300  * is responsible for formatting the data to be transmitted as well as
301  * determining whether the data received is meaningful.
302  * Specifics about SPI frame formatting and data sizes are provided in
303  * device-specific data sheets and technical reference manuals.
304  *
305  * The following code snippets perform SPI transactions.
306  *
307  * Example transferring 6-bit SPI frames. The transmit and receive
308  * buffers are of type uint8_t.
309  * @code
310  * SPI_Transaction spiTransaction;
311  * uint8_t transmitBuffer[BUFSIZE];
312  * uint8_t receiveBuffer[BUFSIZE];
313  * bool transferOK;
314  *
315  * SPI_Params_init(&spiParams);
316  * spiParams.dataSize = 6;
317  * spi = SPI_open(Board_SPI0, &spiParams);
318  * ...
319  * spiTransaction.count = someIntegerValue;
320  * spiTransaction.txBuf = transmitBuffer;
321  * spiTransaction.rxBuf = receiveBuffer;
322  *
323  * transferOK = SPI_transfer(spi, &spiTransaction);
324  * if (!transferOK) {
325  * // Error in SPI or transfer already in progress.
326  * }
327  * @endcode
328  *
329  * Example transferring 12-bit SPI frames. The transmit and receive
330  * buffers are of type uint16_t.
331  * @code
332  * SPI_Transaction spiTransaction;
333  * uint16_t transmitBuffer[BUFSIZE];
334  * uint16_t receiveBuffer[BUFSIZE];
335  * bool transferOK;
336  *
337  * SPI_Params_init(&spiParams);
338  * spiParams.dataSize = 12;
339  * spi = SPI_open(Board_SPI0, &spiParams);
340  * ...
341  * spiTransaction.count = someIntegerValue;
342  * spiTransaction.txBuf = transmitBuffer;
343  * spiTransaction.rxBuf = receiveBuffer;
344  *
345  * transferOK = SPI_transfer(spi, &spiTransaction);
346  * if (!transferOK) {
347  * // Error in SPI or transfer already in progress.
348  * }
349  * @endcode
350  *
351  * ### Canceling a transaction #
352  * SPI_transferCancel() is used to cancel a SPI transaction when the driver is
353  * used in ::SPI_MODE_CALLBACK mode.
354  *
355  * Calling this API while no transfer is in progress has no effect. If a
356  * transfer is in progress, it is canceled and the callback functions is
357  * called.
358  * The ::SPI_Status status field in the ::SPI_Transaction structure
359  * can be examined within the callback to determine if the transaction
360  * succeeded.
361  *
362  * Example:
363  * @code
364  * SPI_transferCancel(spi);
365  * @endcode
366  *
367  *
368  * <h2><a NAME="Master_Slave_Modes">Master/Slave Modes</a></h2>
369  * This SPI driver functions in both SPI master and SPI slave modes.
370  * Logically, the implementation is identical, however the difference between
371  * these two modes is driven by hardware. As a SPI master, the peripheral is
372  * in control of the clock signal and therefore will commence communications
373  * to the SPI slave immediately. As a SPI slave, the SPI driver prepares
374  * the peripheral to transmit and receive data in a way such that the
375  * peripheral is ready to transfer data when the SPI master initiates a
376  * transaction.
377  *
378  * ### Asserting on Chip Select
379  * The SPI protocol requires that the SPI master asserts a SPI slave's chip
380  * select pin prior to starting a SPI transaction. While this protocol is
381  * generally followed, various types of SPI peripherals have different
382  * timing requirements as to when and for how long the chip select pin must
383  * remain asserted for a SPI transaction.
384  *
385  * Commonly, the SPI master uses a hardware chip select to assert and
386  * de-assert the SPI slave for every data frame. In other cases, a SPI slave
387  * imposes the requirement of asserting the chip select over several SPI
388  * data frames. This is generally accomplished by using a regular,
389  * general-purpose output pin. Due to the complexity of such SPI peripheral
390  * implementations, this SPI driver has been designed to operate
391  * transparently to the SPI chip select. When the hardware chip
392  * select is used, the peripheral automatically selects/enables the
393  * peripheral. When using a software chip select, the application needs to
394  * handle the proper chip select and pin configuration. Chip select support
395  * will vary per SPI peripheral, refer to the device specific implementation
396  * documentation for details on chip select support.
397  *
398  * - _Hardware chip select_ No additional action by the application is
399  * required.
400  * - _Software chip select_ The application needs to handle the chip select
401  * assertion and de-assertion for the proper SPI peripheral.
402  *
403  * # Implementation #
404  *
405  * This module serves as the main interface for RTOS applications. Its
406  * purpose is to redirect the module's APIs to specific peripheral
407  * implementations which are specified using a pointer to a #SPI_FxnTable.
408  *
409  * The SPI driver interface module is joined (at link time) to an
410  * array of SPI_Config data structures named *SPI_config*.
411  * The SPI_config array is implemented in the application with each entry
412  * being an instance of a SPI peripheral. Each entry in *SPI_config* contains
413  * the following:
414  * - (SPI_FxnTable *) A pointer to a set of functions that implement a
415  * SPI peripheral.
416  * - (void *) A data object that is associated with the SPI_FxnTable.
417  * - (void *) The hardware attributes that are associated with the
418  * SPI_FxnTable.
419  *
420  *******************************************************************************
421  */
422 
423 #ifndef ti_drivers_SPI__include
424 #define ti_drivers_SPI__include
425 
426 #ifdef __cplusplus
427 extern "C" {
428 #endif
429 
430 #include <stdbool.h>
431 #include <stddef.h>
432 #include <stdint.h>
433 
451 #define SPI_CMD_RESERVED (32)
452 
465 #define SPI_STATUS_RESERVED (-32)
466 
480 #define SPI_STATUS_SUCCESS (0)
481 
488 #define SPI_STATUS_ERROR (-1)
489 
497 #define SPI_STATUS_UNDEFINEDCMD (-2)
498 
508 /* Add SPI_CMD_<commands> here */
509 
517 #define SPI_WAIT_FOREVER (~(0U))
518 
522 typedef struct SPI_Config_ *SPI_Handle;
523 
527 typedef enum SPI_Status_ {
533 } SPI_Status;
534 
543 typedef struct SPI_Transaction_ {
544  /* User input (write-only) fields */
545  size_t count;
546  void *txBuf;
547  void *rxBuf;
548  void *arg;
550  /* User output (read-only) fields */
551  SPI_Status status;
553 
561 typedef void (*SPI_CallbackFxn) (SPI_Handle handle,
562  SPI_Transaction *transaction);
567 typedef enum SPI_Mode_ {
570 } SPI_Mode;
571 
576 typedef enum SPI_FrameFormat_ {
581  SPI_TI = 4,
583  SPI_MW = 5
586 
597 typedef enum SPI_TransferMode_ {
610 
619 typedef struct SPI_Params_ {
620  SPI_TransferMode transferMode;
621  uint32_t transferTimeout;
625  uint32_t bitRate;
626  uint32_t dataSize;
628  void *custom;
630 } SPI_Params;
631 
636 typedef void (*SPI_CloseFxn) (SPI_Handle handle);
637 
642 typedef int_fast16_t (*SPI_ControlFxn) (SPI_Handle handle, uint_fast16_t cmd,
643  void *arg);
644 
649 typedef void (*SPI_InitFxn) (SPI_Handle handle);
650 
655 typedef SPI_Handle (*SPI_OpenFxn) (SPI_Handle handle, SPI_Params *params);
656 
661 typedef bool (*SPI_TransferFxn) (SPI_Handle handle,
662  SPI_Transaction *transaction);
663 
668 typedef void (*SPI_TransferCancelFxn) (SPI_Handle handle);
669 
675 typedef struct SPI_FxnTable_ {
678 
681 
684 
687 
690 
693 } SPI_FxnTable;
694 
706 typedef struct SPI_Config_ {
709 
711  void *object;
712 
714  void const *hwAttrs;
715 } SPI_Config;
716 
726 extern void SPI_close(SPI_Handle handle);
727 
765 extern int_fast16_t SPI_control(SPI_Handle handle, uint_fast16_t cmd,
766  void *controlArg);
767 
776 extern void SPI_init(void);
777 
796 extern SPI_Handle SPI_open(uint_least8_t index, SPI_Params *params);
797 
813 extern void SPI_Params_init(SPI_Params *params);
814 
856 extern bool SPI_transfer(SPI_Handle handle, SPI_Transaction *transaction);
857 
875 extern void SPI_transferCancel(SPI_Handle handle);
876 
877 #ifdef __cplusplus
878 }
879 #endif
880 
881 #endif /* ti_drivers_SPI__include */
void SPI_init(void)
This function initializes the SPI module.
SPI_Mode mode
Definition: SPI.h:624
enum SPI_Status_ SPI_Status
Status codes that are set by the SPI driver.
Definition: SPI.h:568
void * rxBuf
Definition: SPI.h:547
SPI_FrameFormat_
Definitions for various SPI data frame formats.
Definition: SPI.h:576
SPI_CloseFxn closeFxn
Definition: SPI.h:677
void const * hwAttrs
Definition: SPI.h:714
Definition: SPI.h:608
void(* SPI_CallbackFxn)(SPI_Handle handle, SPI_Transaction *transaction)
The definition of a callback function used by the SPI driver when used in SPI_MODE_CALLBACK.
Definition: SPI.h:561
enum SPI_Mode_ SPI_Mode
Definitions for various SPI modes of operation.
SPI_InitFxn initFxn
Definition: SPI.h:683
A SPI_Transaction data structure is used with SPI_transfer(). It indicates how many SPI_FrameFormat f...
Definition: SPI.h:543
Definition: SPI.h:583
SPI_ControlFxn controlFxn
Definition: SPI.h:680
SPI_TransferFxn transferFxn
Definition: SPI.h:689
uint32_t bitRate
Definition: SPI.h:625
uint32_t dataSize
Definition: SPI.h:626
void SPI_transferCancel(SPI_Handle handle)
Function to cancel SPI transactions.
SPI_FxnTable const * fxnTablePtr
Definition: SPI.h:708
void SPI_Params_init(SPI_Params *params)
Function to initialize the SPI_Params struct to its defaults.
Definition: SPI.h:581
Definition: SPI.h:577
bool(* SPI_TransferFxn)(SPI_Handle handle, SPI_Transaction *transaction)
A function pointer to a driver specific implementation of SPI_transfer().
Definition: SPI.h:661
size_t count
Definition: SPI.h:545
struct SPI_Transaction_ SPI_Transaction
A SPI_Transaction data structure is used with SPI_transfer(). It indicates how many SPI_FrameFormat f...
Definition: SPI.h:602
SPI_TransferCancelFxn transferCancelFxn
Definition: SPI.h:692
void(* SPI_TransferCancelFxn)(SPI_Handle handle)
A function pointer to a driver specific implementation of SPI_transferCancel().
Definition: SPI.h:668
SPI_Status_
Status codes that are set by the SPI driver.
Definition: SPI.h:527
uint32_t transferTimeout
Definition: SPI.h:621
enum SPI_TransferMode_ SPI_TransferMode
SPI transfer mode determines the whether the SPI controller operates synchronously or asynchronously...
void(* SPI_CloseFxn)(SPI_Handle handle)
A function pointer to a driver specific implementation of SPI_close().
Definition: SPI.h:636
Definition: SPI.h:578
The definition of a SPI function table that contains the required set of functions to control a speci...
Definition: SPI.h:675
Definition: SPI.h:532
SPI Parameters.
Definition: SPI.h:619
SPI_Status status
Definition: SPI.h:551
int_fast16_t SPI_control(SPI_Handle handle, uint_fast16_t cmd, void *controlArg)
Function performs implementation specific features on a given SPI_Handle.
struct SPI_Params_ SPI_Params
SPI Parameters.
void * txBuf
Definition: SPI.h:546
Definition: SPI.h:528
bool SPI_transfer(SPI_Handle handle, SPI_Transaction *transaction)
Function to perform SPI transactions.
struct SPI_Config_ SPI_Config
SPI Global configuration.
SPI Global configuration.
Definition: SPI.h:706
SPI_OpenFxn openFxn
Definition: SPI.h:686
SPI_Mode_
Definitions for various SPI modes of operation.
Definition: SPI.h:567
void * custom
Definition: SPI.h:628
enum SPI_FrameFormat_ SPI_FrameFormat
Definitions for various SPI data frame formats.
Definition: SPI.h:569
void SPI_close(SPI_Handle handle)
Function to close a SPI peripheral specified by the SPI handle.
Definition: SPI.h:531
SPI_TransferMode transferMode
Definition: SPI.h:620
struct SPI_Config_ * SPI_Handle
A handle that is returned from a SPI_open() call.
Definition: SPI.h:522
SPI_Handle SPI_open(uint_least8_t index, SPI_Params *params)
This function opens a given SPI peripheral.
void * arg
Definition: SPI.h:548
int_fast16_t(* SPI_ControlFxn)(SPI_Handle handle, uint_fast16_t cmd, void *arg)
A function pointer to a driver specific implementation of SPI_control().
Definition: SPI.h:642
void(* SPI_InitFxn)(SPI_Handle handle)
A function pointer to a driver specific implementation of SPI_init().
Definition: SPI.h:649
Definition: SPI.h:529
Definition: SPI.h:580
SPI_Handle(* SPI_OpenFxn)(SPI_Handle handle, SPI_Params *params)
A function pointer to a driver specific implementation of SPI_open().
Definition: SPI.h:655
Definition: SPI.h:530
SPI_FrameFormat frameFormat
Definition: SPI.h:627
struct SPI_FxnTable_ SPI_FxnTable
The definition of a SPI function table that contains the required set of functions to control a speci...
SPI_CallbackFxn transferCallbackFxn
Definition: SPI.h:623
Definition: SPI.h:579
SPI_TransferMode_
SPI transfer mode determines the whether the SPI controller operates synchronously or asynchronously...
Definition: SPI.h:597
void * object
Definition: SPI.h:711
Copyright 2017, Texas Instruments Incorporated