打印
[DemoCode下载]

USB 音频类初始化

[复制链接]
492|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinpian101|  楼主 | 2024-1-29 19:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*--------------------------------------------------------------------------*/
/**
* [url=home.php?mod=space&uid=247401]@brief[/url]       UAC Class Initial
*
* @param[in]   None
*
* [url=home.php?mod=space&uid=266161]@return[/url]      None
*
* [url=home.php?mod=space&uid=1543424]@Details[/url]     This function is used to configure endpoints for UAC class
*/
void UAC_Init(void)
{
    /* Init setup packet buffer */
    /* Buffer for setup packet -> [0 ~ 0x7] */
    USBD->STBUFSEG = SETUP_BUF_BASE;

    /*****************************************************/
    /* EP0 ==> control IN endpoint, address 0 */
    USBD_CONFIG_EP(EP0, USBD_CFG_CSTALL | USBD_CFG_EPMODE_IN | 0);
    /* Buffer range for EP0 */
    USBD_SET_EP_BUF_ADDR(EP0, EP0_BUF_BASE);

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

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

    /*****************************************************/
    /* EP3 ==> Isochronous OUT endpoint, address 2 */
    USBD_CONFIG_EP(EP3, USBD_CFG_EPMODE_OUT | ISO_OUT_EP_NUM | USBD_CFG_TYPE_ISO);
    /* Buffer offset for EP3 */
    USBD_SET_EP_BUF_ADDR(EP3, EP3_BUF_BASE);
    /* trigger receive OUT data */
    USBD_SET_PAYLOAD_LEN(EP3, EP3_MAX_PKT_SIZE);
}

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

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

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

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

USBD_CONFIG_EP(EP3, USBD_CFG_EPMODE_OUT | ISO_OUT_EP_NUM | USBD_CFG_TYPE_ISO);
USBD_SET_EP_BUF_ADDR(EP3, EP3_BUF_BASE);
USBD_SET_PAYLOAD_LEN(EP3, EP3_MAX_PKT_SIZE);
配置了两个等时端点(EP2 用于输入,EP3 用于输出)。等时端点通常用于对时间敏感的数据传输,比如音频流。配置包括端点模式、端点号、类型(等时)和缓冲地址。此外,USBD_SET_PAYLOAD_LEN 用于设置输出端点 (EP3) 的有效负载长度。

使用特权

评论回复
沙发
xinpian101|  楼主 | 2024-1-29 19:07 | 只看该作者
USB音频开发是一个很好玩,很有乐趣的项目

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

1413

帖子

1

粉丝