这是一个USB枚举建立过程中的一个函数,小弟对这个函数不是很理解,恳请大神指教~~~
uint8_t Setup0_Process(void)
{
union
{
uint8_t* b;
uint16_t* w;
} pBuf;
#ifdef STM32F10X_CL
USB_OTG_EP *ep;
uint16_t offset = 0;
ep = PCD_GetOutEP(ENDP0);
pBuf.b = ep->xfer_buff;
#else
uint16_t offset = 1;
pBuf.b = PMAAddr + (uint8_t *)(_GetEPRxAddr(ENDP0) * 2); /*½óêÕ»o3åÇø¶Ëμã0μØÖ·*/
#endif /* STM32F10X_CL */
if (pInformation->ControlState != PAUSE)
{ /*ÕaêÇò»¸öUSB±ê×¼é豸ÇëÇó*/
pInformation->USBbmRequestType = *pBuf.b++; /*
pBuf是刚刚建立的一个union,它首地址指向接收缓冲器端点0的起始地址
问题1:标准设备请求是由主机给设备发送的,由设备返还给主机它本身的设备信息,那这个请求代码是由主机提供的,对吧?
问题2:*pBuf.b++的指向指向的接收缓冲器的首地址,把这个值赋给pInformation->USBbmRequestType 有什么意义? */
pInformation->USBbRequest = *pBuf.b++; /* bRequest */
pBuf.w += offset; /* word not accessed because of 32 bits addressing */
pInformation->USBwValue = ByteSwap(*pBuf.w++); /* wValue */
pBuf.w += offset; /* word not accessed because of 32 bits addressing */
pInformation->USBwIndex = ByteSwap(*pBuf.w++); /* wIndex */
pBuf.w += offset; /* word not accessed because of 32 bits addressing */
pInformation->USBwLength = *pBuf.w; /* wLength */
}
pInformation->ControlState = SETTING_UP;
if (pInformation->USBwLength == 0)
{
/* Setup with no data stage */
NoData_Setup0();
}
else
{
/* Setup with data stage */
Data_Setup0();
}
return Post0_Process();
}
此帖出自
小平头技术问答
一周热门 更多>