CH32V103 USBHD的缓冲区能不断改变地址吗

我想通过动态改变R16_UEPx_DMA和R8_UEPx_T_LEN寄存器,免去内存上数据搬移,直接使用USB多个包发送一段比较长的内存上的数据,不知道是否可行。可是我试了好几次都失败了,发出去的数据始终是某段内存,一直不发生改变。

int C_USBHD_Dev::Send_Pack(u8 endp, void *p, u16 len)
{
  if(endp&0x80 == 0){
    return 1;
  }
  endp &= 0x7f;
  if(endp >= 8){
    return 1;
  }else{
    regs->*C_USB_MOD_REG[endp-1] &= ~(0x0f << C_USB_MOD_SFT[endp-1]);
    regs->UEPx_DMA[endp].L16b = ((u16)(u32)p)&0xfffc;
    regs->UEPx_TLEN_CTRL[endp].T_LEN = len;
    regs->*C_USB_MOD_REG[endp-1] |= RB_UEP2_TX_EN << C_USB_MOD_SFT[endp-1];
    MODIFY_REG(regs->UEPx_TLEN_CTRL[endp].CTRL,
               MASK_UEP_T_RES,
               UEP_T_RES_ACK);
  }
}


问题已经解决了,是内存没有对齐,导致写入R16_UEPx_DMA寄存器失败。


只有登录才能回复,可以选择微信账号登录