CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

APP PDM驱动

结构体

app_pdm_params_t

结构体定义如下:

表 423 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

结构体定义如下:

表 424 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

结构体定义如下:

表 425 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

结构体定义如下:

表 426 app_pdm_dma_t结构体成员
成员 描述 取值

dma_regs_t *dma_instance

DMA实例

DMA1

dma_channel_t dma_channel

DMA通道

app_dma_params_t中通道描述

pdm_init_t

结构体定义如下:

表 427 pdm_init_t结构体成员
成员 描述 取值

uint32_t mode

采样模式

该参数的取值可以是下列值中的任意一个:

  • PDM_MODE_LEFT(左声道采样)

  • PDM_MODE_RIGHT(右声道采样)

  • PDM_MODE_STEREO(立体声采样)

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

采样率

该参数的取值可以是下列值中的任意一个:

  • PDM_SAMPLE_RATE_15_625K(15.625 kHz)
  • PDM_SAMPLE_RATE_16K(16 kHz)

  • PDM_SAMPLE_RATE_8K(8 kHz)

详细信息请参考文件:SDK_Folder\drivers\inc\hal\gr55xx_ll_pdm.h

app_pdm_evt_t

结构体定义如下:

表 428 app_pdm_evt_t结构体成员
成员 描述 取值

app_pdm_evt_type_t type

PDM事件

该参数的取值可以是下列值中的任意一个:

  • 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右通道溢出)

uint32_t error_code

错误码

该参数的取值可以是下列值中的任意一个:

  • HAL_PDM_ERROR_NONE(无错误)

  • HAL_PDM_ERROR_TIMEOUT(超时)

  • HAL_PDM_ERROR_TRANSFER(发送错误)

  • HAL_PDM_ERROR_DMA(DMA传输错误)

  • HAL_PDM_ERROR_INVALID_PARAM(无效参数)

枚举

app_pdm_state_t

表 429 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

表 430 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右通道溢出

接口函数

表 431 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

表 432 app_pdm_init接口
函数原型

uint16_t app_pdm_init(app_pdm_params_t *p_params, app_pdm_evt_handler_t evt_handler)

功能说明

初始化PDM

输入参数
  • p_params:初始化参数的结构体指针

  • evt_handler:用户自己实现的中断回调函数

返回值

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

表 433 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

表 434 app_pdm_left_start_dma接口
函数原型

uint16_t app_pdm_left_start_dma(uint16_t *p_data, uint32_t length)

功能说明

PDM以DMA方式(异步)接收左声道数据

输入参数
  • p_data:数据缓存指针

  • length:数据长度

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_pdm_right_start_dma

表 435 app_pdm_right_start_dma接口
函数原型

uint16_t app_pdm_right_start_dma(uint16_t *p_data, uint32_t length)

功能说明

PDM以DMA方式(异步)接收右声道数据

输入参数
  • p_data:数据缓存指针

  • length:数据长度

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_pdm_stereo_start_dma

表 436 app_pdm_stereo_start_dma接口
函数原型

uint16_t app_pdm_stereo_start_dma(uint32_t *p_data, uint32_t length)

功能说明

PDM以DMA方式(异步)接收双声道数据

输入参数
  • p_data:数据缓存指针

  • length:数据长度

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_pdm_left_start_dma_sg_llp

表 437 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方式(异步)接收左声道数据,带分散聚合与传输链表配置

输入参数
  • p_data:数据缓存指针

  • length:数据长度

  • sg_llp_config:分散聚合与传输链表

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_pdm_right_start_dma_sg_llp

表 438 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方式(异步)接收右声道数据,带分散聚合与传输链表配置

输入参数
  • p_data:数据缓存指针

  • length:数据长度

  • sg_llp_config:分散聚合与传输链表

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_pdm_stereo_start_dma_sg_llp

表 439 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方式(异步)接收双声道数据,带分散聚合与传输链表配置

输入参数
  • p_data:数据缓存指针

  • length:数据长度

  • sg_llp_config:分散聚合与传输链表

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_pdm_get_handle

表 440 app_pdm_get_handle接口
函数原型

pdm_handle_t *app_pdm_get_handle(void)

功能说明

获取PDM句柄

输入参数
返回值

PDM句柄:详见SDK_Folder\drivers\inc\hal\gr55xx_hal_pdm.h结构体

备注

扫描关注

打开微信,使用“扫一扫”即可关注。