CH554 端點(diǎn)3上傳數(shù)據(jù)問題

CH554 通過端點(diǎn)3上傳數(shù)據(jù)到PC,? 上傳兩字節(jié) 0x03,0x00 到PC ,收到確實(shí)0X6d,0xdf. 不知為何?


#define THIS_ENDP0_SIZE? ? ?DEFAULT_ENDP0_SIZE

#define ENDP1_IN_SIZE 64

#define ENDP2_IN_SIZE 4

#define ENDP3_IN_SIZE 2

#define ENDP3_OUT_SIZE 64


UINT8X? Ep0Buffer[MIN(64,THIS_ENDP0_SIZE+2)]? _at_? 0x0000;? ? //端點(diǎn)0 OUT&IN緩沖區(qū),必須是偶地址

UINT8X? Ep1Buffer[MIN(64,ENDP1_IN_SIZE+2)] _at_? MIN(64,THIS_ENDP0_SIZE+2);? //端點(diǎn)1 IN緩沖區(qū),必須是偶地址

UINT8X? Ep2Buffer[MIN(64,ENDP2_IN_SIZE+2)] _at_ (MIN(64,THIS_ENDP0_SIZE+2)+MIN(64,ENDP1_IN_SIZE+2)); //端點(diǎn)2 IN緩沖區(qū),必須是偶地址

UINT8XEp3Buffer[MIN(64,ENDP3_IN_SIZE+2)+MIN(64,ENDP3_OUT_SIZE+2)] _at_ (MIN(64,THIS_ENDP0_SIZE+2)+MIN(64,ENDP1_IN_SIZE+2)+MIN(64,ENDP2_IN_SIZE+2));? ?//端點(diǎn)3 OUT+IN緩沖區(qū)



//--------------------------------------------------

// Description? : Touch設(shè)備模式配置,設(shè)備模式啟動(dòng),收發(fā)端點(diǎn)配置,中斷開啟

// Input Value? : None

// Output Value : None

//--------------------------------------------------

void CTouchDeviceInit()

{

IE_USB = 0;

USB_CTRL = 0x00;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 先設(shè)定模式

UDEV_CTRL = bUD_PD_DIS;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 禁止DP/DM下拉電阻

? UDEV_CTRL &= ~bUD_LOW_SPEED;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//選擇全速12M模式,默認(rèn)方式

? USB_CTRL &= ~bUC_LOW_SPEED;

? UEP0_DMA = Ep0Buffer;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//端點(diǎn)0數(shù)據(jù)傳輸?shù)刂?/span>

? UEP4_1_MOD &= ~(bUEP4_RX_EN | bUEP4_TX_EN);? ? ? ? ? ? ? ? ? ? ?//端點(diǎn)0單64字節(jié)收發(fā)緩沖區(qū)

? ??

? UEP1_DMA = Ep1Buffer;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//端點(diǎn)1數(shù)據(jù)傳輸?shù)刂?/span>

? UEP4_1_MOD = UEP4_1_MOD & ~bUEP1_BUF_MOD | bUEP1_TX_EN;? ? ? ? ?//端點(diǎn)1發(fā)送使能 64字節(jié)緩沖區(qū)

UEP2_DMA = Ep2Buffer;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//端點(diǎn)2數(shù)據(jù)傳輸?shù)刂?/span>

? UEP2_3_MOD = UEP2_3_MOD & ~bUEP2_BUF_MOD | bUEP2_TX_EN;? ? ? ? ?//端點(diǎn)2發(fā)送使能 64字節(jié)緩沖區(qū)

UEP3_DMA = Ep3Buffer;? ? ? ?

UEP2_3_MOD |= bUEP3_TX_EN;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //端點(diǎn)3發(fā)送使能

? UEP2_3_MOD |= bUEP3_RX_EN;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //端點(diǎn)3接收使能

UEP2_3_MOD &= ~bUEP3_BUF_MOD;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//端點(diǎn)3收發(fā)各64字節(jié)緩沖區(qū)

//? UEP3_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;? ? ? //端點(diǎn)3自動(dòng)翻轉(zhuǎn)同步標(biāo)志位,IN事務(wù)返回NAK,OUT返回ACK

USB_DEV_AD = 0x00;


USB_CTRL |= bUC_DEV_PU_EN | bUC_INT_BUSY | bUC_DMA_EN;? ? ? ? ? // 啟動(dòng)USB設(shè)備及DMA,在中斷期間中斷標(biāo)志未清除前自動(dòng)返回NAK

UDEV_CTRL |= bUD_PORT_EN;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 允許USB端口

USB_INT_FG = 0xFF;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 清中斷標(biāo)志

USB_INT_EN = bUIE_SUSPEND | bUIE_TRANSFER | bUIE_BUS_RST;

IE_USB = 1;

}




case UIS_TOKEN_IN | 3:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //endpoint 3# 中斷端點(diǎn)上傳

? ? ? ? ? ? UEP3_T_LEN = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//預(yù)使用發(fā)送長度一定要清空

//? ? ? ? ? ? UEP3_CTRL ^= bUEP_T_TOG;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //手動(dòng)翻轉(zhuǎn)同步標(biāo)志位

? ? ? ? ? ? UEP3_CTRL = UEP3_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_NAK;? ? ? ? ? ?//默認(rèn)應(yīng)答NAK

? ? ? ? ? ? Endp3Busy = 0;

? ? ? ? ? ? break;

case UIS_TOKEN_OUT | 3:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // endpoint 3# 批量端點(diǎn)下傳

if ( U_TOG_OK ) {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 不同步的數(shù)據(jù)包將丟棄

//UEP3_CTRL ^= bUEP_R_TOG;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 手動(dòng)翻轉(zhuǎn)

len = USB_RX_LEN;

printf("KeyLength:%d\n",len);

if(len == 1)

{

CTouchUploadKeyInfo();

}

else

{

/*

printf("Key:");

for ( i = 0; i < len; i ++ )?

{

printf("x%02X ",(UINT16)(Ep3Buffer[i]) );

}

printf("\n");

CTouchSaveKeyInfo();

*/

}

}

break;




//--------------------------------------------------

// Description? : key upload

// Input Value? : None

// Output Value : None

//--------------------------------------------------

void Enp3IntIn( )

{

memcpy( Ep3Buffer, KeyData, sizeof(KeyData));?

? if( TouchDeviceReady )

{

? UEP3_T_LEN = sizeof(KeyData);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //上傳數(shù)據(jù)長度

? ? ? ? UEP3_CTRL = UEP3_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_ACK;? ? ?//有數(shù)據(jù)時(shí)上傳數(shù)據(jù)并應(yīng)答ACK

? ? ? ? Endp3Busy = 1;?

}

}



void CTouchUploadKeyInfo()

{

//需要返回的2字節(jié)報(bào)告的緩沖

?UINT8 Buf[2]={0,0};

?Buf[0] = 0x03;??

?Buf[1] = 0x00;


?while( Endp3Busy )

?{

? ? ;? //如果忙(上一包數(shù)據(jù)沒有傳上去),則等待。

?}

?

?memcpy(KeyData,Buf,2);?

?Enp3IntIn();

}



您好

您設(shè)置的端點(diǎn)3模式為單64字節(jié)接收,64發(fā)送模式。緩沖區(qū)定義只給了66的大小。

應(yīng)當(dāng)設(shè)置您的緩沖區(qū)大小為128字節(jié),緩沖區(qū)地址為接收數(shù)據(jù),地址偏移64是發(fā)送數(shù)據(jù)。

image.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频