Darlingsusb
驱动牛犊
驱动牛犊
  • 注册日期2004-07-09
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1248回复:5

WORDSWAP

楼主#
更多 发布于:2004-07-29 21:17
请教各位大侠,
CYPRESS例程中有几个地方有WORDSWAP,
请问为什么?
采用51单片机必须这样吗?
为什么我枚举时读出的值不对?
OpenCore
驱动牛犊
驱动牛犊
  • 注册日期2003-03-31
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-29 23:22

那是因为你芯片的endian和USB规范里面的endian不一样,需要转换一下。

USB规范里的所有Descriptor等都是Little Endian的,
而51的许多编辑器采用的是Big Endian的,如Keil C.

Keil C51的程序需要对Word/DWord进行Swap,
而little endian的控制芯片如ARM就不必Swap.

:)
Darlingsusb
驱动牛犊
驱动牛犊
  • 注册日期2004-07-09
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-30 08:37
谢谢,opencore,我改动一下试试!

我不解的是,例程中并非所有的WORD都SWAP了!

的确,我的编译器是KEIL C,我修改程序再试试!

非常感谢你的回复!
OpenCore
驱动牛犊
驱动牛犊
  • 注册日期2003-03-31
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-30 09:09
Cypress源程序里有几个Word的,wIndex,wValue,wLength.
由于wIndex的高8位是Reserved to 0的,所以不需要Swap,
但还是因为endian不一样,需要右移一下
dReq.wIndex>>8才可取得所需值
而wValue根据不同的request定义不一样,但也只是用到了
其中的一部分位,没必要Swap后再使用,
所以源程序里面直接通过位操作来实现了,没有Swap.

^_^
Darlingsusb
驱动牛犊
驱动牛犊
  • 注册日期2004-07-09
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-30 10:31
OpenCore,请问下面这段例程的意思,好像看不太懂:
epLen = 0;
for (i=1; i<=uDev[usbaddr].bNumOfEPs; i++) // For each data endpoint
  {
    pEnp = (pEPDesc)(DBUF + 9 + 9 + epLen);  
     uDev[usbaddr].bEPAddr   = pEnp->bEPAdd;

    uDev[usbaddr].bAttr = pEnp->bAttr

    uDev[usbaddr].wPayLoad = pEnp->wPayLoad;

   uDev[usbaddr].bInterval = pEnp->bInterval
uDev[usbaddr].bData1 = 0;       epLen += 7;
}
其中+9,和+7不清楚?
OpenCore
驱动牛犊
驱动牛犊
  • 注册日期2003-03-31
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-30 20:08
2个 +9 大概是因为Interface Descriptor和Configure Descriptor 的结构体都是9个字节。
+7则是因为Endpoint Descriptor的结构体是7个字节。


[编辑 -  7/30/04 by  OpenCore]
游客

返回顶部