ChibiOS/HAL  6.1.0
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

I2S modes

#define I2S_MODE_SLAVE   0
 
#define I2S_MODE_MASTER   1
 

Macro Functions

#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 I2SDriver I2SDriver
 Type of a structure representing an I2S driver. More...
 
typedef void(* i2scallback_t) (I2SDriver *i2sp, size_t offset, size_t n)
 I2S notification callback type. More...
 

Data Structures

struct  I2SConfig
 Driver configuration structure. More...
 
struct  I2SDriver
 Structure representing an I2S driver. 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 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 82 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 96 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, 0, (i2sp)->config->size / 2); \
} \
}

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 113 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, \
(i2sp)->config->size / 2, \
(i2sp)->config->size / 2); \
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 132 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.

Typedef Documentation

typedef struct I2SDriver I2SDriver

Type of a structure representing an I2S driver.

Definition at line 63 of file hal_i2s_lld.h.

typedef void(* i2scallback_t) (I2SDriver *i2sp, size_t offset, size_t n)

I2S notification callback type.

Parameters
[in]i2sppointer to the I2SDriver object
[in]offsetoffset in buffers of the data to read/write
[in]nnumber of samples to read/write

Definition at line 72 of file hal_i2s_lld.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 I2SDriver::config, I2S_STOP, and I2SDriver::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 I2SDriver::config, i2s_lld_start(), I2S_READY, I2S_STOP, osalDbgAssert, osalDbgCheck, osalSysLock(), osalSysUnlock(), and I2SDriver::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 I2SDriver::config, i2s_lld_stop(), I2S_READY, I2S_STOP, osalDbgAssert, osalDbgCheck, osalSysLock(), osalSysUnlock(), and I2SDriver::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 I2SDriver::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 I2SDriver::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 I2SDriver::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 I2SDriver::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.