ChibiOS/HAL  7.0.3
I2S Driver

Generic I2S Driver. More...

Collaboration diagram for I2S Driver:

Detailed Description

Generic I2S Driver.

This module implements a generic I2S driver.

Precondition
In order to use the I2S driver the HAL_USE_I2S option must be enabled in halconf.h.

Driver State Machine

Macros

#define i2s_lld_driver_fields
 Low level fields of the I2S driver structure. More...
 
#define i2s_lld_config_fields
 Low level fields of the I2S configuration structure. More...
 

I2S modes

#define I2S_MODE_SLAVE   0
 
#define I2S_MODE_MASTER   1
 

Macro Functions

#define i2sIsBufferComplete(i2sp)   ((bool)((i2sp)->state == I2S_COMPLETE))
 Buffer state. More...
 
#define i2sStartExchangeI(i2sp)
 Starts a I2S data exchange. More...
 
#define i2sStopExchangeI(i2sp)
 Stops the ongoing data exchange. More...
 
#define _i2s_isr_half_code(i2sp)
 Common ISR code, half buffer event. More...
 
#define _i2s_isr_full_code(i2sp)
 Common ISR code. More...
 

PLATFORM configuration options

#define PLATFORM_I2S_USE_I2S1   FALSE
 I2SD1 driver enable switch. More...
 

Typedefs

typedef struct hal_i2s_driver I2SDriver
 Type of a structure representing an I2S driver. More...
 
typedef struct hal_i2s_config I2SConfig
 Type of a structure representing an I2S driver configuration. More...
 
typedef void(* i2scallback_t) (I2SDriver *i2sp)
 I2S notification callback type. More...
 

Data Structures

struct  hal_i2s_driver
 Structure representing an I2S driver. More...
 
struct  hal_i2s_config
 Driver configuration structure. More...
 

Functions

void i2sInit (void)
 I2S Driver initialization. More...
 
void i2sObjectInit (I2SDriver *i2sp)
 Initializes the standard part of a I2SDriver structure. More...
 
void i2sStart (I2SDriver *i2sp, const I2SConfig *config)
 Configures and activates the I2S peripheral. More...
 
void i2sStop (I2SDriver *i2sp)
 Deactivates the I2S peripheral. More...
 
void i2sStartExchange (I2SDriver *i2sp)
 Starts a I2S data exchange. More...
 
void i2sStopExchange (I2SDriver *i2sp)
 Stops the ongoing data exchange. More...
 
void i2s_lld_init (void)
 Low level I2S driver initialization. More...
 
void i2s_lld_start (I2SDriver *i2sp)
 Configures and activates the I2S peripheral. More...
 
void i2s_lld_stop (I2SDriver *i2sp)
 Deactivates the I2S peripheral. More...
 
void i2s_lld_start_exchange (I2SDriver *i2sp)
 Starts a I2S data exchange. More...
 
void i2s_lld_stop_exchange (I2SDriver *i2sp)
 Stops the ongoing data exchange. More...
 

Enumerations

Variables

I2SDriver I2SD1
 I2S2 driver identifier. More...
 

Macro Definition Documentation

#define i2sIsBufferComplete (   i2sp)    ((bool)((i2sp)->state == I2S_COMPLETE))

Buffer state.

Note
This function is meant to be called from the SPI callback only.
Parameters
[in]i2sppointer to the I2SDriver object
Returns
The buffer state.
Return values
falseif the driver filled/sent the first half of the buffer.
trueif the driver filled/sent the second half of the buffer.
Function Class:Special function, this function has special requirements see the notes.

Definition at line 149 of file hal_i2s.h.

#define i2sStartExchangeI (   i2sp)
Value:
{ \
(i2sp)->state = I2S_ACTIVE; \
}
void i2s_lld_start_exchange(I2SDriver *i2sp)
Starts a I2S data exchange.
Definition: hal_i2s_lld.c:116

Starts a I2S data exchange.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 158 of file hal_i2s.h.

Referenced by i2sStartExchange().

#define i2sStopExchangeI (   i2sp)
Value:
{ \
(i2sp)->state = I2S_READY; \
}
void i2s_lld_stop_exchange(I2SDriver *i2sp)
Stops the ongoing data exchange.
Definition: hal_i2s_lld.c:130

Stops the ongoing data exchange.

The ongoing data exchange, if any, is stopped, if the driver was not active the function does nothing.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 172 of file hal_i2s.h.

Referenced by i2sStopExchange().

#define _i2s_isr_half_code (   i2sp)
Value:
{ \
if ((i2sp)->config->end_cb != NULL) { \
(i2sp)->config->end_cb(i2sp); \
} \
}

Common ISR code, half buffer event.

This code handles the portable part of the ISR code:

  • Callback invocation.
Note
This macro is meant to be used in the low level drivers implementation only.
Parameters
[in]i2sppointer to the I2CDriver object
Function Class:Not an API, this function is for internal use only.

Definition at line 189 of file hal_i2s.h.

#define _i2s_isr_full_code (   i2sp)
Value:
{ \
if ((i2sp)->config->end_cb) { \
(i2sp)->state = I2S_COMPLETE; \
(i2sp)->config->end_cb(i2sp); \
if ((i2sp)->state == I2S_COMPLETE) { \
(i2sp)->state = I2S_ACTIVE; \
} \
} \
}

Common ISR code.

This code handles the portable part of the ISR code:

  • Callback invocation.
  • Driver state transitions.
Note
This macro is meant to be used in the low level drivers implementation only.
Parameters
[in]i2sppointer to the I2CDriver object
Function Class:Not an API, this function is for internal use only.

