阅读:1522回复:4
68013的固件中描述符定位的问题
采用slave fifo模式
我看cypress给的这种模式的固件程序中 在TD_Init()之后 有一部分代码是重定位描述符 不知道这部分代码是什么目的,为什么要重新定位描述符?请大侠指点 // The following section of code is used to relocate the descriptor table. // Since the SUDPTRH and SUDPTRL are assigned the address of the descriptor // table, the descriptor table must be located in on-part memory. // The 4K demo tools locate all code sections in external memory. // The descriptor table is relocated by the frameworks ONLY if it is found // to be located in external memory. pDeviceDscr = (WORD)&DeviceDscr; pDeviceQualDscr = (WORD)&DeviceQualDscr; pHighSpeedConfigDscr = (WORD)&HighSpeedConfigDscr; pFullSpeedConfigDscr = (WORD)&FullSpeedConfigDscr; pStringDscr = (WORD)&StringDscr; if (EZUSB_HIGHSPEED()) { pConfigDscr = pHighSpeedConfigDscr; pOtherConfigDscr = pFullSpeedConfigDscr; } else { pConfigDscr = pFullSpeedConfigDscr; pOtherConfigDscr = pHighSpeedConfigDscr; } if ((WORD)&DeviceDscr & 0xe000) // If DeviceDscr is not in the 0x0000~0x1FFFF { IntDescrAddr = INTERNAL_DSCR_ADDR; ExtDescrAddr = (WORD)&DeviceDscr; DevDescrLen = (WORD)&UserDscr - (WORD)&DeviceDscr + 2; for (i = 0; i < DevDescrLen; i++) *((BYTE xdata *)IntDescrAddr+i) = 0xCD; for (i = 0; i < DevDescrLen; i++) *((BYTE xdata *)IntDescrAddr+i) = *((BYTE xdata *)ExtDescrAddr+i); pDeviceDscr = IntDescrAddr; offset = (WORD)&DeviceDscr - INTERNAL_DSCR_ADDR; pDeviceQualDscr -= offset; pConfigDscr -= offset; pOtherConfigDscr -= offset; pHighSpeedConfigDscr -= offset; pFullSpeedConfigDscr -= offset; pStringDscr -= offset; } |
|
沙发#
发布于:2004-07-02 12:32
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2004-07-09 23:15
采用slave fifo模式 这是哪个程序啊?我怎么从来没有看到过 |
|
地板#
发布于:2004-07-25 10:03
如果FX2没有外部扩展的存储空间,也就是用的非128脚的芯片
那么这一部分代码是不是可以去掉了 因为程序代码只能放在on-chip的0x0000~0x1FFF范围内 |
|
地下室#
发布于:2004-07-27 17:34
首先描述符是放在代码段里面的,在操作之前必须使用数据指针从代码段中装载;
其次,如果描述符的地址如果大于0xffff时,就要特殊处理。否则可以去掉。 |
|