HPM SDK
HPMicro Software Development Kit
hpm_i2s_over_spi.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef _HPM_I2S_OVER_SPI_H
9 #define _HPM_I2S_OVER_SPI_H
10 #include "hpm_common.h"
11 #include "hpm_i2s_common.h"
12 #include "hpm_gptmr_drv.h"
13 #include "hpm_spi_drv.h"
14 #include "hpm_clock_drv.h"
15 #include "hpm_dma_mgr.h"
16 
17 typedef void (*i2s_rx_data_tc)(uint32_t cb_data_ptr);
18 
19 typedef struct {
22  uint8_t channel;
24 
25 typedef struct {
28  /* dmamux source */
29  uint16_t txdma_src;
30  uint16_t rxdma_src;
31  /* need external cs line to drive spi slave */
32  uint32_t cs_pin;
33  void (*write_cs)(uint32_t cs_pin, uint8_t state);
35 
36 typedef struct {
40 
41 typedef struct hpm_i2s_over_spi {
42  /* bit clock */
44  /* word select */
46  /* master clock */
48  /* spi slave as tx and rx data line */
52  /* switch rx */
53  bool i2s_rx;
55  /* record the time when an i2s transfer is completed */
57  bool has_done;
58  void (*transfer_complete)(struct hpm_i2s_over_spi *i2s);
60 
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64 
71 
80 
94 
112  uint8_t protocol, uint32_t lrck_hz, uint8_t audio_depth,
113  uint8_t *data, uint32_t size);
114 
128  uint8_t protocol, uint32_t lrck_hz,
129  uint8_t audio_depth, uint8_t *data,
130  uint32_t size);
131 
140 
155  uint32_t lrck_hz, uint32_t audio_depth,
156  uint8_t *buffer0, uint8_t *buffer1,
157  uint32_t size);
158 
168 
177 
178 #ifdef __cplusplus
179 }
180 #endif
181 
182 #endif /* _HPM_I2S_OVER_SPI_H */
183 
enum _clock_name clock_name_t
Peripheral Clock Type Description.
uint32_t hpm_stat_t
Definition: hpm_common.h:126
static void size
Definition: hpm_math.h:6938
@ cs_pin
Definition: hpm_spi_drv.h:265
struct _dma_resource dma_resource_t
DMA Resource Structure.
hpm_stat_t hpm_i2s_master_over_spi_rx_config(hpm_i2s_over_spi_t *i2s, uint8_t protocol, uint32_t lrck_hz, uint32_t audio_depth, uint8_t *buffer0, uint8_t *buffer1, uint32_t size)
Receiving configuration for i2s master over spi.
Definition: hpm_i2s_over_spi.c:198
void hpm_i2s_master_over_spi_transfer_complete_callback(hpm_i2s_over_spi_t *i2s)
Transfer complete callback for i2s master over spi.
Definition: hpm_i2s_over_spi.c:15
bool hpm_i2s_master_over_spi_tx_is_busy(hpm_i2s_over_spi_t *i2s)
Check if i2s master over spiis busy.
Definition: hpm_i2s_over_spi.c:60
hpm_stat_t hpm_i2s_master_over_spi_tx_buffer(hpm_i2s_over_spi_t *i2s, uint8_t protocol, uint32_t lrck_hz, uint8_t audio_depth, uint8_t *data, uint32_t size)
Transmit for i2s master over spi.
Definition: hpm_i2s_over_spi.c:134
hpm_stat_t hpm_i2s_master_over_spi_rx_start(hpm_i2s_over_spi_t *i2s, i2s_rx_data_tc callback)
Start receiving for i2s master over spi.
Definition: hpm_i2s_over_spi.c:260
hpm_stat_t hpm_i2s_master_over_spi_init(hpm_i2s_over_spi_t *i2s)
Initialization for i2s master over spi.
Definition: hpm_i2s_over_spi.c:42
hpm_stat_t hpm_i2s_master_over_spi_rx_stop(hpm_i2s_over_spi_t *i2s)
Stop receiving for i2s master over spi.
Definition: hpm_i2s_over_spi.c:279
void(* i2s_rx_data_tc)(uint32_t cb_data_ptr)
Definition: hpm_i2s_over_spi.h:17
struct hpm_i2s_over_spi hpm_i2s_over_spi_t
hpm_stat_t hpm_i2s_master_over_spi_tx_stop(hpm_i2s_over_spi_t *i2s)
Stop Transmission for i2s master over spi.
Definition: hpm_i2s_over_spi.c:65
hpm_stat_t hpm_i2s_master_over_spi_tx_buffer_nonblocking(hpm_i2s_over_spi_t *i2s, uint8_t protocol, uint32_t lrck_hz, uint8_t audio_depth, uint8_t *data, uint32_t size)
Definition: hpm_i2s_over_spi.c:84
Definition: hpm_gptmr_regs.h:12
Definition: hpm_spi_regs.h:12
Linked descriptor.
Definition: hpm_dma_drv.h:92
Definition: hpm_i2s_over_spi.h:36
dma_linked_descriptor_t * descriptors
Definition: hpm_i2s_over_spi.h:38
dma_resource_t * resource
Definition: hpm_i2s_over_spi.h:37
Definition: hpm_i2s_over_spi.h:19
clock_name_t clock_name
Definition: hpm_i2s_over_spi.h:21
uint8_t channel
Definition: hpm_i2s_over_spi.h:22
GPTMR_Type * ptr
Definition: hpm_i2s_over_spi.h:20
Definition: hpm_i2s_over_spi.h:41
bool i2s_rx
Definition: hpm_i2s_over_spi.h:53
bool has_done
Definition: hpm_i2s_over_spi.h:57
hpm_i2s_spi_context_t spi_slave
Definition: hpm_i2s_over_spi.h:49
void(* transfer_complete)(struct hpm_i2s_over_spi *i2s)
Definition: hpm_i2s_over_spi.h:58
hpm_i2s_dma_context_t rx_dma
Definition: hpm_i2s_over_spi.h:51
hpm_i2s_gptmr_context_t mclk
Definition: hpm_i2s_over_spi.h:47
hpm_i2s_dma_context_t tx_dma
Definition: hpm_i2s_over_spi.h:50
hpm_i2s_gptmr_context_t bclk
Definition: hpm_i2s_over_spi.h:43
i2s_rx_data_tc rx_callback
Definition: hpm_i2s_over_spi.h:54
hpm_i2s_gptmr_context_t transfer_time
Definition: hpm_i2s_over_spi.h:56
hpm_i2s_gptmr_context_t lrck
Definition: hpm_i2s_over_spi.h:45
Definition: hpm_i2s_over_spi.h:25
uint16_t rxdma_src
Definition: hpm_i2s_over_spi.h:30
SPI_Type * ptr
Definition: hpm_i2s_over_spi.h:26
uint16_t txdma_src
Definition: hpm_i2s_over_spi.h:29
clock_name_t clock_name
Definition: hpm_i2s_over_spi.h:27
uint32_t cs_pin
Definition: hpm_i2s_over_spi.h:32