我想通过动态改变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); } }
热门产品 :
CH592: RISC-V内核BLE5.4无线MCU