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  * When the SPI is opened, the dataSize value determines the element types
277  * of txBuf and rxBuf. If the dataSize is from 4 to 8 bits, the driver
278  * assumes the data buffers are of type uint8_t (unsigned char). If the
279  * dataSize is from 8 to 16 bits, the driver assumes the data buffers are
280  * of type uint16_t (unsigned short). If the dataSize is greater than
281  * 16 bits, the driver assumes the data buffers are uint32_t (unsigned long).
282  * Some SPI driver implementations may not support all data sizes; refer
283  * to device specific SPI implementation documentation for details on
284  * what data sizes are supported.
285  *
286  * The optional SPI_Transaction.arg variable can only be used when the
287  * SPI driver has been opened in callback mode. This variable is used to
288  * pass a user-defined value into the user-defined callback function.
289  *
290  * SPI_transfer() always performs full-duplex SPI transactions. This means
291  * the SPI simultaneously receives data as it transmits data. The application
292  * is responsible for formatting the data to be transmitted as well as
293  * determining whether the data received is meaningful.
294  * Specifics about SPI frame formatting and data sizes are provided in
295  * device-specific data sheets and technical reference manuals.
296  *
297  * The following code snippets perform SPI transactions.
298  *
299  * Example transferring 6-bit SPI frames. The transmit and receive
300  * buffers are of type uint8_t.
301  * @code
302  * SPI_Transaction spiTransaction;
303  * uint8_t transmitBuffer[BUFSIZE];
304  * uint8_t receiveBuffer[BUFSIZE];
305  * bool transferOK;
306  *
307  * SPI_Params_init(&spiParams);
308  * spiParams.dataSize = 6;
309  * spi = SPI_open(Board_SPI0, &spiParams);
310  * ...
311  * spiTransaction.count = someIntegerValue;
312  * spiTransaction.txBuf = transmitBuffer;
313  * spiTransaction.rxBuf = receiveBuffer;
314  *
315  * transferOK = SPI_transfer(spi, &spiTransaction);
316  * if (!transferOK) {
317  * // Error in SPI or transfer already in progress.
318  * }
319  * @endcode
320  *
321  * Example transferring 12-bit SPI frames. The transmit and receive
322  * buffers are of type uint16_t.
323  * @code
324  * SPI_Transaction spiTransaction;
325  * uint16_t transmitBuffer[BUFSIZE];
326  * uint16_t receiveBuffer[BUFSIZE];
327  * bool transferOK;
328  *
329  * SPI_Params_init(&spiParams);
330  * spiParams.dataSize = 12;
331  * spi = SPI_open(Board_SPI0, &spiParams);
332  * ...
333  * spiTransaction.count = someIntegerValue;
334  * spiTransaction.txBuf = transmitBuffer;
335  * spiTransaction.rxBuf = receiveBuffer;
336  *
337  * transferOK = SPI_transfer(spi, &spiTransaction);
338  * if (!transferOK) {
339  * // Error in SPI or transfer already in progress.
340  * }
341  * @endcode
342  *
343  * ### Canceling a transaction #
344  * SPI_transferCancel() is used to cancel a SPI transaction when the driver is
345  * used in ::SPI_MODE_CALLBACK mode.
346  *
347  * Calling this API while no transfer is in progress has no effect. If a
348  * transfer is in progress, it is canceled and the callback functions is
349  * called.
350  * The ::SPI_Status status field in the ::SPI_Transaction structure
351  * can be examined within the callback to determine if the transaction
352  * succeeded.
353  *
354  * Example:
355  * @code
356  * SPI_transferCancel(spi);
357  * @endcode
358  *
359  *
360  * <h2><a NAME="Master_Slave_Modes">Master/Slave Modes</a></h2>
361  * This SPI driver functions in both SPI master and SPI slave modes.
362  * Logically, the implementation is identical, however the difference between
363  * these two modes is driven by hardware. As a SPI master, the peripheral is
364  * in control of the clock signal and therefore will commence communications
365  * to the SPI slave immediately. As a SPI slave, the SPI driver prepares
366  * the peripheral to transmit and receive data in a way such that the
367  * peripheral is ready to transfer data when the SPI master initiates a
368  * transaction.
369  *
370  * ### Asserting on Chip Select
371  * The SPI protocol requires that the SPI master asserts a SPI slave's chip
372  * select pin prior to starting a SPI transaction. While this protocol is
373  * generally followed, various types of SPI peripherals have different
374  * timing requirements as to when and for how long the chip select pin must
375  * remain asserted for a SPI transaction.
376  *
377  * Commonly, the SPI master uses a hardware chip select to assert and
378  * de-assert the SPI slave for every data frame. In other cases, a SPI slave
379  * imposes the requirement of asserting the chip select over several SPI
380  * data frames. This is generally accomplished by using a regular,
381  * general-purpose output pin. Due to the complexity of such SPI peripheral
382  * implementations, this SPI driver has been designed to operate
383  * transparently to the SPI chip select. When the hardware chip
384  * select is used, the peripheral automatically selects/enables the
385  * peripheral. When using a software chip select, the application needs to
386  * handle the proper chip select and pin configuration. Chip select support
387  * will vary per SPI peripheral, refer to the device specific implementation
388  * documentation for details on chip select support.
389  *
390  * - _Hardware chip select_ No additional action by the application is
391  * required.
392  * - _Software chip select_ The application needs to handle the chip select
393  * assertion and de-assertion for the proper SPI peripheral.
394  *
395  * # Implementation #
396  *
397  * This module serves as the main interface for RTOS applications. Its
398  * purpose is to redirect the module's APIs to specific peripheral
399  * implementations which are specified using a pointer to a #SPI_FxnTable.
400  *
401  * The SPI driver interface module is joined (at link time) to an
402  * array of SPI_Config data structures named *SPI_config*.
403  * The SPI_config array is implemented in the application with each entry
404  * being an instance of a SPI peripheral. Each entry in *SPI_config* contains
405  * the following:
406  * - (SPI_FxnTable *) A pointer to a set of functions that implement a
407  * SPI peripheral.
408  * - (void *) A data object that is associated with the SPI_FxnTable.
409  * - (void *) The hardware attributes that are associated with the
410  * SPI_FxnTable.
411  *
412  *******************************************************************************
413  */
414 
415 #ifndef ti_drivers_SPI__include
416 #define ti_drivers_SPI__include
417 
418 #ifdef __cplusplus
419 extern "C" {
420 #endif
421 
422 #include <stdbool.h>
423 #include <stddef.h>
424 #include <stdint.h>
425 
443 #define SPI_CMD_RESERVED (32)
444 
457 #define SPI_STATUS_RESERVED (-32)
458 
472 #define SPI_STATUS_SUCCESS (0)
473 
480 #define SPI_STATUS_ERROR (-1)
481 
489 #define SPI_STATUS_UNDEFINEDCMD (-2)
490 
500 /* Add SPI_CMD_<commands> here */
501 
509 #define SPI_WAIT_FOREVER (~(0U))
510 
514 typedef struct SPI_Config_ *SPI_Handle;
515 
519 typedef enum SPI_Status_ {
525 } SPI_Status;
526 
535 typedef struct SPI_Transaction_ {
536  /* User input (write-only) fields */
537  size_t count;
538  void *txBuf;
539  void *rxBuf;
540  void *arg;
542  /* User output (read-only) fields */
543  SPI_Status status;
545 
553 typedef void (*SPI_CallbackFxn) (SPI_Handle handle,
554  SPI_Transaction *transaction);
559 typedef enum SPI_Mode_ {
562 } SPI_Mode;
563 
568 typedef enum SPI_FrameFormat_ {
573  SPI_TI = 4,
575  SPI_MW = 5
578 
589 typedef enum SPI_TransferMode_ {
602 
611 typedef struct SPI_Params_ {
612  SPI_TransferMode transferMode;
613  uint32_t transferTimeout;
617  uint32_t bitRate;
618  uint32_t dataSize;
620  void *custom;
622 } SPI_Params;
623 
628 typedef void (*SPI_CloseFxn) (SPI_Handle handle);
629 
634 typedef int_fast16_t (*SPI_ControlFxn) (SPI_Handle handle, uint_fast16_t cmd,
635  void *arg);
636 
641 typedef void (*SPI_InitFxn) (SPI_Handle handle);
642 
647 typedef SPI_Handle (*SPI_OpenFxn) (SPI_Handle handle, SPI_Params *params);
648 
653 typedef bool (*SPI_TransferFxn) (SPI_Handle handle,
654  SPI_Transaction *transaction);
655 
660 typedef void (*SPI_TransferCancelFxn) (SPI_Handle handle);
661 
667 typedef struct SPI_FxnTable_ {
670 
673 
676 
679 
682 
685 } SPI_FxnTable;
686 
698 typedef struct SPI_Config_ {
701 
703  void *object;
704 
706  void const *hwAttrs;
707 } SPI_Config;
708 
718 extern void SPI_close(SPI_Handle handle);
719 
757 extern int_fast16_t SPI_control(SPI_Handle handle, uint_fast16_t cmd,
758  void *controlArg);
759 
768 extern void SPI_init(void);
769 
788 extern SPI_Handle SPI_open(uint_least8_t index, SPI_Params *params);
789 
805 extern void SPI_Params_init(SPI_Params *params);
806 
848 extern bool SPI_transfer(SPI_Handle handle, SPI_Transaction *transaction);
849 
867 extern void SPI_transferCancel(SPI_Handle handle);
868 
869 #ifdef __cplusplus
870 }
871 #endif
872 
873 #endif /* ti_drivers_SPI__include */
void SPI_init(void)
This function initializes the SPI module.
SPI_Mode mode
Definition: SPI.h:616
enum SPI_Status_ SPI_Status
Status codes that are set by the SPI driver.
Definition: SPI.h:560
void * rxBuf
Definition: SPI.h:539
SPI_FrameFormat_
Definitions for various SPI data frame formats.
Definition: SPI.h:568
SPI_CloseFxn closeFxn
Definition: SPI.h:669
void const * hwAttrs
Definition: SPI.h:706
Definition: SPI.h:600
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:553
enum SPI_Mode_ SPI_Mode
Definitions for various SPI modes of operation.
SPI_InitFxn initFxn
Definition: SPI.h:675
A SPI_Transaction data structure is used with SPI_transfer(). It indicates how many SPI_FrameFormat f...
Definition: SPI.h:535
Definition: SPI.h:575
SPI_ControlFxn controlFxn
Definition: SPI.h:672
SPI_TransferFxn transferFxn
Definition: SPI.h:681
uint32_t bitRate
Definition: SPI.h:617
uint32_t dataSize
Definition: SPI.h:618
void SPI_transferCancel(SPI_Handle handle)
Function to cancel SPI transactions.
SPI_FxnTable const * fxnTablePtr
Definition: SPI.h:700
void SPI_Params_init(SPI_Params *params)
Function to initialize the SPI_Params struct to its defaults.
Definition: SPI.h:573
Definition: SPI.h:569
bool(* SPI_TransferFxn)(SPI_Handle handle, SPI_Transaction *transaction)
A function pointer to a driver specific implementation of SPI_transfer().
Definition: SPI.h:653
size_t count
Definition: SPI.h:537
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:594
SPI_TransferCancelFxn transferCancelFxn
Definition: SPI.h:684
void(* SPI_TransferCancelFxn)(SPI_Handle handle)
A function pointer to a driver specific implementation of SPI_transferCancel().
Definition: SPI.h:660
SPI_Status_
Status codes that are set by the SPI driver.
Definition: SPI.h:519
uint32_t transferTimeout
Definition: SPI.h:613
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:628
Definition: SPI.h:570
The definition of a SPI function table that contains the required set of functions to control a speci...
Definition: SPI.h:667
Definition: SPI.h:524
SPI Parameters.
Definition: SPI.h:611
SPI_Status status
Definition: SPI.h:543
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:538
Definition: SPI.h:520
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:698
SPI_OpenFxn openFxn
Definition: SPI.h:678
SPI_Mode_
Definitions for various SPI modes of operation.
Definition: SPI.h:559
void * custom
Definition: SPI.h:620
enum SPI_FrameFormat_ SPI_FrameFormat
Definitions for various SPI data frame formats.
Definition: SPI.h:561
void SPI_close(SPI_Handle handle)
Function to close a SPI peripheral specified by the SPI handle.
Definition: SPI.h:523
SPI_TransferMode transferMode
Definition: SPI.h:612
struct SPI_Config_ * SPI_Handle
A handle that is returned from a SPI_open() call.
Definition: SPI.h:514
SPI_Handle SPI_open(uint_least8_t index, SPI_Params *params)
This function opens a given SPI peripheral.
void * arg
Definition: SPI.h:540
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:634
void(* SPI_InitFxn)(SPI_Handle handle)
A function pointer to a driver specific implementation of SPI_init().
Definition: SPI.h:641
Definition: SPI.h:521
Definition: SPI.h:572
SPI_Handle(* SPI_OpenFxn)(SPI_Handle handle, SPI_Params *params)
A function pointer to a driver specific implementation of SPI_open().
Definition: SPI.h:647
Definition: SPI.h:522
SPI_FrameFormat frameFormat
Definition: SPI.h:619
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:615
Definition: SPI.h:571
SPI_TransferMode_
SPI transfer mode determines the whether the SPI controller operates synchronously or asynchronously...
Definition: SPI.h:589
void * object
Definition: SPI.h:703
Copyright 2017, Texas Instruments Incorporated