EFM32 Happy Gecko Software Documentation  efm32hg-doc-4.2.1

SPIDRV Serial Peripheral Interface module, see SPIDRV Serial Peripheral Interface driver page for detailed documentation.

. More...

Data Structures

struct  SPIDRV_Init
 
struct  SPIDRV_HandleData
 

Macros

#define ECODE_EMDRV_SPIDRV_OK   ( ECODE_OK )
 Success return value.
 
#define ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000001 )
 Illegal SPI handle.
 
#define ECODE_EMDRV_SPIDRV_PARAM_ERROR   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000002 )
 Illegal input parameter.
 
#define ECODE_EMDRV_SPIDRV_BUSY   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000003 )
 The SPI port is busy.
 
#define ECODE_EMDRV_SPIDRV_TIMER_ALLOC_ERROR   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000004 )
 Unable to allocated timeout timer.
 
#define ECODE_EMDRV_SPIDRV_TIMEOUT   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000005 )
 SPI transfer timeout.
 
#define ECODE_EMDRV_SPIDRV_IDLE   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000006 )
 No SPI transfer in progress.
 
#define ECODE_EMDRV_SPIDRV_ABORTED   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000007 )
 SPI transfer has been aborted.
 
#define ECODE_EMDRV_SPIDRV_MODE_ERROR   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000008 )
 SPI master used slave API or vica versa.
 
#define ECODE_EMDRV_SPIDRV_DMA_ALLOC_ERROR   ( ECODE_EMDRV_SPIDRV_BASE | 0x00000009 )
 Unable to allocated DMA channels.
 
#define SPIDRV_MASTER_USART0
 Configuration data for SPI master using USART0. More...
 
#define SPIDRV_MASTER_USART1
 Configuration data for SPI master using USART1. More...
 
#define SPIDRV_MASTER_USART2
 Configuration data for SPI master using USART2. More...
 
#define SPIDRV_MASTER_USARTRF0
 Configuration data for SPI master using USARTRF0. More...
 
#define SPIDRV_MASTER_USARTRF1
 Configuration data for SPI master using USARTRF1. More...
 
#define SPIDRV_SLAVE_USART0
 Configuration data for SPI slave using USART0. More...
 
#define SPIDRV_SLAVE_USART1
 Configuration data for SPI slave using USART1. More...
 
#define SPIDRV_SLAVE_USART2
 Configuration data for SPI slave using USART2. More...
 
#define SPIDRV_SLAVE_USARTRF0
 Configuration data for SPI slave using USARTRF0. More...
 

Typedefs

typedef enum SPIDRV_Type SPIDRV_Type_t
 SPI driver instance type.
 
typedef enum SPIDRV_BitOrder SPIDRV_BitOrder_t
 SPI bus bit order.
 
typedef enum SPIDRV_ClockMode SPIDRV_ClockMode_t
 SPI clock mode (clock polarity and phase).
 
typedef enum SPIDRV_CsControl SPIDRV_CsControl_t
 SPI master chip select (CS) control scheme.
 
typedef enum SPIDRV_SlaveStart SPIDRV_SlaveStart_t
 SPI slave transfer start scheme.
 
typedef void(* SPIDRV_Callback_t) (struct SPIDRV_HandleData *handle, Ecode_t transferStatus, int itemsTransferred)
 SPIDRV transfer completion callback function. More...
 
typedef struct SPIDRV_Init SPIDRV_Init_t
 
typedef struct SPIDRV_HandleData SPIDRV_HandleData_t
 
typedef SPIDRV_HandleData_tSPIDRV_Handle_t
 SPI driver instance handle.
 

Enumerations

enum  SPIDRV_Type {
  spidrvMaster = 0,
  spidrvSlave = 1
}
 SPI driver instance type. More...
 
enum  SPIDRV_BitOrder {
  spidrvBitOrderLsbFirst = 0,
  spidrvBitOrderMsbFirst = 1
}
 SPI bus bit order. More...
 
enum  SPIDRV_ClockMode {
  spidrvClockMode0 = 0,
  spidrvClockMode1 = 1,
  spidrvClockMode2 = 2,
  spidrvClockMode3 = 3
}
 SPI clock mode (clock polarity and phase). More...
 
enum  SPIDRV_CsControl {
  spidrvCsControlAuto = 0,
  spidrvCsControlApplication = 1
}
 SPI master chip select (CS) control scheme. More...
 
