HPM APP
HPMicro Application solution
i2s_dma_chain.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef I2S_DMA_CHAIN_H
9 #define I2S_DMA_CHAIN_H
10 
11 #include "board.h"
12 
13 
18 #define APP_DMA_TX BOARD_APP_HDMA
19 #define DMA_CHANNEL (1U)
20 #define DMA_MUX_CHANNEL DMA_SOC_CHN_TO_DMAMUX_CHN(APP_DMA_TX, DMA_CHANNEL)
21 #define DMA_MUX_SRC HPM_DMA_SRC_I2S1_TX
22 #define TX_DATA_LEN (32U)
23 
24 /* I2S Master Transfer Format */
29 #define I2S_SAMPLE_RATE_HZ (16000U)
30 #define I2S_SAMPLE_CHANNEL (2U)
31 #define I2S_SAMPLE_BITDEPTH i2s_audio_depth_32_bits
32 #define I2S_CHANNEL_LENGTH i2s_channel_length_32_bits
33 
34 /* DAO */
35 #define I2S_DAO DAO_I2S
36 #define I2S_DAO_CLK_NAME clock_i2s1
37 #define I2S_DAO_DATA_LINE (0U)
38 #define I2S_DAO_MCLK_FREQ_IN_HZ (24576000UL)
39 
44 #define CODEC_I2C BOARD_APP_I2C_BASE
45 #define CODEC_I2S BOARD_APP_I2S_BASE
46 #define CODEC_I2S_CLK_NAME BOARD_APP_I2S_CLK_NAME
47 #define CODEC_I2S_DATA_LINE BOARD_APP_I2S_RX_DATA_LINE
48 #define CODEC_BIT_WIDTH (32U)
49 #define CODEC_SAMPLE_RATE_HZ (16000U)
54 #define APP_DMA_RX BOARD_APP_HDMA
55 #define I2S_MASTER_RX_LINE CODEC_I2S_DATA_LINE
56 #define DMA_RX_CHANNEL (0U)
57 #define DMA_MUX_RX_CHANNEL DMA_SOC_CHN_TO_DMAMUX_CHN(APP_DMA_RX, DMA_RX_CHANNEL)
58 #define DMA_MUX_RX_SRC HPM_DMA_SRC_I2S0_RX
59 
64 #define SAMPLE_FREQ CODEC_SAMPLE_RATE_HZ
69 #define SINWAVE_FREQ (1000u)
74 #define FFT_SHIFT 7
79 #define FFT_POINTS (1 << FFT_SHIFT)
84 #define FFT_RESULT_SHIFT 18
89 #define FFT_POINTS_DUAL (FFT_POINTS * 2)
94 #define FFT_RESULT_INDEX (FFT_POINTS * SINWAVE_FREQ / SAMPLE_FREQ)
99 #define TEST_DELAY_COUNT 20
100 
101 
102 typedef float rfft_type_t;
103 
104 /* I2S TX fuction */
105 
119 void i2s_dao_config(uint32_t sample_rate, uint8_t audio_depth, uint8_t channel_num);
129 void dma_auto_config_tx(void);
134 void i2s_dma_tx_init(void);
135 
136 
137 /* I2S RX fuction */
138 
151 void fft_cal(rfft_type_t *buf, rfft_type_t *output, uint16_t points, uint16_t shift);
161 void dma_auto_config_rx(void);
166 void codec_i2s_init(void);
171 void i2s_dma_rx_init(void);
176 void rx_data_process(void);
177 
178 #endif /* I2S_DMA_CHAIN_H */
void fft_cal(rfft_type_t *buf, rfft_type_t *output, uint16_t points, uint16_t shift)
FFT calculation:perform FFT calculation on the received audio data ;FFT计算:对接收到音频数据进行FFT运算
Definition: i2s_dma_chain.c:220
void i2s_dma_tx_init(void)
I2S TX and DMA chain init ;发送数据的I2S和DMA链初始化
Definition: i2s_dma_chain.c:198
void rx_data_process(void)
processing received data ;处理接收的数据
Definition: i2s_dma_chain.c:352
void dma_auto_config_tx(void)
I2S TX DMA chain start ;I2S发送数据的DMA链启动
Definition: i2s_dma_chain.c:171
float rfft_type_t
Definition: i2s_dma_chain.h:102
void codec_i2s_init(void)
CODEC used for microphone I2S init ;麦克风使用的CODEC I2S初始化
Definition: i2s_dma_chain.c:313
void dma_chain_transfer_config_rx(void)
I2S RX DMA chain configuration ;I2S接收数据的DMA链配置
Definition: i2s_dma_chain.c:226
void dma_chain_transfer_config_tx(void)
I2S TX DMA chain configuration ;I2S发送数据的DMA链配置
Definition: i2s_dma_chain.c:111
void dma_auto_config_rx(void)
I2S RX DMA chain start ;I2S接收数据的DMA链启动
Definition: i2s_dma_chain.c:285
void i2s_dma_rx_init(void)
I2S RX and DMA chain init ;接收数据的I2S和DMA链初始化
Definition: i2s_dma_chain.c:344
void i2s_dao_config(uint32_t sample_rate, uint8_t audio_depth, uint8_t channel_num)
DAO I2S configuration ;DAO I2S配置
Definition: i2s_dma_chain.c:72