[DemoCode下载] USB 音频类初始化

[复制链接]
1116|2
 楼主| xinpian101 发表于 2024-1-29 19:07 | 显示全部楼层 |阅读模式
  1. /*--------------------------------------------------------------------------*/
  2. /**
  3. * [url=home.php?mod=space&uid=247401]@brief[/url]       UAC Class Initial
  4. *
  5. * @param[in]   None
  6. *
  7. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  8. *
  9. * [url=home.php?mod=space&uid=1543424]@Details[/url]     This function is used to configure endpoints for UAC class
  10. */
  11. void UAC_Init(void)
  12. {
  13.     /* Init setup packet buffer */
  14.     /* Buffer for setup packet -> [0 ~ 0x7] */
  15.     USBD->STBUFSEG = SETUP_BUF_BASE;

  16.     /*****************************************************/
  17.     /* EP0 ==> control IN endpoint, address 0 */
  18.     USBD_CONFIG_EP(EP0, USBD_CFG_CSTALL | USBD_CFG_EPMODE_IN | 0);
  19.     /* Buffer range for EP0 */
  20.     USBD_SET_EP_BUF_ADDR(EP0, EP0_BUF_BASE);

  21.     /* EP1 ==> control OUT endpoint, address 0 */
  22.     USBD_CONFIG_EP(EP1, USBD_CFG_CSTALL | USBD_CFG_EPMODE_OUT | 0);
  23.     /* Buffer range for EP1 */
  24.     USBD_SET_EP_BUF_ADDR(EP1, EP1_BUF_BASE);

  25.     /*****************************************************/
  26.     /* EP2 ==> Isochronous IN endpoint, address 1 */
  27.     USBD_CONFIG_EP(EP2, USBD_CFG_EPMODE_IN | ISO_IN_EP_NUM | USBD_CFG_TYPE_ISO);
  28.     /* Buffer offset for EP2 */
  29.     USBD_SET_EP_BUF_ADDR(EP2, EP2_BUF_BASE);

  30.     /*****************************************************/
  31.     /* EP3 ==> Isochronous OUT endpoint, address 2 */
  32.     USBD_CONFIG_EP(EP3, USBD_CFG_EPMODE_OUT | ISO_OUT_EP_NUM | USBD_CFG_TYPE_ISO);
  33.     /* Buffer offset for EP3 */
  34.     USBD_SET_EP_BUF_ADDR(EP3, EP3_BUF_BASE);
  35.     /* trigger receive OUT data */
  36.     USBD_SET_PAYLOAD_LEN(EP3, EP3_MAX_PKT_SIZE);
  37. }

这段代码是在初始化 USB 音频类(UAC)的端点,用于一个嵌入式系统或微控制器上的 USB 音频设备。下面是代码的关键部分解析:
设置包缓冲初始化:
  1. USBD->STBUFSEG = SETUP_BUF_BASE;
这行代码设置了设置包缓冲的基地址。设置包是一种用于控制传输的特殊 USB 数据包。
控制端点初始化 (EP0 和 EP1):

  1. USBD_CONFIG_EP(EP0, USBD_CFG_CSTALL | USBD_CFG_EPMODE_IN | 0);
  2. USBD_SET_EP_BUF_ADDR(EP0, EP0_BUF_BASE);

  3. USBD_CONFIG_EP(EP1, USBD_CFG_CSTALL | USBD_CFG_EPMODE_OUT | 0);
  4. USBD_SET_EP_BUF_ADDR(EP1, EP1_BUF_BASE);
这配置了两个控制端点,一个用于输入事务 (EP0),另一个用于输出事务 (EP1)。配置包括端点模式、STALL 条件和缓冲地址的设置。
等时端点初始化 (EP2 和 EP3):

  1. USBD_CONFIG_EP(EP2, USBD_CFG_EPMODE_IN | ISO_IN_EP_NUM | USBD_CFG_TYPE_ISO);
  2. USBD_SET_EP_BUF_ADDR(EP2, EP2_BUF_BASE);

  3. USBD_CONFIG_EP(EP3, USBD_CFG_EPMODE_OUT | ISO_OUT_EP_NUM | USBD_CFG_TYPE_ISO);
  4. USBD_SET_EP_BUF_ADDR(EP3, EP3_BUF_BASE);
  5. USBD_SET_PAYLOAD_LEN(EP3, EP3_MAX_PKT_SIZE);
配置了两个等时端点(EP2 用于输入,EP3 用于输出)。等时端点通常用于对时间敏感的数据传输,比如音频流。配置包括端点模式、端点号、类型(等时)和缓冲地址。此外,USBD_SET_PAYLOAD_LEN 用于设置输出端点 (EP3) 的有效负载长度。
 楼主| xinpian101 发表于 2024-1-29 19:07 | 显示全部楼层
USB音频开发是一个很好玩,很有乐趣的项目
雾都浪漫 发表于 2025-9-11 15:15 | 显示全部楼层
USB 音频类初始化需枚举设备,加载驱动,配置音频接口、采样率 / 位深,建立音频流传输通道,完成端点与缓冲区映射。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

129

主题

1650

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部