BES平台开发笔记7——linein功能

linein功能原理

使用I2S协议,将外部设备的音频数据通过3.5mm数据线传输给耳机,耳机用speaker播放音频数据。
在这里插入图片描述
3,5mm的数据线,有三级和四级式插针结构,因为四级包含了左声道L、右声道R、麦克风、GND,三级少了一个麦克风。单纯的传输外部音乐音频的话,三级其实也够了。

硬件设计

根据pinmux表格参考文件步板子,配置I2S的PIN。
如图参考:
在这里插入图片描述

软件配置

BES平台的linein功能已经集成,配置比较简单。
开宏:

#export AUDIO_LINEIN ?=1
ifeq($(AUDIO_LINEIN),1)
KBUILD_CPPFLAGS +=-DAUDIO_LINEIN
export AF_DEVICE_I2S:=1									

检查一下I2S是否打开,如果没有打开需要将其打开:

KBUILD_CPPFLAGS += -DI2S_MCLK_FROM_SPDIF
KBUILD_CPPFLAGS += -DI2S_MCLK_PIN
KBUILD_CPPFLAGS += -DI2S_MCLK_IOMUX_INDEX=33

检查一下公版的你的PIN配置是否和公版默认配置一致:
void hal_iomux_set_i2s1(void)
void hal_iomux_set_i2s_mclk(void)

void hal_iomux_set_mcu_i2s0(void)
{
    static const struct HAL_IOMUX_PIN_FUNCTION_MAP pinmux_i2s[] = {
        {HAL_IOMUX_PIN_P0_1, HAL_IOMUX_FUNC_MCU_I2S0_WS,   I2S0_VOLTAGE_SEL, HAL_IOMUX_PIN_NOPULL},
        {HAL_IOMUX_PIN_P0_0, HAL_IOMUX_FUNC_MCU_I2S0_SCK,  I2S0_VOLTAGE_SEL, HAL_IOMUX_PIN_NOPULL},
        {HAL_IOMUX_PIN_P0_2, HAL_IOMUX_FUNC_MCU_I2S0_SDI0, I2S0_VOLTAGE_SEL, HAL_IOMUX_PIN_NOPULL},
        {HAL_IOMUX_PIN_P0_3, HAL_IOMUX_FUNC_MCU_I2S0_SDO,  I2S0_VOLTAGE_SEL, HAL_IOMUX_PIN_NOPULL},
    };

    hal_iomux_init(pinmux_i2s, ARRAY_SIZE(pinmux_i2s));
}

配置音频播放通道和初始化AD模块:
在int app_play_linein_onoff(bool onoff)函数中修改。
第一个device是耳机播放解码配置不要乱改,相当于耳机的linein音频的输出端。
在这里插入图片描述第二个device是耳机linein数据的输入,需要改为AUD_STREAM_USE_I2S0_MASTER
在这里插入图片描述AD模块的使能配置,在下面stream打开后调用即可。

   af_stream_open(AUD_STREAM_ID_0, AUD_STREAM_CAPTURE, &stream_cfg);
   ADxxx_init();
   af_stream_start(AUD_STREAM_ID_0, AUD_STREAM_CAPTURE);

最后就是根据检测到linein插入,调用int app_play_linein_onoff(bool onoff)播放外部音乐即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值