APP PDM驱动
结构体
app_pdm_params_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
|
app_pdm_pin_cfg_t pin_cfg |
引脚配置 |
参考app_pdm_pin_cfg_t结构体 |
|
app_pdm_dma_t dma_cfg |
DMA配置 |
参考app_pdm_dma_t结构体 |
|
pdm_init_t init |
初始化参数结构体 |
参考pdm_init_t结构体 |
|
pdm_env_t pdm_env |
仅用于记录初始化设备的句柄、相关参数和信号量等,不需要配置 |
app_pdm_pin_cfg_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
|
app_pdm_pin_t clk |
时钟引脚 |
参考app_pdm_pin_t结构体 |
|
app_pdm_pin_t data |
数据引脚 |
参考app_pdm_pin_t结构体 |
app_pdm_pin_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
|
app_io_type_t type |
IO类型 |
同app_io_evt_t定义 |
|
app_io_mux_t mux |
设置IO映射功能 |
查看app_io_init_t结构体定义,具体取值参考芯片Datasheet中的Pin Mux |
|
uint32_t pin |
选择IO引脚 |
查看app_io_init_t结构体定义,具体取值参考芯片Datasheet中的Pin Mux |
|
app_io_pull_t pull |
设置IO上拉/下拉/浮空 |
同app_io_init_t结构体中的描述 |
app_pdm_dma_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
|
dma_regs_t *dma_instance |
DMA实例 |
DMA1 |
|
dma_channel_t dma_channel |
DMA通道 |
同app_dma_params_t中通道描述 |
pdm_init_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
|
uint32_t mode |
采样模式 |
该参数的取值可以是下列值中的任意一个:
|
|
uint32_t gain_l |
左声道增益值,低14位有效,无符号数 |
0x0 ~ 0x3FFF 功率增益转换公式:Gain = 20*log(gain_l/1024)(dB) |
|
uint32_t gain_r |
右声道增益值,低14位有效,无符号数 |
0x0 ~ 0x3FFF 功率增益转换公式:Gain = 20*log(gain_r/1024)(dB) |
|
uint32_t sample_rate |
采样率 |
该参数的取值可以是下列值中的任意一个:
|
详细信息请参考文件:SDK_Folder\drivers\inc\hal\gr55xx_ll_pdm.h。
app_pdm_evt_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
|
app_pdm_evt_type_t type |
PDM事件 |
该参数的取值可以是下列值中的任意一个:
|
|
uint32_t error_code |
错误码 |
该参数的取值可以是下列值中的任意一个:
|
枚举
app_pdm_state_t
| 成员 | 描述 |
|---|---|
|
APP_PDM_INACTIVITY = 0 |
PDM不可用 |
|
APP_PDM_ACTIVITY = 1 |
PDM运行中 |
|
APP_PDM_SLEEP = 2 |
PDM睡眠 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_pdm.h。
app_pdm_evt_type_t
| 成员 | 描述 |
|---|---|
|
APP_PDM_EVT_DMA_ERROR = 0 |
DMA传输错误 |
|
APP_PDM_EVT_DMA_TFR = 1 |
DMA传输完成 |
|
APP_PDM_EVT_DMA_BLK = 2 |
DMA Block传输完成 |
|
APP_PDM_EVT_LEFT_OVERFLOW = 3 |
PDM左通道溢出 |
|
APP_PDM_EVT_RIGHT_OVERFLOW = 4 |
PDM右通道溢出 |
接口函数
| API | 芯片 | ||||
|---|---|---|---|---|---|
| GR551x | GR5526 | GR5x25 | GR533x | GR5405 | |
|
app_pdm_init |
N |
Y |
Y | N | N |
|
app_pdm_deinit |
N |
Y |
Y | N | N |
|
app_pdm_left_start_dma |
N |
Y |
Y | N | N |
|
app_pdm_right_start_dma |
N |
Y |
Y | N | N |
|
app_pdm_stereo_start_dma |
N |
Y |
Y | N | N |
|
app_pdm_left_start_dma_sg_llp |
N |
Y |
Y | N | N |
|
app_pdm_right_start_dma_sg_llp |
N |
Y |
Y | N | N |
|
app_pdm_stereo_start_dma_sg_llp |
N |
Y |
Y | N | N |
|
app_pdm_get_handle |
N |
Y |
Y | N | N |
app_pdm_init
| 函数原型 |
uint16_t app_pdm_init(app_pdm_params_t *p_params, app_pdm_evt_handler_t evt_handler) |
|---|---|
| 功能说明 |
初始化PDM |
| 输入参数 |
|
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
回调函数形式参照typedef void (*app_pdm_evt_handler_t)(app_pdm_evt_t *type); HAL层已经实现中断标志位的清理,用户不用关心中断标志的清理 |
app_pdm_deinit
| 函数原型 |
uint16_t app_pdm_deinit(void) |
|---|---|
| 功能说明 |
反初始化PDM |
| 输入参数 | |
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_pdm_left_start_dma
| 函数原型 |
uint16_t app_pdm_left_start_dma(uint16_t *p_data, uint32_t length) |
|---|---|
| 功能说明 |
PDM以DMA方式(异步)接收左声道数据 |
| 输入参数 |
|
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_pdm_right_start_dma
| 函数原型 |
uint16_t app_pdm_right_start_dma(uint16_t *p_data, uint32_t length) |
|---|---|
| 功能说明 |
PDM以DMA方式(异步)接收右声道数据 |
| 输入参数 |
|
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_pdm_stereo_start_dma
| 函数原型 |
uint16_t app_pdm_stereo_start_dma(uint32_t *p_data, uint32_t length) |
|---|---|
| 功能说明 |
PDM以DMA方式(异步)接收双声道数据 |
| 输入参数 |
|
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_pdm_left_start_dma_sg_llp
| 函数原型 |
uint16_t app_pdm_left_start_dma_sg_llp(uint16_t *p_data, uint32_t length, dma_sg_llp_config_t *sg_llp_config) |
|---|---|
| 功能说明 |
PDM以DMA方式(异步)接收左声道数据,带分散聚合与传输链表配置 |
| 输入参数 |
|
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_pdm_right_start_dma_sg_llp
| 函数原型 |
uint16_t app_pdm_right_start_dma_sg_llp(uint16_t *p_data, uint32_t length, dma_sg_llp_config_t *sg_llp_config) |
|---|---|
| 功能说明 |
PDM以DMA方式(异步)接收右声道数据,带分散聚合与传输链表配置 |
| 输入参数 |
|
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_pdm_stereo_start_dma_sg_llp
| 函数原型 |
uint16_t app_pdm_stereo_start_dma_sg_llp(uint32_t *p_data, uint32_t length, dma_sg_llp_config_t *sg_llp_config) |
|---|---|
| 功能说明 |
PDM以DMA方式(异步)接收双声道数据,带分散聚合与传输链表配置 |
| 输入参数 |
|
| 返回值 |
APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_pdm_get_handle
| 函数原型 |
pdm_handle_t *app_pdm_get_handle(void) |
|---|---|
| 功能说明 |
获取PDM句柄 |
| 输入参数 | |
| 返回值 |
PDM句柄:详见SDK_Folder\drivers\inc\hal\gr55xx_hal_pdm.h结构体 |
| 备注 |
示例工程
同I2S,请参考示例工程。