打印

STM32 USB SPEAKER例程的问题

[复制链接]
4488|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icer1|  楼主 | 2010-2-21 15:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32 USB SPEAKER例程的问题

在UM0424的usb speaker程序里面,speaker作为一个OUT端点,数据是从pc发到stm32,stm32是作为接收数据的,
资料中说:“同一寄存器中的DTOG_RX位用来标识接收同步端点,DTOG_TX位用来标识发送同步端”

但是例子程序却是这样子写的:
void EP1_OUT_Callback(void)
{
  uint16_t Data_Len;       // data length
  if (GetENDPOINT(ENDP1) & EP_DTOG_TX)//为什么不是判断DTOG_RX呢,
//#define EP_DTOG_RX     (0x4000)  
//#define EP_DTOG_TX     (0x0040)  
  {
    //read from ENDP1_BUF0Addr buffer
    Data_Len = GetEPDblBuf0Count(ENDP1);
    PMAToUserBufferCopy(Stream_Buff, ENDP1_BUF0Addr, Data_Len);
  }
  else
  {
    //read from ENDP1_BUF1Addr buffer
    Data_Len = GetEPDblBuf1Count(ENDP1);
    PMAToUserBufferCopy(Stream_Buff, ENDP1_BUF1Addr, Data_Len);
  }
  FreeUserBuffer(ENDP1, EP_DBUF_OUT);
  In_Data_Offset += Data_Len;
}

不明白了
沙发
司徒老鹰| | 2010-2-22 00:36 | 只看该作者
等待版主……

使用特权

评论回复
板凳
ST_ARM| | 2010-2-22 10:27 | 只看该作者
void EP1_OUT_Callback(void)
{
  uint16_t Data_Len;       // data length
  if (GetENDPOINT(ENDP1) & EP_DTOG_TX)//为什么不是判断DTOG_RX呢,

OUT是向PC发送数据,而RX是从PC接收数据。RX和TX是相对于PC来说的。

使用特权

评论回复
地板
ST_ARM| | 2010-2-22 15:39 | 只看该作者
我也再次调试了一下程序,发现使用EP_DTOG_TX和EP_DTOG_RX的结果是一样的,也就是说EP_DTOG_TX和EP_DTOG_RX是同步翻转的,我们将就此问题向欧洲的工程师咨询一下。

使用特权

评论回复
5
elvyis| | 2011-9-8 16:11 | 只看该作者
到底解决没有啊?我也正在弄这个。

使用特权

评论回复
6
elvyis| | 2011-9-9 16:33 | 只看该作者
USB Speaker的例程终于出声了,但是声音严重失真,而且音量调得稍大点(10-100)的时候,基本就只听到沙沙声,而调到(0-10)的话就还能听到歌声,但是失真比较大?到底是怎么回事?难道是因为我用的DAC(WM8725)不适用吗?请香主相助啊,先谢过。

使用特权

评论回复
7
恋子炎| | 2013-8-31 09:56 | 只看该作者
等时传输下的双缓冲翻转位只是用来切换buff0和buff1,和接受还是发送没有必然联系。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

26

帖子

0

粉丝