RT,現(xiàn)在使用USB的同步傳輸,UEP_T_LEN寄存器寫入長度4,使用全速設(shè)備實(shí)際發(fā)送長度為4*16=64字節(jié),使用高速設(shè)備實(shí)際發(fā)送長度為4*64=256字節(jié),整了幾天,一直解決不了,有人能幫忙看下么,謝謝。
? ? ? ?現(xiàn)在發(fā)送的數(shù)據(jù)用BUSHOUND驗(yàn)證是正確的,只是長度成倍數(shù)補(bǔ)零,導(dǎo)致數(shù)據(jù)不可使用。
相關(guān)初使化:
USB_CTRL(USB1) = bUC_CLR_ALL;? ? ? ?//清空中斷標(biāo)志和FIFO
USB_CTRL(USB1) = UCST_FS | bUC_INT_BUSY |bUC_DMA_EN;? //設(shè)備模式,高速
USB_SUSPEND(USB1) = 0;? ? ? ? ? ? //不掛起
USB_DEV_AD(USB1) = 0x00;? ? ? ? ? ? ? //設(shè)備地址0
USB_INT_FG(USB1) = 0xff;? ? ? ? ? ? ? //清除中斷標(biāo)志
USB_INT_EN(USB1) = bUIE_FIFO_OV | bUIE_TRANSFER | bUIE_BUS_RST;
UEP_MOD(USB1, EP1) = 0;
UEP_MOD(USB1, EP2) = 0;
UEP_DMA(USB1, EP0) = (xx_uint32_t)Ep0Buffer;
UEP_DMA(USB1, EP1) = (xx_uint32_t)Ep1Buffer;
UEP_TX_CTRL(USB1, EP2) = UEP_T_RES_NAK;
UEP_RX_CTRL(USB1, EP2) = UEP_R_RES_NAK;
打開端點(diǎn):
? ??if(type == EP_ATTR_ISOC)
{
UEP_TX_CTRL(USB1, ep) |= bUEP_T_RES_NO;
}
? ? if(ep > EP0)
? ? {
? ? UEP_MOD(USB1, ep) |= bUEP_TX_EN(ep);
#if USE_DOUBLE_BUFFER
? ? UEP_MOD(USB1, ep) |= bUEP_BUF_MOD(ep);
#endif
? ? }
發(fā)送數(shù)據(jù):
#if USE_DOUBLE_BUFFER
if(ep == EP_DOUBLE_BUFFER)
{
p += ((UEP_TX_CTRL(USB1, ep) & MASK_UEP_T_TOG) > 0) * EP_IN_OFFSET; // 切換雙緩沖
}
#endif
xx_memcpy(p, buf, len);
????????UEP_T_LEN(USB1, ep) = 4;
????????UEP_TX_CTRL(USB1, ep) = ((UEP_TX_CTRL(USB1, ep) & ~MASK_UEP_T_RES)) | UEP_T_RES_ACK;
這是使用全速設(shè)備發(fā)送的,前4個(gè)字節(jié)是對的,后面補(bǔ)了很多零
這是使用高速設(shè)備發(fā)送的,前4個(gè)字節(jié)是對的,后面補(bǔ)了很多零