[求助]issue_token_X和issue_token

unsigned char issue_token( unsigned char endp_and_pid ) { /* 执行USB事务 */ /* 执行完成后, 将产生中断通知单片机, 如果是USB_INT_SUCCESS就说明操作成功 */ CH375_WR_CMD_PORT( CMD_ISSUE_TOKEN ); CH375_WR_DAT_PORT( endp_and_pid ); /* 高4位目的端点号, 低4位令牌PID */ return(wait_interrupt() ); /* 等待CH375操作完成 */ }

unsigned char issue_token_X( unsigned char endp_and_pid, unsigned char tog ) { /* 执行USB事务,适用于CH375A */ /* 执行完成后, 将产生中断通知单片机, 如果是USB_INT_SUCCESS就说明操作成功 */ CH375_WR_CMD_PORT( CMD_ISSUE_TKN_X ); CH375_WR_DAT_PORT( tog ); /* 同步标志的位7为主机端点IN的同步触发位, 位6为主机端点OUT的同步触发位, 位5~位0必须为0 */ CH375_WR_DAT_PORT( endp_and_pid ); /* 高4位目的端点号, 低4位令牌PID */ return( wait_interrupt() ); /* 等待CH375操作完成 */ }

在做usb打印机的时候 如果用issue_token可以成功打印,发送数据速度很慢 如果用issue_token_X,不能正常打印,可以看到发送速度很快 是什么原因 其中issue_token_X里面tog的值怎么给?我把可能的数都试过了均不能正常打印 0xc0\0x80\0x00\0x40

issue_token与issue_token_X的区别在于设置同步触发标志的时候。issue_token_X相当于issue_token加上SET_ENDP?命令。你往下发数据,打印不起来可能是数据发送的同步上存在问题,在数据发送中必须在DATA0与DATA1之间进行切换,采用issue_token_X的话,同步触发标志应该在0x00与0x40之间切换。


void toggle_send( uchar tog ) { /* 主机发送同步控制:0=DATA0,1=DATA1 */ CH375_WR_CMD_PORT( CMD_SET_ENDP7 ); CH375_WR_DAT_PORT( tog ? 0xC0 : 0x80 ); delay2us(); } 那么这个函数里的0xC0 : 0x80要变化吗? 要是0x00与0x40吗


你比较一下例子程序中的get_port_status( )和get_port_status_X( )就可以看出来,采用issue_token发令牌的话得在前面调用toggle_send()函数设置同步标志,而采用issue_token_X的话,并没调用toggle_send()而是在给出参数tog时设置同步标志(tog为0x00对应DATA0,tog为0x40对应DATA1)。


只有登录才能回复,可以选择微信账号登录