enum  SPIDRV_SlaveStart {
  spidrvSlaveStartImmediate = 0,
  spidrvSlaveStartDelayed = 1
}
 SPI slave transfer start scheme. More...
 

Functions

Ecode_t SPIDRV_AbortTransfer (SPIDRV_Handle_t handle)
 Abort an ongoing SPI transfer. More...
 
Ecode_t SPIDRV_DeInit (SPIDRV_Handle_t handle)
 Deinitialize a SPI driver instance. More...
 
Ecode_t SPIDRV_GetBitrate (SPIDRV_Handle_t handle, uint32_t *bitRate)
 Get current SPI bus bitrate. More...
 
Ecode_t SPIDRV_GetFramelength (SPIDRV_Handle_t handle, uint32_t *frameLength)
 Get current SPI framelength. More...
 
Ecode_t SPIDRV_GetTransferStatus (SPIDRV_Handle_t handle, int *itemsTransferred, int *itemsRemaining)
 Get the status of a SPI transfer. More...
 
Ecode_t SPIDRV_Init (SPIDRV_Handle_t handle, SPIDRV_Init_t *initData)
 Initialize a SPI driver instance. More...
 
Ecode_t SPIDRV_MReceive (SPIDRV_Handle_t handle, void *buffer, int count, SPIDRV_Callback_t callback)
 Start a SPI master receive transfer. More...
 
Ecode_t SPIDRV_MReceiveB (SPIDRV_Handle_t handle, void *buffer, int count)
 Start a SPI master blocking receive transfer. More...
 
Ecode_t SPIDRV_MTransfer (SPIDRV_Handle_t handle, const void *txBuffer, void *rxBuffer, int count, SPIDRV_Callback_t callback)
 Start a SPI master transfer. More...
 
Ecode_t SPIDRV_MTransferB (SPIDRV_Handle_t handle, const void *txBuffer, void *rxBuffer, int count)
 Start a SPI master blocking transfer. More...
 
Ecode_t SPIDRV_MTransferSingleItemB (SPIDRV_Handle_t handle, uint32_t txValue, void *rxValue)
 Start a SPI master blocking single item (frame) transfer. More...
 
Ecode_t SPIDRV_MTransmit (SPIDRV_Handle_t handle, const void *buffer, int count, SPIDRV_Callback_t callback)
 Start a SPI master transmit transfer. More...
 
Ecode_t SPIDRV_MTransmitB (SPIDRV_Handle_t handle, const void *buffer, int count)
 Start a SPI master blocking transmit transfer. More...
 
Ecode_t SPIDRV_SetBitrate (SPIDRV_Handle_t handle, uint32_t bitRate)
 Set SPI bus bitrate. More...
 
Ecode_t SPIDRV_SetFramelength (SPIDRV_Handle_t handle, uint32_t frameLength)
 Set SPI framelength. More...
 
Ecode_t SPIDRV_SReceive (SPIDRV_Handle_t handle, void *buffer, int count, SPIDRV_Callback_t callback, int timeoutMs)
 Start a SPI slave receive transfer. More...
 
Ecode_t SPIDRV_SReceiveB (SPIDRV_Handle_t handle, void *buffer, int count, int timeoutMs)
 Start a SPI slave blocking receive transfer. More...
 
Ecode_t SPIDRV_STransfer (SPIDRV_Handle_t handle, const void *txBuffer, void *rxBuffer, int count, SPIDRV_Callback_t callback, int timeoutMs)
 Start a SPI slave transfer. More...
 
Ecode_t SPIDRV_STransferB (SPIDRV_Handle_t handle, const void *txBuffer, void *rxBuffer, int count, int timeoutMs)
 Start a SPI slave blocking transfer. More...
 
Ecode_t SPIDRV_STransmit (SPIDRV_Handle_t handle, const void *buffer, int count, SPIDRV_Callback_t callback, int timeoutMs)
 Start a SPI slave transmit transfer. More...
 
Ecode_t SPIDRV_STransmitB (SPIDRV_Handle_t handle, const void *buffer, int count, int timeoutMs)
 Start a SPI slave blocking transmit transfer. More...
 

Detailed Description

SPIDRV Serial Peripheral Interface driver

The source files for the SPI driver library resides in the emdrv/spidrv folder, and are named spidrv.c and spidrv.h.


Introduction

