请问香主,附件是我看到的关于USB缓冲区地址的描述,有些疑问,USB有缓冲区描述表地址寄存器USB_BTABLE,又有发送/接收缓冲区地址寄存器(如附件),有地址偏移,又有USB本地地址,呵呵,我都不知道他们的关系是怎么样的,能跟我说说么? 我在mass_storage的例程里看到了一个定义 /* EP2 */ /* Rx buffer base address */ #define ENDP2_RXADDR (0xD8)
在void Mass_Storage_Out (void) 这个函数里有调用: PMAToUserBufferCopy(Bulk_Data_Buff, ENDP2_RXADDR, Data_Len); 而函数PMAToUserBufferCopy(Bulk_Data_Buff, ENDP2_RXADDR, Data_Len)的原型如下: void PMAToUserBufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes) { u32 n = (wNBytes + 1) >> 1;/* /2*/ u32 i; u32 *pdwVal; pdwVal = (u32 *)(wPMABufAddr * 2 + PMAAddr); for (i = n; i != 0; i--) { *(u16*)pbUsrBuf++ = *pdwVal++; pbUsrBuf++; } } 我想问的就是我如何知道ENDP2_RXADDR的地址就是0xD8*2+0x40006000L呢,它们是如何对应过来的呢?而如果我要定义ENDP2_TXADDR的话,它的地址又是多少呢? |