谢谢,请问下:
1、按照例程的代码,如果在中断里设置握手包,则是在下次包传输的中断生效。例如以下代码,在第一次向端点1OUT时是应答ACK(在中断函数时已经完成应答),并产生中断,在中断函数中将握手包设置为NYET,下一包OUT的数据则回复NYET。现在的问题是,如何在传输过程中,根据当前OUT的数据进行逻辑判断,选择不同的握手包进行应答?例如在收到端点1OUT数据时,根据数据包内容进行判断,选择应答为NYET、ACK或者NAK等等。目前想到的办法只能是推测下次令牌包的请求,提前进行应答设置。请问这个该在哪个步骤可以实现呢?
令牌包:OUT 数据包:空 握手包:需要实时应答NYET、ACK或者NAK
void USB1DeviceInit( void){
R8_UEP1_RX_CTRL1 = UEP_R_RES_ACK| bUEP_AUTO_TOG;
void USB1DevIntDeal(void){
if ( (R8_USB1_INT_FG & UIF_TRANSFER)) {
if(intstatus == (UIS_TOKEN_OUT|1)){
R8_UEP1_RX_CTRL1 = UEP_R_RES_NYET| bUEP_AUTO_TOG;
2、在批量传输过程中,发现主机向设备发送OUT或IN令牌包,在设备通过中断回复NAK时,主机不再进行请求。通过Printf调试输出显示,只发生了一次中断,但通过抓包显示,主机一直向设备请求IN或OUT,只是没有发生中断事件,请问这个是什么原因造成的呢?
按照例程,在中断函数的结尾有R8_USB1_INT_FG = 0xFF;
谢谢,请问下:
1、按照例程的代码,如果在中断里设置握手包,则是在下次包传输的中断生效。例如以下代码,在第一次向端点1OUT时是应答ACK(在中断函数时已经完成应答),并产生中断,在中断函数中将握手包设置为NYET,下一包OUT的数据则回复NYET。现在的问题是,如何在传输过程中,根据当前OUT的数据进行逻辑判断,选择不同的握手包进行应答?例如在收到端点1OUT数据时,根据数据包内容进行判断,选择应答为NYET、ACK或者NAK等等。目前想到的办法只能是推测下次令牌包的请求,提前进行应答设置。请问这个该在哪个步骤可以实现呢?
令牌包:OUT 数据包:空 握手包:需要实时应答NYET、ACK或者NAK
void USB1DeviceInit( void){
R8_UEP1_RX_CTRL1 = UEP_R_RES_ACK| bUEP_AUTO_TOG;
void USB1DevIntDeal(void){
if ( (R8_USB1_INT_FG & UIF_TRANSFER)) {
if(intstatus == (UIS_TOKEN_OUT|1)){
R8_UEP1_RX_CTRL1 = UEP_R_RES_NYET| bUEP_AUTO_TOG;
2、在批量传输过程中,发现主机向设备发送OUT或IN令牌包,在设备通过中断回复NAK时,主机不再进行请求。通过Printf调试输出显示,只发生了一次中断,但通过抓包显示,主机一直向设备请求IN或OUT,只是没有发生中断事件,请问这个是什么原因造成的呢?
按照例程,在中断函数的结尾有R8_USB1_INT_FG = 0xFF;
举报