The SPI driver support the SPI capabilities of EFM32/EZR32/EFR32 USARTs. The driver is fully reentrant and several driver instances can coexist. The driver does not buffer or queue data. The driver has SPI transfer functions for both master and slave SPI mode. Both synchronous and asynchronous transfer functions are present. Synchronous transfer functions are blocking and will not return to caller before the transfer has completed. Asynchronous transfer functions report transfer completion with callback functions. Transfers are done using DMA.

Note
Transfer completion callback functions are called from within the DMA interrupt handler with interrupts disabled.


Configuration Options

Some properties of the SPIDRV driver are compile-time configurable. These properties are stored in a file named spidrv_config.h. A template for this file, containing default values, resides in the emdrv/config folder. Currently the configuration options are:

  • Inclusion of slave API transfer functions.

To configure SPIDRV, provide your own configuration file. Here is a sample spidrv_config.h file:

#ifndef __SILICON_LABS_SPIDRV_CONFIG_H__
#define __SILICON_LABS_SPIDRV_CONFIG_H__

// SPIDRV configuration option. Use this define to include the
// slave part of the SPIDRV API.
#define EMDRV_SPIDRV_INCLUDE_SLAVE

#endif

The properties of each SPI driver instance are set at run-time via the SPIDRV_Init_t data structure input parameter to the SPIDRV_Init() function.


The API

This section contain brief descriptions of the functions in the API. You will find detailed information on input and output parameters and return values by clicking on the hyperlinked function names. Most functions return an error code, ECODE_EMDRV_SPIDRV_OK is returned on success, see ecode.h and spidrv.h for other error codes.

Your application code must include one header file: spidrv.h.

SPIDRV_Init(), SPIDRV_DeInit()
These functions initializes or deinitializes the SPIDRV driver. Typically SPIDRV_Init() is called once in your startup code.

SPIDRV_GetTransferStatus()
Query the status of a transfer. Reports number of items (frames) transmitted and remaining.

SPIDRV_AbortTransfer()
Stop an ongoing transfer.

SPIDRV_SetBitrate(), SPIDRV_GetBitrate()
Set or query SPI bus bitrate.

SPIDRV_SetFramelength(), SPIDRV_GetFramelength()
Set or query SPI bus frame length.

SPIDRV_MReceive(), SPIDRV_MReceiveB()
SPIDRV_MTransfer(), SPIDRV_MTransferB(), SPIDRV_MTransferSingleItemB()
SPIDRV_MTransmit(), SPIDRV_MTransmitB()
SPIDRV_SReceive(), SPIDRV_SReceiveB()
SPIDRV_STransfer(), SPIDRV_STransferB()
SPIDRV_STransmit(), SPIDRV_STransmitB()
SPI transfer functions for SPI masters have an uppercase M in their name, the slave counterparts have an S.

Transfer functions come in both synchronous and asynchronous versions, the synchronous versions have an uppercase B (for Blocking) at the end of their function name. Synchronous functions will not return before the transfer has completed. The aynchronous functions signal transfer completion with a callback function.

Transmit functions discards received data, receive functions transmit a fixed data pattern set when the driver is initialized (SPIDRV_Init_t::dummyTxValue). Transfer functions both receive and transmit data.

All slave transfer functions have a millisecond timeout parameter. Use 0 for no (infinite) timeout.


Example

#include "spidrv.h"

SPIDRV_HandleData_t handleData;
SPIDRV_Handle_t handle = &handleData;

void TransferComplete( SPIDRV_Handle_t handle,
                       Ecode_t transferStatus,
                       int itemsTransferred )
{
  if ( transferStatus == ECODE_EMDRV_SPIDRV_OK )
  {
    // Success !
  }
}

int main( void )
{
  uint8_t buffer[10];
  SPIDRV_Init_t initData = SPIDRV_MASTER_USART2;

  // Initialize a SPI driver instance
  SPIDRV_Init( handle, &initData );

  // Transmit data using a blocking transmit function
  SPIDRV_MTransmitB( handle, buffer, 10 );

  // Transmit data using a callback to catch transfer completion.
  SPIDRV_MTransmit( handle, buffer, 10, TransferComplete );
}

Macro Definition Documentation

