STM32USBLIB里面的一点细节求证!!

vviking   2010-8-27 10:59 楼主


/******************************************************************************* * 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初学,大家莫笑我低级哟!

回复评论 (3)

看来这个问题,大家都不感兴趣。

另外有个问题想向大家请教一下,希望明白的人能不吝指点!
就是STM32的USB的最大缓冲区是512BYTES,而在USB2.0的FULL SPEED下面,最大传输的包长度可以到1023BYTES,大家是怎么样处理这个问题的呢?抑或STM32的USB是不能够完全支持到USB2.0 FULL SPEED的呢?
点赞  2010-8-27 14:23
经过两天的学习,弄清楚了一些眉目,基本上就是第一个问题ST是对的,第二个问题我是对的。
问题1,在STM32里面USB的双缓冲机制就是当你采用双缓冲时,BUF0和BUF1就分别对应TXBUF和RXBUF了。
问题2,STM32的512BYTES的缓冲区特征就决定了ISO同步传输的最大长度是512字节(其实还达不到,因为这个512的前面还固定分配作为端点对应起始地址)。
是我的问题太幼稚,不值一呬,还是我的帖子大家都看不到呢?两,三天时间竟然无人理睬!
只是觉得21IC越来越不像21IC了。
点赞  2010-8-30 18:20
哈哈,菜鸟的问题可能大家不屑回复,而高手的问题可能别人没有你钻研的这么深入,没有发言权。

表面现象都是无人理睬,但内涵却大不一样,
点赞  2010-8-30 18:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复