HPM SDK
HPMicro Software Development Kit
hpm_i2s_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_I2S_DRV_H
9 #define HPM_I2S_DRV_H
10 #include "hpm_common.h"
11 #include "hpm_soc_feature.h"
12 #include "hpm_i2s_regs.h"
13 #include "hpm_i2s_common.h"
14 
22 typedef enum {
29 
33 typedef struct i2s_config {
48 
52 typedef struct i2s_transfer_config {
53  uint32_t sample_rate;
56  uint8_t channel_length; /* 16-bit or 32-bit */
57  uint8_t audio_depth; /* 16-bit, 24-bit, 32-bit */
59  uint8_t protocol;
63 
68  uint32_t sample_rate;
71  uint8_t channel_length; /* 16-bit or 32-bit */
72  uint8_t audio_depth; /* 16-bit, 24-bit, 32-bit */
74  uint8_t protocol;
75  bool tx_data_line_en[4];
76  bool rx_data_line_en[4];
77  uint32_t tx_channel_slot_mask[4];
78  uint32_t rx_channel_slot_mask[4];
80 
81 typedef enum {
84  i2s_fifo_error_irq_mask = I2S_CTRL_ERRIE_MASK, /*<! rx fifo overrun, tx fifo underrun */
86 
87 typedef enum {
88  i2s_data_line_rx_fifo_avail = 1U, /*<! data avail */
89  i2s_data_line_tx_fifo_avail = 2U, /*<! fifo empty avail */
93 
94 #ifdef __cplusplus
95 extern "C" {
96 #endif
97 
103 static inline void i2s_enable_tdm(I2S_Type *ptr)
104 {
105  ptr->CFGR |= I2S_CFGR_TDM_EN_MASK;
106 }
107 
113 static inline void i2s_disable_tdm(I2S_Type *ptr)
114 {
115  ptr->CFGR &= ~I2S_CFGR_TDM_EN_MASK;
116 }
117 
124 static inline void i2s_update_rx_fifo_threshold(I2S_Type *ptr, uint8_t threshold)
125 {
127  | I2S_FIFO_THRESH_RX_SET(threshold);
128 }
129 
136 static inline void i2s_update_tx_fifo_threshold(I2S_Type *ptr, uint8_t threshold)
137 {
139  | I2S_FIFO_THRESH_TX_SET(threshold);
140 }
141 
147 static inline void i2s_ungate_bclk(I2S_Type *ptr)
148 {
150 }
151 
157 static inline void i2s_gate_bclk(I2S_Type *ptr)
158 {
160 }
161 
167 static inline void i2s_ungate_mclk(I2S_Type *ptr)
168 {
170 }
171 
177 static inline void i2s_gate_mclk(I2S_Type *ptr)
178 {
180 }
181 
187 static inline void i2s_enable_tx_dma_request(I2S_Type *ptr)
188 {
190 }
191 
197 static inline void i2s_disable_tx_dma_request(I2S_Type *ptr)
198 {
199  ptr->CTRL &= ~I2S_CTRL_TX_DMA_EN_MASK;
200 }
201 
207 static inline void i2s_enable_rx_dma_request(I2S_Type *ptr)
208 {
210 }
211 
217 static inline void i2s_disable_rx_dma_request(I2S_Type *ptr)
218 {
219  ptr->CTRL &= ~I2S_CTRL_RX_DMA_EN_MASK;
220 }
221 
228 static inline void i2s_enable_irq(I2S_Type *ptr, uint32_t mask)
229 {
230  ptr->CTRL |= mask;
231 }
232 
239 static inline void i2s_disable_irq(I2S_Type *ptr, uint32_t mask)
240 {
241  ptr->CTRL &= ~mask;
242 }
243 
251 static inline void i2s_enable(I2S_Type *ptr)
252 {
253  ptr->CTRL |= I2S_CTRL_I2S_EN_MASK;
254 }
255 
263 static inline void i2s_disable(I2S_Type *ptr)
264 {
265  ptr->CTRL &= ~I2S_CTRL_I2S_EN_MASK;
266 }
267 
273 static inline void i2s_start(I2S_Type *ptr)
274 {
275  ptr->CTRL |= I2S_CTRL_I2S_EN_MASK;
276 }
277 
283 static inline void i2s_stop(I2S_Type *ptr)
284 {
285  ptr->CTRL &= ~I2S_CTRL_I2S_EN_MASK;
286 }
287 
294 static inline void i2s_enable_rx(I2S_Type *ptr, uint8_t rx_mask)
295 {
296  ptr->CTRL |= I2S_CTRL_RX_EN_SET(rx_mask);
297 }
298 
305 static inline void i2s_disable_rx(I2S_Type *ptr, uint8_t rx_mask)
306 {
307  ptr->CTRL &= ~I2S_CTRL_RX_EN_SET(rx_mask);
308 }
309 
316 static inline void i2s_enable_rx_line(I2S_Type *ptr, i2s_line_num_t line)
317 {
318  ptr->CTRL |= I2S_CTRL_RX_EN_SET(1u << line);
319 }
320 
327 static inline void i2s_disable_rx_line(I2S_Type *ptr, i2s_line_num_t line)
328 {
329  ptr->CTRL &= ~I2S_CTRL_RX_EN_SET(1u << line);
330 }
331 
338 static inline void i2s_enable_tx(I2S_Type *ptr, uint8_t tx_mask)
339 {
340  ptr->CTRL |= I2S_CTRL_TX_EN_SET(tx_mask);
341 }
342 
349 static inline void i2s_disable_tx(I2S_Type *ptr, uint8_t tx_mask)
350 {
351  ptr->CTRL &= ~I2S_CTRL_TX_EN_SET(tx_mask);
352 }
353 
360 static inline void i2s_enable_tx_line(I2S_Type *ptr, i2s_line_num_t line)
361 {
362  ptr->CTRL |= I2S_CTRL_TX_EN_SET(1u << line);
363 }
364 
371 static inline void i2s_disable_tx_line(I2S_Type *ptr, i2s_line_num_t line)
372 {
373  ptr->CTRL &= ~I2S_CTRL_TX_EN_SET(1u << line);
374 }
375 
383 static inline void i2s_set_txd_slot(I2S_Type *ptr, i2s_line_num_t line, uint32_t slot_mask)
384 {
385  ptr->TXDSLOT[line] = slot_mask;
386 }
387 
395 static inline void i2s_set_rxd_slot(I2S_Type *ptr, i2s_line_num_t line, uint32_t slot_mask)
396 {
397  ptr->RXDSLOT[line] = slot_mask;
398 }
399 
405 static inline void i2s_reset_clock_gen(I2S_Type *ptr)
406 {
409 }
410 
419 static inline void i2s_reset_tx(I2S_Type *ptr)
420 {
421  /* disable I2S */
422  ptr->CTRL &= ~I2S_CTRL_I2S_EN_MASK;
423 
424  /* reset tx and clear fifo */
427 }
428 
437 static inline void i2s_reset_rx(I2S_Type *ptr)
438 {
439  /* disable I2S */
440  ptr->CTRL &= ~I2S_CTRL_I2S_EN_MASK;
441 
442  /* reset rx and clear fifo */
445 }
446 
455 static inline void i2s_reset_tx_rx(I2S_Type *ptr)
456 {
457  /* disable I2S */
458  ptr->CTRL &= ~I2S_CTRL_I2S_EN_MASK;
459 
460  /* reset tx/rx and clear fifo */
463 }
464 
474 void i2s_reset_all(I2S_Type *ptr);
475 
483 static inline uint32_t i2s_get_tx_fifo_level(I2S_Type *ptr)
484 {
485  return ptr->TFIFO_FILLINGS;
486 }
487 
496 static inline uint32_t i2s_get_tx_line_fifo_level(I2S_Type *ptr, i2s_line_num_t line)
497 {
498  return (i2s_get_tx_fifo_level(ptr) & (0xFF << (line << 3))) >> (line << 3);
499 }
500 
508 static inline uint32_t i2s_get_rx_fifo_level(I2S_Type *ptr)
509 {
510  return ptr->RFIFO_FILLINGS;
511 }
512 
521 static inline uint32_t i2s_get_rx_line_fifo_level(I2S_Type *ptr, i2s_line_num_t line)
522 {
523  return (i2s_get_rx_fifo_level(ptr) & (0xFF << (line << 3))) >> (line << 3);
524 }
525 
537 static inline uint32_t i2s_check_data_line_status(I2S_Type *ptr, i2s_line_num_t line)
538 {
539  volatile uint32_t reg_val = ptr->STA;
540  uint32_t bit_mask;
541  uint32_t stat = 0;
542 
543  bit_mask = 1 << (I2S_STA_RX_DA_SHIFT + line);
544  if ((bit_mask & reg_val) != 0) {
546  }
547 
548  bit_mask = 1 << (I2S_STA_TX_DN_SHIFT + line);
549  if ((bit_mask & reg_val) != 0) {
551  }
552 
553  bit_mask = 1 << (I2S_STA_RX_OV_SHIFT + line);
554  if ((bit_mask & reg_val) != 0) {
556  ptr->STA = bit_mask; /* clear flag: W1C*/
557  }
558 
559  bit_mask = 1 << (I2S_STA_TX_UD_SHIFT + line);
560  if ((bit_mask & reg_val) != 0) {
562  ptr->STA = bit_mask; /* clear flag: W1C*/
563  }
564 
565  return stat;
566 }
567 
575 static inline uint32_t i2s_get_irq_status(I2S_Type *ptr)
576 {
577  return ptr->STA;
578 }
579 
586 static inline void i2s_clear_irq_status(I2S_Type *ptr, uint32_t mask)
587 {
588  ptr->STA = mask;
589 }
590 
596 static inline void i2s_stop_transfer(I2S_Type *ptr)
597 {
598  i2s_disable(ptr);
599 }
600 
611 hpm_stat_t i2s_config_tx(I2S_Type *ptr, uint32_t mclk_in_hz, i2s_transfer_config_t *config);
612 
622 
633 hpm_stat_t i2s_config_rx(I2S_Type *ptr, uint32_t mclk_in_hz, i2s_transfer_config_t *config);
634 
645 
656 hpm_stat_t i2s_config_transfer(I2S_Type *ptr, uint32_t mclk_in_hz, i2s_transfer_config_t *config);
657 
668 
680 
688 static inline void i2s_send_data(I2S_Type *ptr, i2s_line_num_t tx_line_index, uint32_t data)
689 {
690  ptr->TXD[tx_line_index] = data;
691 }
692 
700 static inline void i2s_receive_data(I2S_Type *ptr, i2s_line_num_t rx_line_index, uint32_t *data)
701 {
702  *data = ptr->RXD[rx_line_index];
703 }
704 
716 uint32_t i2s_send_buff(I2S_Type *ptr, i2s_line_num_t tx_line_index, uint8_t samplebits, uint8_t *src, uint32_t size);
717 
729 uint32_t i2s_receive_buff(I2S_Type *ptr, i2s_line_num_t rx_line_index, uint8_t samplebits, uint8_t *dst, uint32_t size);
730 
737 void i2s_get_default_config(I2S_Type *ptr, i2s_config_t *config);
738 
745 void i2s_init(I2S_Type *ptr, i2s_config_t *config);
746 
753 
760 
767 
774 
788 hpm_stat_t i2s_fill_tx_dummy_data(I2S_Type *ptr, i2s_line_num_t data_line, uint8_t data_count);
789 
790 
791 #if defined(HPM_IP_FEATURE_I2S_BUFF_ALIGN_FRAME) && (HPM_IP_FEATURE_I2S_BUFF_ALIGN_FRAME)
799 static inline void i2s_enable_buff_align_frame(I2S_Type *ptr)
800 {
802 }
803 
809 static inline void i2s_disable_buff_align_frame(I2S_Type *ptr)
810 {
812 }
813 #endif
814 
819 #ifdef __cplusplus
820 }
821 #endif
822 
823 #endif /* HPM_I2S_DRV_H */
#define I2S_FIFO_THRESH_TX_SET(x)
Definition: hpm_i2s_regs.h:251
#define I2S_STA_TX_DN_SHIFT
Definition: hpm_i2s_regs.h:291
#define I2S_FIFO_THRESH_TX_MASK
Definition: hpm_i2s_regs.h:249
#define I2S_CTRL_TX_DMA_EN_MASK
Definition: hpm_i2s_regs.h:104
#define I2S_STA_RX_DA_SHIFT
Definition: hpm_i2s_regs.h:300
#define I2S_STA_RX_OV_SHIFT
Definition: hpm_i2s_regs.h:281
#define I2S_CTRL_TXFIFOCLR_MASK
Definition: hpm_i2s_regs.h:124
#define I2S_CTRL_RXDAIE_MASK
Definition: hpm_i2s_regs.h:81
#define I2S_CTRL_SFTRST_TX_MASK
Definition: hpm_i2s_regs.h:47
#define I2S_MISC_CFGR_MCLK_GATEOFF_MASK
Definition: hpm_i2s_regs.h:526
#define I2S_CTRL_RX_DMA_EN_MASK
Definition: hpm_i2s_regs.h:114
#define I2S_CFGR_BCLK_GATEOFF_MASK
Definition: hpm_i2s_regs.h:328
#define I2S_CTRL_I2S_EN_MASK
Definition: hpm_i2s_regs.h:164
#define I2S_CTRL_RX_EN_SET(x)
Definition: hpm_i2s_regs.h:156
#define I2S_FIFO_THRESH_RX_MASK
Definition: hpm_i2s_regs.h:259
#define I2S_CFGR_TDM_EN_MASK
Definition: hpm_i2s_regs.h:471
#define I2S_FIFO_THRESH_RX_SET(x)
Definition: hpm_i2s_regs.h:261
#define I2S_CTRL_SFTRST_CLKGEN_MASK
Definition: hpm_i2s_regs.h:57
#define I2S_CTRL_TXDNIE_MASK
Definition: hpm_i2s_regs.h:69
#define I2S_CTRL_ERRIE_MASK
Definition: hpm_i2s_regs.h:94
#define I2S_CTRL_TX_EN_SET(x)
Definition: hpm_i2s_regs.h:146
#define I2S_CTRL_RXFIFOCLR_MASK
Definition: hpm_i2s_regs.h:134
#define I2S_STA_TX_UD_SHIFT
Definition: hpm_i2s_regs.h:271
#define I2S_CTRL_SFTRST_RX_MASK
Definition: hpm_i2s_regs.h:37
#define I2S_CTRL_FRC_ALIGN_FBUF_MASK
Definition: hpm_i2s_regs.h:37
uint32_t hpm_stat_t
Definition: hpm_common.h:126
static void i2s_enable_tdm(I2S_Type *ptr)
enable TDM
Definition: hpm_i2s_drv.h:103
i2s_data_line_stat_t
Definition: hpm_i2s_drv.h:87
static void i2s_clear_irq_status(I2S_Type *ptr, uint32_t mask)
I2S get IRQ status.
Definition: hpm_i2s_drv.h:586
void i2s_reset_all(I2S_Type *ptr)
I2S reset tx/rx and clock generator module.
Definition: hpm_i2s_drv.c:59
static void i2s_enable_tx_line(I2S_Type *ptr, i2s_line_num_t line)
I2S enable tx function.
Definition: hpm_i2s_drv.h:360
static void i2s_set_txd_slot(I2S_Type *ptr, i2s_line_num_t line, uint32_t slot_mask)
I2S set tx slot mask.
Definition: hpm_i2s_drv.h:383
static void i2s_reset_tx_rx(I2S_Type *ptr)
I2S reset tx and rx function.
Definition: hpm_i2s_drv.h:455
static void i2s_enable_rx(I2S_Type *ptr, uint8_t rx_mask)
I2S enable rx function.
Definition: hpm_i2s_drv.h:294
struct i2s_transfer_config i2s_transfer_config_t
I2S transfer config.
static uint32_t i2s_get_rx_line_fifo_level(I2S_Type *ptr, i2s_line_num_t line)
I2S get data line rx fifo level.
Definition: hpm_i2s_drv.h:521
static void i2s_reset_rx(I2S_Type *ptr)
I2S reset rx function.
Definition: hpm_i2s_drv.h:437
static void i2s_disable_tx_dma_request(I2S_Type *ptr)
disable TX dma request
Definition: hpm_i2s_drv.h:197
void i2s_get_default_transfer_config_for_pdm(i2s_transfer_config_t *transfer)
I2S get default transfer config for pdm.
Definition: hpm_i2s_drv.c:532
hpm_stat_t i2s_config_rx(I2S_Type *ptr, uint32_t mclk_in_hz, i2s_transfer_config_t *config)
I2S config rx.
Definition: hpm_i2s_drv.c:318
static void i2s_stop(I2S_Type *ptr)
I2S stop.
Definition: hpm_i2s_drv.h:283
static void i2s_disable_tdm(I2S_Type *ptr)
disable TDM
Definition: hpm_i2s_drv.h:113
static void i2s_disable_tx(I2S_Type *ptr, uint8_t tx_mask)
I2S disbale tx function.
Definition: hpm_i2s_drv.h:349
static uint32_t i2s_check_data_line_status(I2S_Type *ptr, i2s_line_num_t line)
Check I2S data line status.
Definition: hpm_i2s_drv.h:537
hpm_stat_t i2s_config_tx_slave(I2S_Type *ptr, i2s_transfer_config_t *config)
I2S config tx for slave.
Definition: hpm_i2s_drv.c:310
static void i2s_enable(I2S_Type *ptr)
I2S enable.
Definition: hpm_i2s_drv.h:251
static void i2s_set_rxd_slot(I2S_Type *ptr, i2s_line_num_t line, uint32_t slot_mask)
I2S set rx slot mask.
Definition: hpm_i2s_drv.h:395
uint32_t i2s_send_buff(I2S_Type *ptr, i2s_line_num_t tx_line_index, uint8_t samplebits, uint8_t *src, uint32_t size)
I2S send data in buff.
Definition: hpm_i2s_drv.c:458
static void i2s_enable_irq(I2S_Type *ptr, uint32_t mask)
enable IRQ
Definition: hpm_i2s_drv.h:228
static uint32_t i2s_get_irq_status(I2S_Type *ptr)
I2S get IRQ status.
Definition: hpm_i2s_drv.h:575
static void i2s_reset_tx(I2S_Type *ptr)
I2S reset tx function.
Definition: hpm_i2s_drv.h:419
static void i2s_enable_rx_line(I2S_Type *ptr, i2s_line_num_t line)
I2S enable rx line function.
Definition: hpm_i2s_drv.h:316
static void i2s_stop_transfer(I2S_Type *ptr)
I2S stop transfer.
Definition: hpm_i2s_drv.h:596
hpm_stat_t i2s_config_transfer(I2S_Type *ptr, uint32_t mclk_in_hz, i2s_transfer_config_t *config)
I2S config transfer.
Definition: hpm_i2s_drv.c:343
struct i2s_config i2s_config_t
I2S config.
static void i2s_disable_rx_dma_request(I2S_Type *ptr)
disable RX dma request
Definition: hpm_i2s_drv.h:217
static void i2s_reset_clock_gen(I2S_Type *ptr)
I2S reset clock generator.
Definition: hpm_i2s_drv.h:405
static void i2s_gate_bclk(I2S_Type *ptr)
gete off BCLK
Definition: hpm_i2s_drv.h:157
static void i2s_enable_rx_dma_request(I2S_Type *ptr)
enable RX dma request
Definition: hpm_i2s_drv.h:207
static void i2s_disable_tx_line(I2S_Type *ptr, i2s_line_num_t line)
I2S disbale tx function.
Definition: hpm_i2s_drv.h:371
hpm_stat_t i2s_config_transfer_slave(I2S_Type *ptr, i2s_transfer_config_t *config)
I2S config transfer for slave.
Definition: hpm_i2s_drv.c:360
void i2s_get_default_transfer_config_for_dao(i2s_transfer_config_t *transfer)
I2S get default transfer config for dao.
Definition: hpm_i2s_drv.c:545
static void i2s_enable_tx_dma_request(I2S_Type *ptr)
enable TX dma request
Definition: hpm_i2s_drv.h:187
hpm_stat_t i2s_fill_tx_dummy_data(I2S_Type *ptr, i2s_line_num_t data_line, uint8_t data_count)
I2S fill dummy data into TX fifo.
Definition: hpm_i2s_drv.c:38
static uint32_t i2s_get_rx_fifo_level(I2S_Type *ptr)
I2S get rx fifo level.
Definition: hpm_i2s_drv.h:508
i2s_irq_mask_t
Definition: hpm_i2s_drv.h:81
void i2s_get_default_multiline_transfer_config(i2s_multiline_transfer_config_t *transfer)
I2S get default multiline transfer config.
Definition: hpm_i2s_drv.c:571
void i2s_init(I2S_Type *ptr, i2s_config_t *config)
I2S initialization.
Definition: hpm_i2s_drv.c:100
static void i2s_ungate_bclk(I2S_Type *ptr)
open BCLK
Definition: hpm_i2s_drv.h:147
static void i2s_update_rx_fifo_threshold(I2S_Type *ptr, uint8_t threshold)
update rx fifo threshold
Definition: hpm_i2s_drv.h:124
hpm_stat_t i2s_config_multiline_transfer(I2S_Type *ptr, uint32_t mclk_in_hz, i2s_multiline_transfer_config_t *config)
I2S config multiline transfer.
Definition: hpm_i2s_drv.c:368
hpm_stat_t i2s_config_rx_slave(I2S_Type *ptr, i2s_transfer_config_t *config)
I2S config rx for slave.
Definition: hpm_i2s_drv.c:335
void i2s_get_default_config(I2S_Type *ptr, i2s_config_t *config)
I2S get default config.
Definition: hpm_i2s_drv.c:82
static void i2s_update_tx_fifo_threshold(I2S_Type *ptr, uint8_t threshold)
update tx fifo threshold
Definition: hpm_i2s_drv.h:136
static void i2s_disable_irq(I2S_Type *ptr, uint32_t mask)
disable IRQ
Definition: hpm_i2s_drv.h:239
uint32_t i2s_receive_buff(I2S_Type *ptr, i2s_line_num_t rx_line_index, uint8_t samplebits, uint8_t *dst, uint32_t size)
I2S receive data in buff.
Definition: hpm_i2s_drv.c:494
static uint32_t i2s_get_tx_fifo_level(I2S_Type *ptr)
I2S get tx fifo level.
Definition: hpm_i2s_drv.h:483
void i2s_get_default_transfer_config(i2s_transfer_config_t *transfer)
I2S get default transfer config.
Definition: hpm_i2s_drv.c:558
static void i2s_disable(I2S_Type *ptr)
I2S disable.
Definition: hpm_i2s_drv.h:263
static void i2s_send_data(I2S_Type *ptr, i2s_line_num_t tx_line_index, uint32_t data)
I2S send data.
Definition: hpm_i2s_drv.h:688
static void i2s_start(I2S_Type *ptr)
I2S start.
Definition: hpm_i2s_drv.h:273
struct i2s_multiline_transfer_config i2s_multiline_transfer_config_t
I2S multiline transfer config.
static uint32_t i2s_get_tx_line_fifo_level(I2S_Type *ptr, i2s_line_num_t line)
I2S get data line tx fifo level.
Definition: hpm_i2s_drv.h:496
static void i2s_ungate_mclk(I2S_Type *ptr)
open MCLK
Definition: hpm_i2s_drv.h:167
static void i2s_disable_rx(I2S_Type *ptr, uint8_t rx_mask)
I2S disable rx function.
Definition: hpm_i2s_drv.h:305
hpm_stat_t i2s_config_tx(I2S_Type *ptr, uint32_t mclk_in_hz, i2s_transfer_config_t *config)
I2S config tx.
Definition: hpm_i2s_drv.c:293
static void i2s_gate_mclk(I2S_Type *ptr)
gate off MCLK
Definition: hpm_i2s_drv.h:177
static void i2s_disable_rx_line(I2S_Type *ptr, i2s_line_num_t line)
I2S disable rx line function.
Definition: hpm_i2s_drv.h:327
static void i2s_receive_data(I2S_Type *ptr, i2s_line_num_t rx_line_index, uint32_t *data)
I2S receive data.
Definition: hpm_i2s_drv.h:700
static void i2s_enable_tx(I2S_Type *ptr, uint8_t tx_mask)
I2S enable tx function.
Definition: hpm_i2s_drv.h:338
i2s_line_num_t
Definition: hpm_i2s_drv.h:22
@ i2s_data_line_tx_fifo_avail
Definition: hpm_i2s_drv.h:89
@ i2s_data_line_tx_fifo_underrun
Definition: hpm_i2s_drv.h:91
@ i2s_data_line_rx_fifo_overrun
Definition: hpm_i2s_drv.h:90
@ i2s_data_line_rx_fifo_avail
Definition: hpm_i2s_drv.h:88
@ i2s_rx_fifo_threshold_irq_mask
Definition: hpm_i2s_drv.h:83
@ i2s_tx_fifo_threshold_irq_mask
Definition: hpm_i2s_drv.h:82
@ i2s_fifo_error_irq_mask
Definition: hpm_i2s_drv.h:84
@ I2S_DATA_LINE_MAX
Definition: hpm_i2s_drv.h:27
@ I2S_DATA_LINE_2
Definition: hpm_i2s_drv.h:25
@ I2S_DATA_LINE_1
Definition: hpm_i2s_drv.h:24
@ I2S_DATA_LINE_0
Definition: hpm_i2s_drv.h:23
@ I2S_DATA_LINE_3
Definition: hpm_i2s_drv.h:26
static void size
Definition: hpm_math.h:6938
static hpm_stat_t transfer(void *host, hpm_serial_nor_transfer_seq_t *command_seq)
Definition: hpm_serial_nor_host_spi.c:55
Definition: hpm_i2s_regs.h:12
__R uint32_t RFIFO_FILLINGS
Definition: hpm_i2s_regs.h:14
__RW uint32_t CFGR
Definition: hpm_i2s_regs.h:22
__RW uint32_t CTRL
Definition: hpm_i2s_regs.h:13
__RW uint32_t RXDSLOT[4]
Definition: hpm_i2s_regs.h:26
__R uint32_t TFIFO_FILLINGS
Definition: hpm_i2s_regs.h:15
__R uint32_t RXD[4]
Definition: hpm_i2s_regs.h:19
__RW uint32_t FIFO_THRESH
Definition: hpm_i2s_regs.h:16
__RW uint32_t STA
Definition: hpm_i2s_regs.h:17
__RW uint32_t TXDSLOT[4]
Definition: hpm_i2s_regs.h:27
__RW uint32_t MISC_CFGR
Definition: hpm_i2s_regs.h:24
__W uint32_t TXD[4]
Definition: hpm_i2s_regs.h:20
I2S config.
Definition: hpm_i2s_drv.h:33
bool use_external_fclk
Definition: hpm_i2s_drv.h:42
bool invert_fclk_in
Definition: hpm_i2s_drv.h:41
bool invert_bclk_out
Definition: hpm_i2s_drv.h:37
bool invert_mclk_out
Definition: hpm_i2s_drv.h:34
bool use_external_bclk
Definition: hpm_i2s_drv.h:39
bool frame_start_at_rising_edge
Definition: hpm_i2s_drv.h:44
bool use_external_mclk
Definition: hpm_i2s_drv.h:36
bool invert_fclk_out
Definition: hpm_i2s_drv.h:40
uint16_t tx_fifo_threshold
Definition: hpm_i2s_drv.h:45
bool invert_bclk_in
Definition: hpm_i2s_drv.h:38
uint16_t rx_fifo_threshold
Definition: hpm_i2s_drv.h:46
bool enable_mclk_out
Definition: hpm_i2s_drv.h:43
bool invert_mclk_in
Definition: hpm_i2s_drv.h:35
I2S multiline transfer config.
Definition: hpm_i2s_drv.h:67
uint8_t audio_depth
Definition: hpm_i2s_drv.h:72
uint32_t tx_channel_slot_mask[4]
Definition: hpm_i2s_drv.h:77
uint8_t protocol
Definition: hpm_i2s_drv.h:74
bool rx_data_line_en[4]
Definition: hpm_i2s_drv.h:76
bool tx_data_line_en[4]
Definition: hpm_i2s_drv.h:75
bool master_mode
Definition: hpm_i2s_drv.h:73
uint32_t rx_channel_slot_mask[4]
Definition: hpm_i2s_drv.h:78
uint32_t sample_rate
Definition: hpm_i2s_drv.h:68
uint8_t channel_num_per_frame
Definition: hpm_i2s_drv.h:70
uint8_t channel_length
Definition: hpm_i2s_drv.h:71
bool enable_tdm_mode
Definition: hpm_i2s_drv.h:69
I2S transfer config.
Definition: hpm_i2s_drv.h:52
uint32_t sample_rate
Definition: hpm_i2s_drv.h:53
uint8_t channel_length
Definition: hpm_i2s_drv.h:56
uint8_t protocol
Definition: hpm_i2s_drv.h:59
uint8_t channel_num_per_frame
Definition: hpm_i2s_drv.h:55
uint8_t audio_depth
Definition: hpm_i2s_drv.h:57
uint32_t channel_slot_mask
Definition: hpm_i2s_drv.h:61
i2s_line_num_t data_line
Definition: hpm_i2s_drv.h:60
bool enable_tdm_mode
Definition: hpm_i2s_drv.h:54
bool master_mode
Definition: hpm_i2s_drv.h:58