本帖最后由 huatong 于 2011-6-6 19:20 编辑
我觉得是有问题的,如果RX接收缓冲区在前,大小是64字节,开始地址是0x40,那发送缓冲区的开始地址我就设置为66,要多出2字节来保存CRC.
我的USB程序的定义是将缓冲区描述符表放到缓冲区的最后边的,觉得好看些
typedef struct{
u32 TxAddr;
u32 TxCount;
u32 RxAddr;
u32 RxCount;
} BTABLE_INFO_TypeDef;
#define USB_BUFF_SIZE (0x200)
#define USB_BTABLE_SIZE (8*2) //使用多少个端点就*多少
#define USB_BTABLE_VALUE (USB_BUFF_SIZE - USB_BTABLE_SIZE) //这个数值就直接写入USB->BTABLE寄存器中
#define USB_BTABLE_BASE (0x40006000 + USB_BTABLE_VALUE*2)
#defien BTable ((BTABLE_INFO_TypeDef *)(USB_BTABLE_BASE)) //BTable[0]就是端点0的缓冲区描述符,BTable[1]是端点1的
#define EpRxCount0 (64) //这个值就转换后写入BTable[0].RxCount
#define EpTxCount0 (64)
#define EpRxCount1 (64)
#define EpTxCount1 (64)
#define EPRX_BASE0 (0) //这个值就写入BTable[0].RxAddr
#define EPTX_BASE0 ((EpRxCount0 > 0)?(EPRX_BASE0 + EpRxCount0 +2):(EPRX_BASE0 + EpRxCount0)) //这个值就写入 BTable[0].TxAddr
#define EPRX_BASE1 (EPTX_BASE0 + EpTxCount0)
#define EPTX_BASE1 ((EpRxCount1 >0)?(EPRX_BASE1 + EpRxCount1 +2):(EPRX_BASE1 + EpRxCount1))
#define RxBuff0 ((u32 *)(0x40006000+EPRX_BASE0*2)) //这是端点0的接收缓冲区
#define TxBuff0 ((u32 *)(0x40006000+EPTX_BASE0*2)) //这是端点0的发送缓冲区
#define RxBuff1 ((u32 *)(0x40006000+EPRX_BASE1*2))
#define TxBuff1 ((u32 *)(0x40006000+EPTX_BASE1*2))
|