Definition at line 208 of file hal_i2s.h.

#define PLATFORM_I2S_USE_I2S1   FALSE

I2SD1 driver enable switch.

If set to TRUE the support for I2S1 is included.

Note
The default is FALSE.

Definition at line 48 of file hal_i2s_lld.h.

#define i2s_lld_driver_fields
Value:
/* Dummy field, it is not needed.*/ \
uint32_t dummy

Low level fields of the I2S driver structure.

Definition at line 67 of file hal_i2s_lld.h.

#define i2s_lld_config_fields
Value:
/* Dummy configuration, it is not needed.*/ \
uint32_t dummy

Low level fields of the I2S configuration structure.

Definition at line 74 of file hal_i2s_lld.h.

Typedef Documentation

typedef struct hal_i2s_driver I2SDriver

Type of a structure representing an I2S driver.

Definition at line 68 of file hal_i2s.h.

typedef struct hal_i2s_config I2SConfig

Type of a structure representing an I2S driver configuration.

Definition at line 73 of file hal_i2s.h.

typedef void(* i2scallback_t) (I2SDriver *i2sp)

I2S notification callback type.

Parameters
[in]i2sppointer to the I2SDriver object

Definition at line 80 of file hal_i2s.h.

Enumeration Type Documentation

enum i2sstate_t

Driver state machine possible states.

Enumerator
I2S_UNINIT 

Not initialized.

I2S_STOP 

Stopped.

I2S_READY 

Ready.

I2S_ACTIVE 

Active.

I2S_COMPLETE 

Transmission complete.

Definition at line 57 of file hal_i2s.h.

Function Documentation

void i2sInit ( void  )

I2S Driver initialization.

Note
This function is implicitly invoked by halInit(), there is no need to explicitly initialize the driver.
Function Class:Initializer, this function just initializes an object and can be invoked before the kernel is initialized.

Definition at line 56 of file hal_i2s.c.

References i2s_lld_init().

Referenced by halInit().

Here is the call graph for this function:

void i2sObjectInit ( I2SDriver i2sp)

Initializes the standard part of a I2SDriver structure.

Parameters
[out]i2sppointer to the I2SDriver object
Function Class:Initializer, this function just initializes an object and can be invoked before the kernel is initialized.

Definition at line 68 of file hal_i2s.c.

References hal_i2s_driver::config, I2S_STOP, and hal_i2s_driver::state.

Referenced by i2s_lld_init().

void i2sStart ( I2SDriver i2sp,
const I2SConfig config 
)

Configures and activates the I2S peripheral.

Parameters
[in]i2sppointer to the I2SDriver object
[in]configpointer to the I2SConfig object
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 82 of file hal_i2s.c.

References hal_i2s_driver::config, i2s_lld_start(), I2S_READY, I2S_STOP, osalDbgAssert, osalDbgCheck, osalSysLock(), osalSysUnlock(), and hal_i2s_driver::state.

Here is the call graph for this function:

void i2sStop ( I2SDriver i2sp)

Deactivates the I2S peripheral.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 102 of file hal_i2s.c.

References hal_i2s_driver::config, i2s_lld_stop(), I2S_READY, I2S_STOP, osalDbgAssert, osalDbgCheck, osalSysLock(), osalSysUnlock(), and hal_i2s_driver::state.

Here is the call graph for this function:

void i2sStartExchange ( I2SDriver i2sp)

Starts a I2S data exchange.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 125 of file hal_i2s.c.

References I2S_READY, i2sStartExchangeI, osalDbgAssert, osalDbgCheck, osalSysLock(), osalSysUnlock(), and hal_i2s_driver::state.

Here is the call graph for this function:

void i2sStopExchange ( I2SDriver i2sp)

Stops the ongoing data exchange.

The ongoing data exchange, if any, is stopped, if the driver was not active the function does nothing.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 144 of file hal_i2s.c.

References I2S_ACTIVE, I2S_COMPLETE, I2S_READY, i2sStopExchangeI, osalDbgAssert, osalDbgCheck, osalSysLock(), osalSysUnlock(), and hal_i2s_driver::state.

Here is the call graph for this function:

void i2s_lld_init ( void  )

Low level I2S driver initialization.

Function Class:Not an API, this function is for internal use only.

Definition at line 63 of file hal_i2s_lld.c.

References i2sObjectInit().

Referenced by i2sInit().

Here is the call graph for this function:

void i2s_lld_start ( I2SDriver i2sp)

Configures and activates the I2S peripheral.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:Not an API, this function is for internal use only.

Definition at line 77 of file hal_i2s_lld.c.

References I2S_STOP, and hal_i2s_driver::state.

Referenced by i2sStart().

void i2s_lld_stop ( I2SDriver i2sp)

Deactivates the I2S peripheral.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:Not an API, this function is for internal use only.

Definition at line 97 of file hal_i2s_lld.c.

References I2S_READY, and hal_i2s_driver::state.

Referenced by i2sStop().

void i2s_lld_start_exchange ( I2SDriver i2sp)

Starts a I2S data exchange.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:Not an API, this function is for internal use only.

Definition at line 116 of file hal_i2s_lld.c.

void i2s_lld_stop_exchange ( I2SDriver i2sp)

Stops the ongoing data exchange.

The ongoing data exchange, if any, is stopped, if the driver was not active the function does nothing.

Parameters
[in]i2sppointer to the I2SDriver object
Function Class:Not an API, this function is for internal use only.

Definition at line 130 of file hal_i2s_lld.c.

Variable Documentation

I2SDriver I2SD1

I2S2 driver identifier.

Definition at line 39 of file hal_i2s_lld.c.