Astra MCU SDK Peripheral Driver Library
Loading...
Searching...
No Matches
i2s.h
1
18
19#ifndef I2S_DRIVER_H_
20#define I2S_DRIVER_H_
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#include <stdint.h>
27#include <stdbool.h>
28#include <stddef.h>
29#include "syna_device.h"
30#include "i2s_registers.h"
31#include "cache.h"
32#include "logger.h" /* To Remove Once SEC1 Vaidation is completed */
33#include "clk.h"
34
35/*******************************************************************************
36* Macro definitions
37*******************************************************************************/
38#define I2S_DMA_CHANNEL_INVALID (0xFFFFFFFFU)
39
40#ifndef I2S_TX_POOL_MAX_BLOCKS
41#define I2S_TX_POOL_MAX_BLOCKS 4U
42#endif
43
44#ifndef I2S_TX_POOL_BLOCK_BYTES
45#define I2S_TX_POOL_BLOCK_BYTES 8000U
46#endif
47
48/***************************************************************************/
452
453/*******************************************************************************
454* Enumerated Types
455*******************************************************************************/
456
481
495
508
519
527typedef enum {
531
547
561
576
588
601
605typedef enum {
606 I2S_SAMPLE_RATE_8000 = 8000U,
607 I2S_SAMPLE_RATE_11025 = 11025U,
608 I2S_SAMPLE_RATE_12000 = 12000U,
609 I2S_SAMPLE_RATE_16000 = 16000U,
610 I2S_SAMPLE_RATE_22050 = 22050U,
611 I2S_SAMPLE_RATE_24000 = 24000U,
612 I2S_SAMPLE_RATE_32000 = 32000U,
613 I2S_SAMPLE_RATE_44100 = 44100U,
614 I2S_SAMPLE_RATE_48000 = 48000U,
615 I2S_SAMPLE_RATE_64000 = 64000U,
616 I2S_SAMPLE_RATE_88200 = 88200U,
617 I2S_SAMPLE_RATE_96000 = 96000U,
618 I2S_SAMPLE_RATE_176400 = 176400U,
619 I2S_SAMPLE_RATE_192000 = 192000U,
620 I2S_SAMPLE_RATE_384000 = 384000U
622
626
627/*******************************************************************************
628* Type Definitions
629*******************************************************************************/
630
635
647
648
691
707
721typedef struct
722{
723 i2s_status_en (*init)(void *backend);
724 i2s_status_en (*submit)(void *backend, int channel, uint32_t addr, uint32_t size);
725 i2s_status_en (*wait_complete)(void *backend, int channel, int timeout_ms);
726 i2s_status_en (*clear)(void *backend, int channel);
727 int (*get_channel)(void *backend, bool is_tx);
728 int (*intr_status)(void *backend, int channel);
730
734
735/*******************************************************************************
736* Callback Types
737*******************************************************************************/
738
743
754typedef void (*i2s_event_cb_t)(i2s_instance_en instance, i2s_direction_en direction,\
755 i2s_event_en event, void *user_data);
756
769typedef void (*i2s_buffer_cb_t)(i2s_instance_en instance, i2s_direction_en direction,\
770 void *buffer, size_t size, void *user_data);
771
772/*******************************************************************************
773 * Function Prototypes
774 *******************************************************************************/
775
782/*******************************************************************************
783* Function Name: i2s_init
784****************************************************************************/
816
817/*******************************************************************************
818* Function Name: i2s_get_fifo_depth
819****************************************************************************/
849 uint32_t *depth);
850
851
852/*******************************************************************************
853* Function Name: i2s_set_fifo_depth
854****************************************************************************/
886 uint32_t depth_words);
887
888/*******************************************************************************
889* Function Name: i2s_deinit
890****************************************************************************/
916
917/*******************************************************************************
918* Function Name: i2s_intr_enable
919****************************************************************************/
949
950/*******************************************************************************
951* Function Name: i2s_get_config
952****************************************************************************/
982 i2s_config_t *config);
983
984/*******************************************************************************
985* Function Name: i2s_get_capabilities
986****************************************************************************/
1009
1010/*******************************************************************************
1011* Function Name: i2s_trigger
1012****************************************************************************/
1045 i2s_trigger_cmd_en cmd);
1046
1047/*******************************************************************************
1048* Function Name: i2s_register_callback
1049****************************************************************************/
1082 void *user_data);
1083
1084/*******************************************************************************
1085* Function Name: i2s_register_buffer_callback
1086****************************************************************************/
1120 void *user_data);
1121
1122/*******************************************************************************
1123* Function Name: i2s_config
1124****************************************************************************/
1167 const i2s_config_t *cfg);
1168
1169/*******************************************************************************
1170* Function Name: i2s_write_async
1171****************************************************************************/
1204i2s_status_en i2s_write_async(i2s_instance_en instance, const void *buffer, size_t size);
1205
1206/*******************************************************************************
1207* Function Name: i2s_read_async
1208****************************************************************************/
1239i2s_status_en i2s_read_async(i2s_instance_en instance, void *buffer, size_t size);
1240
1241/*******************************************************************************
1242* Function Name: i2s_get_state
1243****************************************************************************/
1278
1279/*******************************************************************************
1280* Function Name: i2s_flush
1281****************************************************************************/
1318
1319#if CONFIG_MODULE_DMA_ENABLED
1320/*******************************************************************************
1321* Function Name: i2s_set_dma_instance
1322****************************************************************************/
1349i2s_status_en i2s_set_dma_instance(i2s_instance_en id, dma_instance_en dma_instance);
1350
1351#endif
1352
1355
1356#ifdef __cplusplus
1357}
1358#endif
1359
1360#endif /* I2S_H_ */
dma_instance
Definition sl2610_cm52.h:423
i2s_instance_en
I2S instances for CM52.
Definition sl2610_cm52.h:523
i2s_word_size_caps_en
I2S word size capability flags.
Definition i2s.h:595
i2s_event_en
I2S event types.
Definition i2s.h:568
i2s_trigger_cmd_en
I2S trigger commands.
Definition i2s.h:554
i2s_word_size_en
I2S word size (bits per sample).
Definition i2s.h:582
i2s_state_en
I2S operational state.
Definition i2s.h:540
i2s_data_format_en
I2S Data Format selection.
Definition i2s.h:489
i2s_status_en
I2S return status codes.
Definition i2s.h:467
i2s_clock_mode_en
I2S Clock Mode selection.
Definition i2s.h:515
i2s_sample_rate_en
Supported sample Rates.
Definition i2s.h:605
i2s_direction_en
I2S transfer direction.
Definition i2s.h:527
i2s_data_format_caps_en
I2S data format capability flags.
Definition i2s.h:502
@ I2S_WORD_SIZE_CAP_32BIT
Definition i2s.h:599
@ I2S_WORD_SIZE_CAP_24BIT
Definition i2s.h:598
@ I2S_WORD_SIZE_CAP_16BIT
Definition i2s.h:597
@ I2S_WORD_SIZE_CAP_8BIT
Definition i2s.h:596
@ I2S_EVENT_TX_COMPLETE
Definition i2s.h:569
@ I2S_EVENT_ERROR
Definition i2s.h:574
@ I2S_EVENT_TX_UNDERRUN
Definition i2s.h:571
@ I2S_EVENT_RX_COMPLETE
Definition i2s.h:570
@ I2S_EVENT_RX_OVERRUN
Definition i2s.h:572
@ I2S_EVENT_FRAME_ERROR
Definition i2s.h:573
@ I2S_TRIGGER_PAUSE
Definition i2s.h:558
@ I2S_TRIGGER_STOP
Definition i2s.h:556
@ I2S_TRIGGER_RESUME
Definition i2s.h:559
@ I2S_TRIGGER_PREPARE
Definition i2s.h:557
@ I2S_TRIGGER_START
Definition i2s.h:555
@ I2S_WORD_SIZE_16BIT
Definition i2s.h:584
@ I2S_WORD_SIZE_8BIT
Definition i2s.h:583
@ I2S_WORD_SIZE_24BIT
Definition i2s.h:585
@ I2S_WORD_SIZE_32BIT
Definition i2s.h:586
@ I2S_STATE_ERROR
Definition i2s.h:545
@ I2S_STATE_NOT_READY
Definition i2s.h:541
@ I2S_STATE_STOPPING
Definition i2s.h:544
@ I2S_STATE_RUNNING
Definition i2s.h:543
@ I2S_STATE_READY
Definition i2s.h:542
@ I2S_FMT_LEFT_JUSTIFIED
Definition i2s.h:491
@ I2S_FMT_TDM
Definition i2s.h:493
@ I2S_FMT_STANDARD_I2S
Definition i2s.h:490
@ I2S_FMT_RIGHT_JUSTIFIED
Definition i2s.h:492
@ I2S_ERROR_HW_FAULT
Definition i2s.h:479
@ I2S_ERROR
Definition i2s.h:469
@ I2S_ERROR_NOT_SUPPORTED
Definition i2s.h:478
@ I2S_ERROR_INVALID_PARAM
Definition i2s.h:470
@ I2S_ERROR_NOT_READY
Definition i2s.h:471
@ I2S_ERROR_TIMEOUT
Definition i2s.h:473
@ I2S_ERROR_OVERRUN
Definition i2s.h:477
@ I2S_ERROR_INVALID_STATE
Definition i2s.h:475
@ I2S_ERROR_UNDERRUN
Definition i2s.h:476
@ I2S_OK
Definition i2s.h:468
@ I2S_ERROR_BUSY
Definition i2s.h:472
@ I2S_ERROR_NO_MEMORY
Definition i2s.h:474
@ I2S_MODE_MASTER
Definition i2s.h:516
@ I2S_MODE_SLAVE
Definition i2s.h:517
@ I2S_DIR_TX
Definition i2s.h:528
@ I2S_DIR_RX
Definition i2s.h:529
@ I2S_FMT_CAP_STANDARD_I2S
Definition i2s.h:503
@ I2S_FMT_CAP_TDM
Definition i2s.h:506
@ I2S_FMT_CAP_LEFT_JUSTIFIED
Definition i2s.h:504
@ I2S_FMT_CAP_RIGHT_JUSTIFIED
Definition i2s.h:505
i2s_status_en i2s_get_fifo_depth(i2s_instance_en instance, i2s_direction_en direction, uint32_t *depth)
i2s_status_en i2s_intr_enable(i2s_instance_en id, int enable)
i2s_status_en i2s_register_callback(i2s_instance_en instance, i2s_event_cb_t callback, void *user_data)
i2s_status_en i2s_write_async(i2s_instance_en instance, const void *buffer, size_t size)
i2s_state_en i2s_get_state(i2s_instance_en instance, i2s_direction_en direction)
i2s_status_en i2s_trigger(i2s_instance_en instance, i2s_direction_en direction, i2s_trigger_cmd_en cmd)
i2s_status_en i2s_configure(i2s_instance_en id, i2s_direction_en direction, const i2s_config_t *cfg)
Configure I2S (clock + bit clock + mode + format).
i2s_status_en i2s_flush(i2s_instance_en instance, i2s_direction_en direction)
i2s_status_en i2s_register_buffer_callback(i2s_instance_en instance, i2s_buffer_cb_t callback, void *user_data)
void(* i2s_buffer_cb_t)(i2s_instance_en instance, i2s_direction_en direction, void *buffer, size_t size, void *user_data)
I2S buffer completion callback function type.
Definition i2s.h:769
void(* i2s_event_cb_t)(i2s_instance_en instance, i2s_direction_en direction, i2s_event_en event, void *user_data)
I2S event callback function type.
Definition i2s.h:754
i2s_status_en i2s_deinit(i2s_instance_en instance)
i2s_status_en i2s_set_fifo_depth(i2s_instance_en instance, i2s_direction_en direction, uint32_t depth_words)
i2s_status_en i2s_get_config(i2s_instance_en instance, i2s_direction_en direction, i2s_config_t *config)
i2s_status_en i2s_read_async(i2s_instance_en instance, void *buffer, size_t size)
INIT_CODE i2s_status_en i2s_init(i2s_instance_en instance)
i2s_status_en i2s_get_capabilities(i2s_instance_en instance, i2s_capabilities_t *caps)
I2S capabilities structure.
Definition i2s.h:698
bool master_mode
Definition i2s.h:700
uint8_t max_channels
Definition i2s.h:702
uint32_t min_sample_rate
Definition i2s.h:703
i2s_word_size_caps_en word_sizes
Definition i2s.h:705
uint32_t max_sample_rate
Definition i2s.h:704
bool slave_mode
Definition i2s.h:701
uint32_t formats
Definition i2s.h:699
I2S clock configuration structure.
Definition i2s.h:642
bool bit_clk_inv
Definition i2s.h:644
bool bit_clk_gated
Definition i2s.h:643
bool frame_clk_inv
Definition i2s.h:645
I2S configuration structure.
Definition i2s.h:677
i2s_data_format_en data_format
Definition i2s.h:678
i2s_clock_mode_en clock_mode
Definition i2s.h:679
i2s_clock_mode_t clock_config
Definition i2s.h:683
uint8_t num_blocks
Definition i2s.h:688
uint32_t sample_rate
Definition i2s.h:682
size_t block_size
Definition i2s.h:687
uint8_t channels
Definition i2s.h:681
uint16_t mclk_ratio
Definition i2s.h:686
i2s_word_size_en word_size
Definition i2s.h:680
bool enable_dma
Definition i2s.h:689
bool mclk_present
Definition i2s.h:684
bool mclk_required
Definition i2s.h:685
I2S memory interface operations.
Definition i2s.h:722