/*--------------------------------------------------------------------------*/
/**
* [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) 的有效负载长度。
|