Files
luban-lite-t3e-pro/packages/third-party/cherryusb/docs/source/demo/audio_mic_speaker.rst
刘可亮 7bbc029dae v1.0.0
2023-08-30 16:21:18 +08:00

43 lines
1.6 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
USB 双通道麦克风和扬声器
============================
软件实现
------------
详细代码参考 `demo/audio_v1_mic_speaker_multichan_template.c`
.. code-block:: C
usbd_desc_register(audio_descriptor);
usbd_add_interface(usbd_audio_alloc_intf());
usbd_add_interface(usbd_audio_alloc_intf());
usbd_add_interface(usbd_audio_alloc_intf());
usbd_add_endpoint(&audio_in_ep);
usbd_add_endpoint(&audio_out_ep);
usbd_audio_add_entity(0x02, AUDIO_CONTROL_FEATURE_UNIT);
usbd_audio_add_entity(0x05, AUDIO_CONTROL_FEATURE_UNIT);
usbd_initialize();
- 调用 `audio_init` 配置 audio 描述符并初始化 usb 硬件
- 因为 麦克风+扬声器+控制需要 3 个接口,所以我们需要调用 `usbd_add_interface` 3 次
- 默认描述符中开启了 mute 和 volume 的控制,所以需要注册对应的 entity使用 `usbd_audio_add_entity`
.. code-block:: C
void usbd_audio_open(uint8_t intf)
{
}
void usbd_audio_close(uint8_t intf)
{
}
- 当我们打开 PC 的音量图标,或者音乐播放器、麦克风界面时,会调用到这两个接口,用于启动或者停止数据传输
.. code-block:: C
usbd_ep_start_write(AUDIO_IN_EP, write_buffer, 2048);
- 由于 audio 协议中没有应用层相关的协议,传输的只有音频的原始数据,所以直接调用 `usbd_ep_start_write` 即可,发送完成会进入完成中断
- 由于扬声器需要使用 out 端点,所以需要在 `usbd_configure_done_callback` 中启动第一次接收,当然如果没有能力接收,可以不启动,在想启动的时候启动