| 
 
| 本帖最后由 zyzyzy407 于 2011-12-11 17:16 编辑 
 // The following section of code is used to relocate the descriptor table.
 // The frameworks uses SUDPTRH and SUDPTRL to automate the SETUP      requests
 // for descriptors.  These registers only work with memory locations
 // in the EZ-USB internal RAM.  Therefore, if the descriptors are located
 // in external RAM, they must be copied to in internal RAM.
 // 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;
 
 // Is the descriptor table in external RAM (> 16Kbytes)?  If yes,
 // then relocate.
 // Note that this code only checks if the descriptors START in
 // external RAM.  It will not work if the descriptor table spans
 // internal and external RAM.
 if ((WORD)&DeviceDscr & 0xC000)
 {
 // first, relocate the descriptors
 IntDescrAddr = INTERNAL_DSCR_ADDR;
 ExtDescrAddr = (WORD)&DeviceDscr;
 DevDescrLen = (WORD)&UserDscr - (WORD)&DeviceDscr + 2;
 for (i = 0; i < DevDescrLen; i++)
 *((BYTE xdata *)IntDescrAddr+i) = *((BYTE xdata *)ExtDescrAddr+i);
 
 // update all of the descriptor pointers
 pDeviceDscr = IntDescrAddr;
 offset = (WORD)&DeviceDscr - INTERNAL_DSCR_ADDR;
 pDeviceQualDscr -= offset;
 pConfigDscr -= offset;
 pOtherConfigDscr -= offset;
 pHighSpeedConfigDscr -= offset;
 pFullSpeedConfigDscr -= offset;
 pStringDscr -= offset;
 }
 这段程序没怎么看懂 就只知道大概是从片外移描述符到片内吧 麻烦具体讲讲
 | 
 |