#define SPIDRV_MASTER_USART0
Value:
{ \
USART0, /* USART port */ \
_USART_ROUTE_LOCATION_LOC1, /* USART pins location number */ \
1000000, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvMaster, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
#define _USART_ROUTE_LOCATION_LOC1
MSB bit is transmitted first.
Definition: spidrv.h:68
#define USART0
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83
Act as SPI master.
Definition: spidrv.h:60

Definition at line 327 of file spidrv.h.

#define SPIDRV_MASTER_USART1
Value:
{ \
USART1, /* USART port */ \
_USART_ROUTE_LOCATION_LOC1, /* USART pins location number */ \
1000000, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvMaster, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
#define USART1
#define _USART_ROUTE_LOCATION_LOC1
MSB bit is transmitted first.
Definition: spidrv.h:68
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83
Act as SPI master.
Definition: spidrv.h:60

Definition at line 342 of file spidrv.h.

Referenced by KSZ8851SNL_SPI_Init().

#define SPIDRV_MASTER_USART2
Value:
{ \
USART2, /* USART port */ \
_USART_ROUTE_LOCATION_LOC0, /* USART pins location number */ \
1000000, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvMaster, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
MSB bit is transmitted first.
Definition: spidrv.h:68
#define _USART_ROUTE_LOCATION_LOC0
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83
Act as SPI master.
Definition: spidrv.h:60

Definition at line 372 of file spidrv.h.

#define SPIDRV_MASTER_USARTRF0
Value:
{ \
USARTRF0, /* USART port */ \
RF_USARTRF_LOCATION, /* USART pins location number */ \
1000000, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvMaster, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
MSB bit is transmitted first.
Definition: spidrv.h:68
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83
Act as SPI master.
Definition: spidrv.h:60

Definition at line 388 of file spidrv.h.

#define SPIDRV_MASTER_USARTRF1
Value:
{ \
USARTRF1, /* USART port */ \
RF_USARTRF_LOCATION, /* USART pins location number */ \
1000000, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvMaster, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
MSB bit is transmitted first.
Definition: spidrv.h:68
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83
Act as SPI master.
Definition: spidrv.h:60

Definition at line 403 of file spidrv.h.

#define SPIDRV_SLAVE_USART0
Value:
{ \
USART0, /* USART port */ \
_USART_ROUTE_LOCATION_LOC1, /* USART pins location number */ \
0, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvSlave, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
Act as SPI slave.
Definition: spidrv.h:61
#define _USART_ROUTE_LOCATION_LOC1
MSB bit is transmitted first.
Definition: spidrv.h:68
#define USART0
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83

Definition at line 418 of file spidrv.h.

#define SPIDRV_SLAVE_USART1
Value:
{ \
USART1, /* USART port */ \
_USART_ROUTE_LOCATION_LOC1, /* USART pins location number */ \
0, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvSlave, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
Act as SPI slave.
Definition: spidrv.h:61
#define USART1
#define _USART_ROUTE_LOCATION_LOC1
MSB bit is transmitted first.
Definition: spidrv.h:68
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83

Definition at line 433 of file spidrv.h.

#define SPIDRV_SLAVE_USART2
Value:
{ \
USART2, /* USART port */ \
_USART_ROUTE_LOCATION_LOC0, /* USART pins location number */ \
0, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvSlave, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
Act as SPI slave.
Definition: spidrv.h:61
MSB bit is transmitted first.
Definition: spidrv.h:68
#define _USART_ROUTE_LOCATION_LOC0
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83

Definition at line 463 of file spidrv.h.

#define SPIDRV_SLAVE_USARTRF0
Value:
{ \
USARTRF0, /* USART port */ \
_USART_ROUTE_LOCATION_LOC1, /* USART pins location number */ \
0, /* Bitrate */ \
8, /* Frame length */ \
0, /* Dummy tx value for rx only funcs */ \
spidrvSlave, /* SPI mode */ \
spidrvBitOrderMsbFirst, /* Bit order on bus */ \
spidrvClockMode0, /* SPI clock/phase mode */ \
spidrvCsControlAuto, /* CS controlled by the driver */ \
spidrvSlaveStartImmediate /* Slave start transfers immediately*/ \
}
Act as SPI slave.
Definition: spidrv.h:61
#define _USART_ROUTE_LOCATION_LOC1
MSB bit is transmitted first.
Definition: spidrv.h:68
SPI mode 0: CLKPOL=0, CLKPHA=0.
Definition: spidrv.h:74
CS controlled by SPI driver.
Definition: spidrv.h:83

Definition at line 479 of file spidrv.h.

Typedef Documentation

typedef void(* SPIDRV_Callback_t) (struct SPIDRV_HandleData *handle, Ecode_t transferStatus, int itemsTransferred)

The callback function is called when a transfer has completed. An application should check the transferStatus and itemsTransferred values.

Parameters
[in]handleThe SPIDRV device handle used to start the transfer.
[in]transferStatusNumber of bytes actually transferred.
[in]itemsTransferredNumber of bytes transferred.
Returns
ECODE_EMDRV_SPIDRV_OK on success, ECODE_EMDRV_SPIDRV_TIMEOUT on timeout. Timeouts are only relevant for slave mode transfers.

Definition at line 117 of file spidrv.h.

typedef struct SPIDRV_Init SPIDRV_Init_t

SPI driver instance initialization structure. This data structure contains a number of SPIDRV configuration options. This struct is passed to SPIDRV_Init() when initializing a SPIDRV instance. Some common initialization data sets are predefined in SPIDRV_MASTER_USART0 and friends.

SPI driver instance handle data structure. The handle is allocated by the application using SPIDRV. There may be several concurrent driver instances in an application. The application is not supposed to neither write nor read the contents of the handle.

Enumeration Type Documentation

Enumerator
spidrvMaster 

Act as SPI master.

spidrvSlave 

Act as SPI slave.

Definition at line 58 of file spidrv.h.

Enumerator
spidrvBitOrderLsbFirst 

LSB bit is transmitted first.

spidrvBitOrderMsbFirst 

MSB bit is transmitted first.

Definition at line 65 of file spidrv.h.

Enumerator
spidrvClockMode0 

SPI mode 0: CLKPOL=0, CLKPHA=0.

spidrvClockMode1 

SPI mode 1: CLKPOL=0, CLKPHA=1.

spidrvClockMode2 

SPI mode 2: CLKPOL=1, CLKPHA=0.

spidrvClockMode3 

SPI mode 3: CLKPOL=1, CLKPHA=1.

Definition at line 72 of file spidrv.h.

Enumerator
spidrvCsControlAuto 

CS controlled by SPI driver.

spidrvCsControlApplication 

CS controlled by application.

Definition at line 81 of file spidrv.h.

Enumerator
spidrvSlaveStartImmediate 

Transfer is started immediately.

spidrvSlaveStartDelayed 

Transfer is started when bus is idle (CS deasserted).

Definition at line 88 of file spidrv.h.

Function Documentation

Ecode_t SPIDRV_AbortTransfer ( SPIDRV_Handle_t  handle)
Parameters
[in]handlePointer to a SPI driver handle.
Returns
ECODE_EMDRV_SPIDRV_OK on success, ECODE_EMDRV_SPIDRV_IDLE if SPI is idle. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 353 of file spidrv.c.

References DMADRV_StopTransfer(), DMADRV_TransferRemainingCount(), ECODE_EMDRV_SPIDRV_ABORTED, ECODE_EMDRV_SPIDRV_IDLE, ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, INT_Disable(), INT_Enable(), RTCDRV_StopTimer(), and spidrvSlave.

Ecode_t SPIDRV_DeInit ( SPIDRV_Handle_t  handle)
Parameters
[in]handlePointer to a SPI driver handle.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 312 of file spidrv.c.

References CMU_ClockEnable(), DMADRV_DeInit(), DMADRV_FreeChannel(), DMADRV_StopTransfer(), ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, RTCDRV_FreeTimer(), RTCDRV_StopTimer(), spidrvSlave, and USART_Reset().

Ecode_t SPIDRV_GetBitrate ( SPIDRV_Handle_t  handle,
uint32_t *  bitRate 
)
Parameters
[in]handlePointer to a SPI driver handle.
[out]bitRateCurrent SPI bus bitrate.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 406 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, and USART_BaudrateGet().

Ecode_t SPIDRV_GetFramelength ( SPIDRV_Handle_t  handle,
uint32_t *  frameLength 
)
Parameters
[in]handlePointer to a SPI driver handle.
[out]frameLengthCurrent SPI bus framelength.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 435 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, and ECODE_EMDRV_SPIDRV_PARAM_ERROR.

Ecode_t SPIDRV_GetTransferStatus ( SPIDRV_Handle_t  handle,
int *  itemsTransferred,
int *  itemsRemaining 
)

Returns status of an ongoing transfer. If no transfer is in progress the status of the last transfer is reported.

Parameters
[in]handlePointer to a SPI driver handle.
[out]itemsTransferredNumber of items (frames) transferred.
[out]itemsRemainingNumber of items (frames) remaining.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 470 of file spidrv.c.

References DMADRV_TransferRemainingCount(), ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, INT_Disable(), and INT_Enable().

Ecode_t SPIDRV_Init ( SPIDRV_Handle_t  handle,
SPIDRV_Init_t initData 
)
Parameters
[out]handlePointer to a SPI driver handle, refer to SPIDRV_Handle_t.
[in]initDataPointer to an initialization data structure, refer to SPIDRV_Init_t.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 91 of file spidrv.c.

References _USART_ROUTE_LOCATION_SHIFT, USART_InitSync_TypeDef::baudrate, SPIDRV_Init::bitOrder, SPIDRV_Init::bitRate, SPIDRV_Init::clockMode, USART_InitSync_TypeDef::clockMode, CMU_ClockEnable(), cmuClock_GPIO, cmuClock_HFPER, cmuClock_USART0, cmuClock_USART1, SPIDRV_Init::csControl, USART_TypeDef::CTRL, DMADRV_AllocateChannel(), DMADRV_Init(), dmadrvPeripheralSignal_USART0_RXDATAV, dmadrvPeripheralSignal_USART0_TXBL, dmadrvPeripheralSignal_USART1_RXDATAV, dmadrvPeripheralSignal_USART1_TXBL, ECODE_EMDRV_DMADRV_OK, ECODE_EMDRV_RTCDRV_OK, ECODE_EMDRV_SPIDRV_DMA_ALLOC_ERROR, ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, ECODE_EMDRV_SPIDRV_TIMER_ALLOC_ERROR, INT_Disable(), INT_Enable(), USART_InitSync_TypeDef::master, USART_InitSync_TypeDef::msbf, SPIDRV_Init::port, SPIDRV_Init::portLocation, USART_TypeDef::ROUTE, RTCDRV_AllocateTimer(), RTCDRV_Init(), spidrvBitOrderMsbFirst, spidrvClockMode0, spidrvClockMode1, spidrvClockMode2, spidrvClockMode3, spidrvCsControlAuto, spidrvMaster, spidrvSlave, SPIDRV_Init::type, USART0, USART1, USART_CTRL_AUTOCS, USART_InitSync(), USART_INITSYNC_DEFAULT, USART_ROUTE_CLKPEN, USART_ROUTE_CSPEN, USART_ROUTE_RXPEN, USART_ROUTE_TXPEN, usartClockMode0, usartClockMode1, usartClockMode2, and usartClockMode3.

Referenced by ezradio_hal_SpiInit(), and KSZ8851SNL_SPI_Init().

Ecode_t SPIDRV_MReceive ( SPIDRV_Handle_t  handle,
void *  buffer,
int  count,
SPIDRV_Callback_t  callback 
)
Note
The MOSI wire will transmit SPIDRV_Init_t::dummyTxValue.
Parameters
[in]handlePointer to a SPI driver handle.
[out]bufferReceive data buffer.
[in]countNumber of bytes in transfer.
[in]callbackTransfer completion callback.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 522 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, and spidrvSlave.

Ecode_t SPIDRV_MReceiveB ( SPIDRV_Handle_t  handle,
void *  buffer,
int  count 
)
Note
The MOSI wire will transmit SPIDRV_Init_t::dummyTxValue.
This function is blocking and returns when the transfer has completed, or when SPIDRV_AbortTransfer() is called.
Parameters
[in]handlePointer to a SPI driver handle.
[out]bufferReceive data buffer.
[in]countNumber of bytes in transfer.
Returns
ECODE_EMDRV_SPIDRV_OK on success or ECODE_EMDRV_SPIDRV_ABORTED if SPIDRV_AbortTransfer() has been called. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 565 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, and spidrvSlave.

Referenced by ezradio_hal_SpiReadByte(), ezradio_hal_SpiReadData(), and KSZ8851SNL_SPI_Receive().

Ecode_t SPIDRV_MTransfer ( SPIDRV_Handle_t  handle,
const void *  txBuffer,
void *  rxBuffer,
int  count,
SPIDRV_Callback_t  callback 
)
Parameters
[in]handlePointer to a SPI driver handle.
[in]txBufferTransmit data buffer.
[out]rxBufferReceive data buffer.
[in]countNumber of bytes in transfer.
[in]callbackTransfer completion callback.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 607 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, and spidrvSlave.

Ecode_t SPIDRV_MTransferB ( SPIDRV_Handle_t  handle,
const void *  txBuffer,
void *  rxBuffer,
int  count 
)
Note
This function is blocking and returns when the transfer has completed, or when SPIDRV_AbortTransfer() is called.
Parameters
[in]handlePointer to a SPI driver handle.
[in]txBufferTransmit data buffer.
[out]rxBufferReceive data buffer.
[in]countNumber of bytes in transfer.
Returns
ECODE_EMDRV_SPIDRV_OK on success or ECODE_EMDRV_SPIDRV_ABORTED if SPIDRV_AbortTransfer() has been called. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 657 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, and spidrvSlave.

Referenced by KSZ8851SNL_SPI_ReadRegister().

Ecode_t SPIDRV_MTransferSingleItemB ( SPIDRV_Handle_t  handle,
uint32_t  txValue,
void *  rxValue 
)
Note
This function is blocking and returns when the transfer has completed, or when SPIDRV_AbortTransfer() is called.
Parameters
[in]handlePointer to a SPI driver handle.
[in]txValueValue to transmit.
[out]rxValueValue received.
Returns
ECODE_EMDRV_SPIDRV_OK on success or ECODE_EMDRV_SPIDRV_ABORTED if SPIDRV_AbortTransfer() has been called. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 706 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_BUSY, ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_MODE_ERROR, INT_Disable(), INT_Enable(), rxBuffer, and spidrvSlave.

Ecode_t SPIDRV_MTransmit ( SPIDRV_Handle_t  handle,
const void *  buffer,
int  count,
SPIDRV_Callback_t  callback 
)
Note
The data received on the MISO wire is discarded.
Parameters
[in]handlePointer to a SPI driver handle.
[in]bufferTransmit data buffer.
[in]countNumber of bytes in transfer.
[in]callbackTransfer completion callback.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 763 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, and spidrvSlave.

Ecode_t SPIDRV_MTransmitB ( SPIDRV_Handle_t  handle,
const void *  buffer,
int  count 
)
Note
The data received on the MISO wire is discarded.
This function is blocking and returns when the transfer is completed.
Parameters
[in]handlePointer to a SPI driver handle.
[in]bufferTransmit data buffer.
[in]countNumber of bytes in transfer.
Returns
ECODE_EMDRV_SPIDRV_OK on success or ECODE_EMDRV_SPIDRV_ABORTED if SPIDRV_AbortTransfer() has been called. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 805 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, and spidrvSlave.

Referenced by ezradio_hal_SpiWriteByte(), ezradio_hal_SpiWriteData(), and KSZ8851SNL_SPI_Transmit().

Ecode_t SPIDRV_SetBitrate ( SPIDRV_Handle_t  handle,
uint32_t  bitRate 
)
Parameters
[in]handlePointer to a SPI driver handle.
[in]bitRateNew SPI bus bitrate.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 841 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_BUSY, ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, INT_Disable(), INT_Enable(), and USART_BaudrateSyncSet().

Ecode_t SPIDRV_SetFramelength ( SPIDRV_Handle_t  handle,
uint32_t  frameLength 
)
Parameters
[in]handlePointer to a SPI driver handle.
[in]frameLengthNew SPI bus framelength.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 874 of file spidrv.c.

References _USART_FRAME_DATABITS_FOUR, _USART_FRAME_DATABITS_MASK, _USART_FRAME_DATABITS_SHIFT, _USART_FRAME_DATABITS_SIXTEEN, ECODE_EMDRV_SPIDRV_BUSY, ECODE_EMDRV_SPIDRV_ILLEGAL_HANDLE, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, INT_Disable(), and INT_Enable().

Ecode_t SPIDRV_SReceive ( SPIDRV_Handle_t  handle,
void *  buffer,
int  count,
SPIDRV_Callback_t  callback,
int  timeoutMs 
)
Note
The MISO wire will transmit SPIDRV_Init_t::dummyTxValue.
Parameters
[in]handlePointer to a SPI driver handle.
[out]bufferReceive data buffer.
[in]countNumber of bytes in transfer.
[in]callbackTransfer completion callback.
[in]timeoutMsTransfer timeout in milliseconds.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 927 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, RTCDRV_StartTimer(), rtcdrvTimerTypeOneshot, spidrvMaster, and spidrvSlaveStartDelayed.

Ecode_t SPIDRV_SReceiveB ( SPIDRV_Handle_t  handle,
void *  buffer,
int  count,
int  timeoutMs 
)
Note
The MISO wire will transmit SPIDRV_Init_t::dummyTxValue.
This function is blocking and returns when the transfer has completed, or on timeout or when SPIDRV_AbortTransfer() is called.
Parameters
[in]handlePointer to a SPI driver handle.
[out]bufferReceive data buffer.
[in]countNumber of bytes in transfer.
[in]timeoutMsTransfer timeout in milliseconds.
Returns
ECODE_EMDRV_SPIDRV_OK on success, ECODE_EMDRV_SPIDRV_TIMEOUT on timeout or ECODE_EMDRV_SPIDRV_ABORTED if SPIDRV_AbortTransfer() has been called. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 991 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, RTCDRV_StartTimer(), rtcdrvTimerTypeOneshot, spidrvMaster, and spidrvSlaveStartDelayed.

Ecode_t SPIDRV_STransfer ( SPIDRV_Handle_t  handle,
const void *  txBuffer,
void *  rxBuffer,
int  count,
SPIDRV_Callback_t  callback,
int  timeoutMs 
)
Parameters
[in]handlePointer to a SPI driver handle.
[in]txBufferTransmit data buffer.
[out]rxBufferReceive data buffer.
[in]countNumber of bytes in transfer.
[in]callbackTransfer completion callback.
[in]timeoutMsTransfer timeout in milliseconds.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 1053 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, RTCDRV_StartTimer(), rtcdrvTimerTypeOneshot, spidrvMaster, and spidrvSlaveStartDelayed.

Ecode_t SPIDRV_STransferB ( SPIDRV_Handle_t  handle,
const void *  txBuffer,
void *  rxBuffer,
int  count,
int  timeoutMs 
)
Note

This function is blocking and returns when the transfer has completed, or on timeout or when SPIDRV_AbortTransfer() is called.
Parameters
[in]handlePointer to a SPI driver handle.
[in]txBufferTransmit data buffer.
[out]rxBufferReceive data buffer.
[in]countNumber of bytes in transfer.
[in]timeoutMsTransfer timeout in milliseconds.
Returns
ECODE_EMDRV_SPIDRV_OK on success, ECODE_EMDRV_SPIDRV_TIMEOUT on timeout or ECODE_EMDRV_SPIDRV_ABORTED if SPIDRV_AbortTransfer() has been called. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 1124 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, ECODE_EMDRV_SPIDRV_PARAM_ERROR, RTCDRV_StartTimer(), rtcdrvTimerTypeOneshot, spidrvMaster, and spidrvSlaveStartDelayed.

Ecode_t SPIDRV_STransmit ( SPIDRV_Handle_t  handle,
const void *  buffer,
int  count,
SPIDRV_Callback_t  callback,
int  timeoutMs 
)
Note
The data received on the MOSI wire is discarded.
Parameters
[in]handlePointer to a SPI driver handle.
[in]bufferTransmit data buffer.
[in]countNumber of bytes in transfer.
[in]callbackTransfer completion callback.
[in]timeoutMsTransfer timeout in milliseconds.
Returns
ECODE_EMDRV_SPIDRV_OK on success. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 1193 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, RTCDRV_StartTimer(), rtcdrvTimerTypeOneshot, spidrvMaster, and spidrvSlaveStartDelayed.

Ecode_t SPIDRV_STransmitB ( SPIDRV_Handle_t  handle,
const void *  buffer,
int  count,
int  timeoutMs 
)
Note
The data received on the MOSI wire is discarded.
This function is blocking and returns when the transfer has completed, or on timeout or when SPIDRV_AbortTransfer() is called.
Parameters
[in]handlePointer to a SPI driver handle.
[in]bufferTransmit data buffer.
[in]countNumber of bytes in transfer.
[in]timeoutMsTransfer timeout in milliseconds.
Returns
ECODE_EMDRV_SPIDRV_OK on success, ECODE_EMDRV_SPIDRV_TIMEOUT on timeout or ECODE_EMDRV_SPIDRV_ABORTED if SPIDRV_AbortTransfer() has been called. On failure an appropriate SPIDRV Ecode_t is returned.

Definition at line 1257 of file spidrv.c.

References ECODE_EMDRV_SPIDRV_MODE_ERROR, ECODE_EMDRV_SPIDRV_OK, RTCDRV_StartTimer(), rtcdrvTimerTypeOneshot, spidrvMaster, and spidrvSlaveStartDelayed.