UserToPMABufferCopy(Key_Buffer, GetEPTxAddr(ENDP1), 9);
//* enable endpoint for transmission
SetEPTxCount(ENDP1,9);
SetEPTxValid(ENDP1);
用端点1能正常发送数据,但把上述ENDP1改成ENDP3,发送了9个随机数。
设置如下:
/* tx buffer base address */
#define ENDP1_TXADDR (0x100)
#define ENDP2_RXADDR (0x140)
#define ENDP3_TXADDR (0x180)
#define EP_NUM (4)
/* Initialize Endpoint 3 */
SetEPType(ENDP3, EP_INTERRUPT);
SetEPTxAddr(ENDP3, ENDP3_TXADDR);
SetEPTxCount(ENDP3, 9);
SetEPRxStatus(ENDP3, EP_RX_DIS);
SetEPTxStatus(ENDP3, EP_TX_NAK);
我估计还是缓冲区设置有问题,但180还没超过256,应该可以啊
这个是我的Buffer分配情况
EP1 Interrupt In/Interrupt Out
EP2 Interrupt In
EP3 Interrupt In
EP4 Bulk In Double Buffer
他们都能正常的工作
/* defines how many endpoints are used by the device */
/*-------------------------------------------------------------*/
#define EP_NUM (5)
/*-------------------------------------------------------------*/
/* -------------- Buffer Description Table -----------------*/
/*-------------------------------------------------------------*/
/* buffer table base address */
/* buffer table base address */
#define BTABLE_ADDRESS (0x00)
/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x40)
#define ENDP0_TXADDR (0x80)
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (0xC0)
#define ENDP1_RXADDR (0x100)
#define ENDP2_TXADDR (0x140)
#define ENDP3_TXADDR (0x160)
#define ENDP4_TXADDR (0x180)
#define ENDP4_TXADDR0 (0x180)
#define ENDP4_TXADDR1 (0x1C0)
网上找了一下,这个人跟我遇到类似情况:
http://group.ednchina.com/619/10723.aspx
就是在用端点3的时候,UserToPMABufferCopy(Key_Buffer, GetEPTxAddr(ENDP1), 9)没发挥作用。