WCH沁恒单片机
直播中

名士流

8年用户 832经验值
私信 关注
[问答]

请问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);
}
}

回帖(1)

李兰英

2022-7-18 11:13:46
问题已经解决了,是内存没有对齐,导致写入R16_UEPx_DMA寄存器失败。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分