页次: 1
@EListen
端点2和3应该是串口缓存buff,使用256字节空间做fifo的,你看下汇编部分就会发现
我如果没有理解错 你应该是单独开辟了缓冲区 而且指定了段地址
混用usb buff 和 串口buff 还是比较危险的吧
UINT8X Ep0Buffer[THIS_ENDP0_SIZE] _at_ 0x0000; //端点0 OUT&IN缓冲区,必须是偶地址
UINT8X Ep1BufferO[THIS_ENDP0_SIZE] _at_ 0x0040; //端点1 OUT双缓冲区,必须是偶地址 Not Change!!!!!!
UINT8X Ep1BufferI[THIS_ENDP0_SIZE] _at_ 0x0080; //端点1 IN双缓冲区,必须是偶地址 Not Change!!!!!!
//100,140,180,1C0
UINT8X Ep2BufferO[4 * THIS_ENDP0_SIZE] _at_ 0x0100; //端点2 OUT双缓冲区,必须是偶地址
//200,240,280,2C0
UINT8X Ep3BufferI[4 * THIS_ENDP0_SIZE] _at_ 0x0200; //端点3 IN双缓冲区,必须是偶地址
UINT8I UART_RX_Data_Buff[ENDP1_SIZE];
UINT8X UART_TX_Data_Buff[256]_at_ 0x0300;
我自己是打算重写ch552的daplink的 想加入rtx51tiny的系统 看的比较仔细吧 你看一下应该是可以砍掉不少给usb的缓冲区
发现个问题楼主代码中给端点1端点2端点3分配了64*4 即256字节的buffer
UINT8X Ep0Buffer[THIS_ENDP0_SIZE] _at_ 0x0000; //端点0 OUT&IN缓冲区,必须是偶地址
UINT8X Ep1BufferO[THIS_ENDP0_SIZE] _at_ 0x0040; //端点1 OUT双缓冲区,必须是偶地址 Not Change!!!!!!
UINT8X Ep1BufferI[THIS_ENDP0_SIZE] _at_ 0x0080; //端点1 IN双缓冲区,必须是偶地址 Not Change!!!!!!
//100,140,180,1C0
UINT8X Ep2BufferO[4 * THIS_ENDP0_SIZE] _at_ 0x00C0; //端点2 OUT双缓冲区,必须是偶地址
//200,240,280,2C0
UINT8X Ep3BufferI[4 * THIS_ENDP0_SIZE] _at_ 0x01C0; //端点3 IN双缓冲区,必须是偶地址
但到了实际的配置 全部都是单缓的配置
UEP2_DMA = Ep2BufferO; //端点2数据传输地址
UEP3_DMA = Ep3BufferI; //端点2数据传输地址
UEP2_3_MOD |= (bUEP3_TX_EN | bUEP2_RX_EN); //端点2发送接收使能
UEP2_3_MOD &= ~(bUEP2_BUF_MOD | bUEP3_BUF_MOD); //端点2收发各64字节缓冲区
UEP2_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK; //端点2自动翻转同步标志位,IN事务返回NAK,OUT返回ACK
UEP3_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK | UEP_R_RES_NAK; //端点3自动翻转同步标志位,IN事务返回NAK,OUT返回NACK
如果没有对手册对错的话 加上端点1的配置 按照现在实际的全单缓配置可以省下来512字节的外部ram
另外好像是配置的了端点4 但是实际的端点初始化的时候却禁止了 这块我还在检查
页次: 1