解析/** * @brief Set USB payload size (IN data) * * @param[in] ep The USB endpoint ID. NUC123 supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. * * @param[in] size The transfer length. * * @return None * * @details This macro will write the transfer length to USB_MXPLDx register for IN data transaction. * */ #define USBD_SET_PAYLOAD_LEN(ep, size) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4))) = (size))
时间: 2024-01-17 12:24:53 浏览: 141
这是一段注释,说明了一个宏定义的作用。这个宏定义名为USBD_SET_PAYLOAD_LEN,用于设置 USB 的 IN 数据的 payload 大小。其中,ep 代表 USB 端点的 ID,NUC123 支持 8 个硬件端点 ID,取值范围为 0 ~ 7;size 代表传输长度。该宏定义会将传输长度写入到 USB_MXPLDx 寄存器中,以进行 IN 数据事务。
相关问题
解析/** * @brief To support byte access between USB SRAM and system SRAM * * @param[in] dest Destination pointer. * * @param[in] src Source pointer. * * @param[in] size Byte count. * * @return None * * @details This function will copy the number of data specified by size and src parameters to the address specified by dest parameter. * */ static __INLINE void USBD_MemCopy(uint8_t *dest, uint8_t *src, int32_t size) { while(size--) *dest++ = *src++;
这是一段注释,说明了一个函数的作用。这个函数名为USBD_MemCopy,用于在 USB SRAM 和系统 SRAM 之间进行字节访问。其中,dest 是目标指针,src 是源指针,size 是字节数。该函数会将由 size 和 src 参数指定的数据数量复制到由 dest 参数指定的地址中。具体实现使用了一个 while 循环,每次将 src 指向的字节内容赋值给 dest 指向的字节,并将指针向后移动一位。循环次数为 size,即一共复制了 size 个字节。
解析/*--------------------------------------------------------------------------*/ /** * @brief UAC Class Initial * * @param[in] None * * @return None * * @details 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); USBD_CONFIG_EP(EP2, USBD_CFG_EPMODE_IN | BULK_IN_EP_NUM); /* 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); USBD_CONFIG_EP(EP3, USBD_CFG_EPMODE_OUT | BULK_OUT_EP_NUM); /* 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); }
这段代码是用于初始化 UAC 类的端点(endpoints),并配置它们的缓冲区。首先,设置了 STBUFSEG 寄存器,使用 SETUP_BUF_BASE 作为设置包(setup packet)的缓冲区。然后,配置了 EP0 和 EP1,它们分别是控制 IN 和控制 OUT 端点,地址都是 0。对于每个端点,都使用 USBD_CONFIG_EP 函数进行配置,使用 USBD_SET_EP_BUF_ADDR 函数设置它的缓冲区地址。最后,配置了 EP2 和 EP3,分别是 Isochronous IN 和 Isochronous OUT 端点,地址分别是 1 和 2。但是,注释中提到的 ISO_IN_EP_NUM、ISO_OUT_EP_NUM 和 EP3_MAX_PKT_SIZE 没有在代码中定义。
阅读全文