JieLi_AC791

开发板介绍

  • 1. 开发板概述
  • 2. 开发板资源
  • 3. 系统框图
  • 4. 功能框图
  • 5. 核心板IO功能图表
  • 6. 扩展使用指南
  • 7. 相关文档
  • 8. 开发板申请入口

快速入门

  • 1. 概述
  • 2. 开发准备说明
  • 3. 开发环境安装说明
  • 4. SDK工程编译与下载
  • 5. SDK 应用开发说明
  • 6. 调试方式

工程模板

  • 1. 概述
  • 2. DEMO工程说明
  • 3. WIFI_STORY_MACHINE 工程说明
  • 4. WIFI_CAMERA工程说明
  • 5. WIFI_IPC工程说明
  • 6. SCAN_BOX工程说明

模块例程

  • 1. 概述
  • 2. 外设部分
  • 3. Wi-Fi部分
  • 4. 蓝牙部分
  • 5. UI部分
  • 6. VIDEO部分
  • 7. 系统部分
  • 8. 网络协议部分
  • 9. 音频部分
    • 9.1. AUDIO_ADC
    • 9.2. AUDIO_DAC
    • 9.3. IIS(ALNK)
    • 9.4. PDM LINK
      • 9.4.1. 应用实例
      • 9.4.2. 配置说明
      • 9.4.3. 常见问题
      • 9.4.4. API参考
    • 9.5. SRC变采样
    • 9.6. EQ
    • 9.7. 音频编码AUDIO_ENC
    • 9.8. 音频解码AUDIO_DEC
    • 9.9. DNS神经网络降噪算法
    • 9.10. AISP打断唤醒
    • 9.11. FM电台
    • 9.12. AB点复读播放
    • 9.13. 音频播放跳转与时间获取
    • 9.14. 语音活动检测(VAD)
    • 9.15. 变速变调
    • 9.16. AEC回声消除算法
    • 9.17. 数字音量(DIGITAL_VOL)
    • 9.18. 音频FFT频谱显示
    • 9.19. dec解码virtual输出
    • 9.20. 编码数据流dec解码
    • 9.21. lc3编解码(jla)
    • 9.22. opus编解码以及ogg封装
    • 9.23. 单曲循环播放命令
    • 9.24. virtual_enc虚拟源编码
    • 9.25. AUDIO_VFS_OPS
  • 10. 第三方库部分

其他

  • FAQ汇总
  • 社区
  • 官方认证
  • 版本
  • 关于
JieLi_AC791
  • 9. 音频部分
  • 9.4. PDM LINK

9.4. PDM LINK

概述

本说明介绍了PLNK数字麦的配置和使用说明

9.4.1. 应用实例

示例演示:

  • 进入 demo_DevKitBoard/include/demo_config.h ,开启宏 USE_AUDIO_DEMO

  • 按键切换使用录音模式,在app_config.h中选择录音输入源为PLNK,如: #define CONFIG_AUDIO_ENC_SAMPLE_SOURCE AUDIO_ENC_SAMPLE_SOURCE_PLNK0 //录音输入源选择

9.4.2. 配置说明

  • 硬件连接:将数字麦引出的MIC_VDD(电源3.3V)、GND(地)、DAT(数据通道)和CLK(时钟线)进行连接。两个数字麦可共用DAT数据线和CLK时钟线

  • PLNK使用配置 board.c:

//hw_channel 输入通道选择
#define PLNK_MIC_MASK                                       (BIT(0) | BIT(1)) //掩码通道
#define PLNK_CH_MIC_L                                       BIT(0)            //通道0 两个MIC共用DAT0也使用该宏
#define PLNK_CH_MIC_R                                       BIT(1)            //通道1 两个MIC共用DAT1也使用该宏
#define PLNK_CH_MIC_DOUBLE                          (BIT(0) | BIT(1)) //通道0和通道1

//plnk参数结构体
struct plnk_platform_data {
    void (*port_remap_cb)(void);     //设置IO重映射
    void (*port_unremap_cb)(void);   //解除IO重映射
    u8 hw_channel;                   //数字麦克风的通道选择(见hw_channel 输入通道选择)
    u8 clk_out;                      //是否输出时钟信号 1:是 0:否
    u8 high_gain;                    //0db增益输出 1:使用 0:-6db输出
    u8 sample_edge;                  //采样边沿 1:上升沿  0:下降沿
    u16 sr_points;                   //采样点,不建议修改
    u8 share_data_io;                //两个数字麦共用一个DAT脚 1:是 0:否
    u8 dc_cancelling_filter;         //去直流滤波器,0-15
    u32 dump_points_num;             //丢弃硬件刚打开是的数据点数
};

