/******************************************************************************* * Macro Name : SetEPDblBuffCount / SetEPDblBuf0Count / SetEPDblBuf1Count. * Description : Gets buffer 0/1 address of a double buffer endpoint. * Input : bEpNum: endpoint number. * : bDir: endpoint dir EP_DBUF_OUT = OUT * EP_DBUF_IN = IN * : wCount: Counter value * Output : None. * Return : None. *******************************************************************************/
#define _SetEPDblBuf0Count(bEpNum, bDir, wCount) { \
if(bDir == EP_DBUF_OUT)\
/* OUT endpoint */ \
{_SetEPRxDblBuf0Count(bEpNum,wCount);} \
else if(bDir == EP_DBUF_IN)\
/* IN endpoint */ \
*_pEPTxCount(bEpNum) = (uint32_t)wCount; \
} /* SetEPDblBuf0Count*/
#define _SetEPDblBuf1Count(bEpNum, bDir, wCount) { \
if(bDir == EP_DBUF_OUT)\
/* OUT endpoint */ \
{_SetEPRxCount(bEpNum,wCount);}\
else if(bDir == EP_DBUF_IN)\
/* IN endpoint */\
*_pEPRxCount(bEpNum) = (uint32_t)wCount; \
} /* SetEPDblBuf1Count */
上面这个是在STM32的USB LIB里面的一段代码(usb_regs.h中),上面分别对DBL的BUF0和DBL的BUF1设置数值,而第2个(红色部分)是不是应该也是*pEPTxCount(bEpNum)呢?
我是USB初学,大家莫笑我低级哟!
看来这个问题,大家都不感兴趣。
另外有个问题想向大家请教一下,希望明白的人能不吝指点!
就是STM32的USB的最大缓冲区是512BYTES,而在USB2.0的FULL SPEED下面,最大传输的包长度可以到1023BYTES,大家是怎么样处理这个问题的呢?抑或STM32的USB是不能够完全支持到USB2.0 FULL SPEED的呢?
经过两天的学习,弄清楚了一些眉目,基本上就是第一个问题ST是对的,第二个问题我是对的。
问题1,在STM32里面USB的双缓冲机制就是当你采用双缓冲时,BUF0和BUF1就分别对应TXBUF和RXBUF了。
问题2,STM32的512BYTES的缓冲区特征就决定了ISO同步传输的最大长度是512字节(其实还达不到,因为这个512的前面还固定分配作为端点对应起始地址)。
是我的问题太幼稚,不值一呬,还是我的帖子大家都看不到呢?两,三天时间竟然无人理睬!
只是觉得21IC越来越不像21IC了。
哈哈,菜鸟的问题可能大家不屑回复,而高手的问题可能别人没有你钻研的这么深入,没有发言权。
表面现象都是无人理睬,但内涵却大不一样,