SemiDrive SSDK Appication Program Interface PTG3.0
sdrv_pdm.h
Go to the documentation of this file.
1
9#ifndef SDRV_PDM_H_
10#define SDRV_PDM_H_
11
12#include <types.h>
13
14#include "sdrv_ckgen.h"
15#include "sdrv_common.h"
16#include "sdrv_dma.h"
17
18/* sdrv pdm max transfres */
19#define SDRV_PDM_XFER_NUM_TRANSFERS (4U)
20/* sdrv pdm dma buff size default value */
21#define SDRV_PDM_CHANNELS_COUNT 1
22#define SDRV_PDM_CHANNELS_BYTES (SDRV_PDM_SAMPLE_WIDTH_16BITS / 8)
23#define SDRV_PDM_DMA_PERIOD_FRAME_SIZE 1024 * 4
24#define SDRV_PDM_DMA_PERIOD_SIZE \
25 SDRV_PDM_DMA_PERIOD_FRAME_SIZE *SDRV_PDM_CHANNELS_COUNT \
26 *SDRV_PDM_CHANNELS_BYTES
27#define SDRV_PDM_DMA_PERIOD_COUNT 2
28#define SDRV_PDM_DMA_BUF_TOTAL_SIZE \
29 SDRV_PDM_DMA_PERIOD_SIZE *SDRV_PDM_DMA_PERIOD_COUNT
30
35typedef enum sdrv_pdm_channel {
40
45typedef enum sdrv_pdm_gain {
56
76
87
92typedef enum sdrv_pdm_status {
93 /* status for Success */
95 /* status for Fail */
97 /* status for invalid argument check */
100 /* status for Overrun */
102 /* status for underrun */
105
110typedef struct sdrv_pdm_dma_data {
112 paddr_t addr;
116 unsigned int max_burst;
118 unsigned int fifo_size;
120
126typedef struct sdrv_pdm_dma_buf {
128 uint8_t *addr;
134 int32_t periods;
137 uint32_t appl_ptr;
140 uint32_t hw_ptr;
142 uint32_t boundary;
144
149typedef struct sdrv_pdm_transfer {
151 uint8_t *data;
153 uint32_t length;
155 uint8_t id;
157
158/* @brief sdrv pdm transfer callback function. */
159typedef void (*sdrv_pdm_callback)(sdrv_pdm_transfer_t *transfer, void *context,
160 sdrv_pdm_status_t state);
165typedef struct sdrv_pdm_params {
176 unsigned int period_bytes;
179 unsigned int periods;
181 uint8_t *dma_buff;
183 bool usedma;
184
186
191typedef struct sdrv_pdm_stream {
197 bool active;
199 uint8_t queue_appl;
201 uint8_t queue_hw;
205 void *context;
211 unsigned threshold;
222
227typedef struct sdrv_pdm_config {
229 paddr_t base;
231 int id;
233 uint32_t irq;
237 paddr_t dma_base;
241
246typedef struct sdrv_pdm {
250 uint32_t clk_rate;
254
267
279 sdrv_pdm_params_t *params);
280
293 sdrv_pdm_params_t *params);
294
306 sdrv_pdm_callback callback,
307 void *context);
308
320 sdrv_pdm_transfer_t *transfer);
321
331
341
342#endif /* SDRV_PDM_H_ */
SemiDrive clock generator driver header file.
SemiDrive driver common header file.
@ SDRV_STATUS_GROUP_PDM
Definition: sdrv_common.h:40
@ SDRV_STATUS_GROUP_COMMON
Definition: sdrv_common.h:22
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
SemiDrive DMA driver header file.
sdrv_dma_bus_width_e
DMA channel data width for each transaction.
Definition: sdrv_dma.h:127
sdrv_dma_channel_id_e
DMA Channel ID.
Definition: sdrv_dma.h:47
enum sdrv_pdm_sample_rate sdrv_pdm_sample_rate_t
pdm sample rate
sdrv_pdm_status_t sdrv_pdm_create_transfer(sdrv_pdm_t *pdm, sdrv_pdm_callback callback, void *context)
sdrv_pdm_create_transfer
void(* sdrv_pdm_callback)(sdrv_pdm_transfer_t *transfer, void *context, sdrv_pdm_status_t state)
Definition: sdrv_pdm.h:159
struct sdrv_pdm_transfer sdrv_pdm_transfer_t
pdm transfer
sdrv_pdm_sample_width
pdm sample width
Definition: sdrv_pdm.h:81
@ SDRV_PDM_SAMPLE_WIDTH_16BITS
Definition: sdrv_pdm.h:83
@ SDRV_PDM_SAMPLE_WIDTH_24BITS
Definition: sdrv_pdm.h:84
@ SDRV_PDM_SAMPLE_WIDTH_8BITS
Definition: sdrv_pdm.h:82
@ SDRV_PDM_SAMPLE_WIDTH_32BITS
Definition: sdrv_pdm.h:85
sdrv_pdm_status
pdm status
Definition: sdrv_pdm.h:92
@ SDRV_PDM_STATUS_INVALID_PARAMS
Definition: sdrv_pdm.h:98
@ SDRV_PDM_STATUS_FAIL
Definition: sdrv_pdm.h:96
@ SDRV_PDM_STATUS_OVERRUN
Definition: sdrv_pdm.h:101
@ SDRV_PDM_STATUS_SUCCESS
Definition: sdrv_pdm.h:94
@ SDRV_PDM_STATUS_UNDERRUN
Definition: sdrv_pdm.h:103
struct sdrv_pdm_dma_buf sdrv_pdm_dma_buf_t
pdm dma buff descriptions
struct sdrv_pdm_stream sdrv_pdm_stream_t
pdm capture stream descriptions
struct sdrv_pdm_params sdrv_pdm_params_t
pdm config params
sdrv_pdm_status_t sdrv_pdm_submit_transfer(sdrv_pdm_t *pdm, sdrv_pdm_transfer_t *transfer)
sdrv_pdm_submit_transfer
sdrv_pdm_sample_rate
pdm sample rate
Definition: sdrv_pdm.h:61
@ SDRV_PDM_SR_192000
Definition: sdrv_pdm.h:74
@ SDRV_PDM_SR_176400
Definition: sdrv_pdm.h:73
@ SDRV_PDM_SR_5512
Definition: sdrv_pdm.h:62
@ SDRV_PDM_SR_8000
Definition: sdrv_pdm.h:63
@ SDRV_PDM_SR_64000
Definition: sdrv_pdm.h:70
@ SDRV_PDM_SR_22050
Definition: sdrv_pdm.h:66
@ SDRV_PDM_SR_88200
Definition: sdrv_pdm.h:71
@ SDRV_PDM_SR_11025
Definition: sdrv_pdm.h:64
@ SDRV_PDM_SR_44100
Definition: sdrv_pdm.h:68
@ SDRV_PDM_SR_16000
Definition: sdrv_pdm.h:65
@ SDRV_PDM_SR_48000
Definition: sdrv_pdm.h:69
@ SDRV_PDM_SR_96000
Definition: sdrv_pdm.h:72
@ SDRV_PDM_SR_32000
Definition: sdrv_pdm.h:67
sdrv_pdm_channel
pdm channel
Definition: sdrv_pdm.h:35
@ SDRV_PDM_CHANNEL_STEREO
Definition: sdrv_pdm.h:38
@ SDRV_PDM_CHANNEL_RIGHT
Definition: sdrv_pdm.h:37
@ SDRV_PDM_CHANNEL_LEFT
Definition: sdrv_pdm.h:36
sdrv_pdm_status_t sdrv_pdm_stop(sdrv_pdm_t *pdm)
sdrv_pdm_stop
struct sdrv_pdm_config sdrv_pdm_config_t
pdm board config
struct sdrv_pdm_dma_data sdrv_pdm_dma_data_t
pdm dma fifo descriptions
enum sdrv_pdm_sample_width sdrv_pdm_sample_width_t
pdm sample width
#define SDRV_PDM_XFER_NUM_TRANSFERS
Definition: sdrv_pdm.h:19
sdrv_pdm_status_t sdrv_pdm_start(sdrv_pdm_t *pdm)
sdrv_pdm_start
enum sdrv_pdm_gain sdrv_pdm_gain_t
pdm gain
sdrv_pdm_status_t sdrv_pdm_get_default_params(sdrv_pdm_t *pdm, sdrv_pdm_params_t *params)
sdrv_pdm_get_default_params
sdrv_pdm_gain
pdm gain
Definition: sdrv_pdm.h:45
@ SDRV_PDM_GAIN_P24DB
Definition: sdrv_pdm.h:54
@ SDRV_PDM_GAIN_P12DB
Definition: sdrv_pdm.h:52
@ SDRV_PDM_GAIN_N18DB
Definition: sdrv_pdm.h:48
@ SDRV_PDM_GAIN_P18DB
Definition: sdrv_pdm.h:53
@ SDRV_PDM_GAIN_N24DB
Definition: sdrv_pdm.h:49
@ SDRV_PDM_GAIN_N12DB
Definition: sdrv_pdm.h:47
@ SDRV_PDM_GAIN_N6DB
Definition: sdrv_pdm.h:46
@ SDRV_PDM_GAIN_P6DB
Definition: sdrv_pdm.h:51
@ SDRV_PDM_GAIN_P0DB
Definition: sdrv_pdm.h:50
enum sdrv_pdm_channel sdrv_pdm_channel_t
pdm channel
struct sdrv_pdm sdrv_pdm_t
pdm module descriptions
sdrv_pdm_status_t sdrv_pdm_init(sdrv_pdm_t *pdm, sdrv_pdm_config_t *cfg)
sdrv pdm controller initialization.
sdrv_pdm_status_t sdrv_pdm_set_params(sdrv_pdm_t *pdm, sdrv_pdm_params_t *params)
sdrv_pdm_set_params
enum sdrv_pdm_status sdrv_pdm_status_t
pdm status
Abstract clock common node for driver operate.
Definition: sdrv_ckgen.h:175
DMA channel structure.
Definition: sdrv_dma.h:554
DMA controller structure.
Definition: sdrv_dma.h:472
pdm board config
Definition: sdrv_pdm.h:227
paddr_t dma_base
Definition: sdrv_pdm.h:237
uint32_t irq
Definition: sdrv_pdm.h:233
sdrv_dma_channel_id_e dma_channel
Definition: sdrv_pdm.h:239
int id
Definition: sdrv_pdm.h:231
sdrv_ckgen_node_t * clk
Definition: sdrv_pdm.h:235
paddr_t base
Definition: sdrv_pdm.h:229
pdm dma buff descriptions
Definition: sdrv_pdm.h:126
uint32_t boundary
Definition: sdrv_pdm.h:142
int32_t periods
Definition: sdrv_pdm.h:134
uint32_t appl_ptr
Definition: sdrv_pdm.h:137
uint8_t * addr
Definition: sdrv_pdm.h:128
uint32_t hw_ptr
Definition: sdrv_pdm.h:140
int32_t period_bytes
Definition: sdrv_pdm.h:132
int32_t buffer_bytes
Definition: sdrv_pdm.h:130
pdm dma fifo descriptions
Definition: sdrv_pdm.h:110
paddr_t addr
Definition: sdrv_pdm.h:112
sdrv_dma_bus_width_e addr_width
Definition: sdrv_pdm.h:114
unsigned int max_burst
Definition: sdrv_pdm.h:116
unsigned int fifo_size
Definition: sdrv_pdm.h:118
pdm config params
Definition: sdrv_pdm.h:165
sdrv_pdm_sample_rate_t sample_rate
Definition: sdrv_pdm.h:171
sdrv_pdm_sample_width_t sample_width
Definition: sdrv_pdm.h:169
bool usedma
Definition: sdrv_pdm.h:183
uint8_t * dma_buff
Definition: sdrv_pdm.h:181
unsigned int period_bytes
Definition: sdrv_pdm.h:176
unsigned int periods
Definition: sdrv_pdm.h:179
sdrv_pdm_gain_t gain
Definition: sdrv_pdm.h:173
sdrv_pdm_channel_t channels
Definition: sdrv_pdm.h:167
pdm capture stream descriptions
Definition: sdrv_pdm.h:191
bool active
Definition: sdrv_pdm.h:197
bool pack_mode
Definition: sdrv_pdm.h:207
uint8_t queue_hw
Definition: sdrv_pdm.h:201
sdrv_pdm_transfer_t queue[SDRV_PDM_XFER_NUM_TRANSFERS]
Definition: sdrv_pdm.h:195
sdrv_pdm_dma_buf_t dma_buf
Definition: sdrv_pdm.h:219
sdrv_dma_channel_t dma_channel
Definition: sdrv_pdm.h:215
unsigned threshold
Definition: sdrv_pdm.h:211
bool dma_abort
Definition: sdrv_pdm.h:220
uint8_t queue_appl
Definition: sdrv_pdm.h:199
sdrv_pdm_callback callback
Definition: sdrv_pdm.h:203
sdrv_pdm_params_t params
Definition: sdrv_pdm.h:193
sdrv_pdm_dma_data_t dma_data
Definition: sdrv_pdm.h:217
sdrv_dma_t dma_instance
Definition: sdrv_pdm.h:213
bool data_lsb
Definition: sdrv_pdm.h:209
void * context
Definition: sdrv_pdm.h:205
pdm transfer
Definition: sdrv_pdm.h:149
uint8_t id
Definition: sdrv_pdm.h:155
uint8_t * data
Definition: sdrv_pdm.h:151
uint32_t length
Definition: sdrv_pdm.h:153
pdm module descriptions
Definition: sdrv_pdm.h:246
uint32_t clk_rate
Definition: sdrv_pdm.h:250
sdrv_pdm_stream_t stream
Definition: sdrv_pdm.h:252
sdrv_pdm_config_t * config
Definition: sdrv_pdm.h:248