//board.c板级文件配置
//设置重映射
static void plnk0_port_remap_cb(void)
{
    //重映射PDM DAT-PH2   PDM CLK-PH3     重映射的DAT脚和CLK时钟脚可根据原理图所有引脚选择
    extern int gpio_plnk_rx_input(u32 gpio, u8 index, u8 data_sel);
    gpio_plnk_rx_input(IO_PORTH_02, 0, 0);                      //plnk数字DAT0输入 ,当第三个参数为1时gpio_plnk_rx_input(IO_PORTH_02, 0, 0);plnk数字DAT1输入
    gpio_output_channle(IO_PORTH_03, CH0_PLNK0_SCLK_OUT);       //SCLK0使用outputchannel0
    JL_IOMAP->CON3 |= BIT(18);                                  //PLNK0 SCLK0 输出使能,若使用PLNK1数字麦1,JL_IOMAP->CON3 |= BIT(19)
}

//解除重映射
static void plnk0_port_unremap_cb(void)
{
    JL_IOMAP->CON3 &= ~BIT(18);                                 //PLNK0 SCLK0 输出失能       若使用PLNK1数字麦1,JL_IOMAP->CON3 &= ~BIT(19);
    gpio_clear_output_channle(IO_PORTH_03, CH0_PLNK0_SCLK_OUT); //释放outputchannel0
    gpio_set_die(IO_PORTH_02, 0);                               //数字/模拟输入切换
}

//plnk的时钟和数据引脚都采用重映射的使用例子
static const struct plnk_platform_data plnk0_data = {
    .hw_channel = PLNK_CH_MIC_L,                      //使用DAT0输入
    .clk_out = 1,                                     //使能时钟输出
    .port_remap_cb = plnk0_port_remap_cb,             //重映射
    .port_unremap_cb = plnk0_port_unremap_cb,         //解除重映射
    .sample_edge = 0,                                 //在CLK的下降沿采样左MIC,上升沿采样右MIC
    .share_data_io = 1,                               //两个数字MIC共用一个DAT脚
    .high_gain = 1,                                   //强增益输出
    .dc_cancelling_filter = 14,                       //去直流滤波器
    .dump_points_num = 640,                           //丢弃刚打开硬件时的数据点数
};

9.4.3. 常见问题

Note

  • 检查设置的采样边沿是否和接入的数字麦的datasheet说明是否一致

  • 设置的IO重映射是否正确

  • 不共用DAT脚时,可使用DAT0和DAT1两个通道,设置hw_channel = PLNK_CH_MIC_L | PLNK_CH_MIC_R

9.4.4. API参考

可使用PDMLINK模块数量

MAX_PLNK_NUM

可使用PDMLINK的模块数量

输入通道选择

PLNK_MIC_MASK
PLNK_CH_MIC_L

两个MIC共用DAT0也使用该宏

PLNK_CH_MIC_R

两个MIC共用DAT1也使用该宏

PLNK_CH_MIC_DOUBLE
int plnk_open(const struct plnk_platform_data *pd, u8 index)

初始化PLNK

Parameters
  • pd – plnk配置参数结构体参数指针

  • index – 0:plnk0 1:plnk1

Returns

0: 成功

Returns

-1: 失败

int plnk_start(u8 index)

启动PLNK

Parameters

index – 0:plnk0 1:plnk1

Returns

0: 成功

Returns

-1: 失败

int plnk_stop(u8 index)

停止PLNK

Parameters

index – 0:plnk0 1:plnk1

Returns

0: 成功

Returns

-1: 失败

int plnk_close(u8 index)

关闭PLNK

Parameters

index – 0:plnk0 1:plnk1

Returns

0: 成功

Returns

-1: 失败

int plnk_set_sample_rate(int sample_rate, u8 index)

设置PLNK采样率

Parameters
  • sample_rate – 采样率

  • index – 0:plnk0 1:plnk1

Returns

0: 成功

Returns

-1: 失败

void plnk_set_handler_cb(void *priv, void (*cb)(void*, u8 *data, int len), u8 index)

设置PLNK中断处理函数中的回调函数,用于处理采集到的数据

Parameters
  • priv – 回调函数的私有指针

  • cb – 回调函数

  • index – 0:plnk0 1:plnk1

void plnk_irq_handler(u8 index)

PLNK中断处理函数

Parameters

index – 0:plnk0 1:plnk1


Previous Next

© Copyright 2010-present, 杰理科技股份有限公司. Last updated on May 17, 2024.