4020|2

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用CH375,设备方式与PC通信,所遇问题。 [复制链接]

我上位机用DEBUG372.EXE(下载的调试工具),端点1我上传了几个数,端点2我也上传了几个具体的数是正常的。下传端点2是DEBUG372.EXE显示的发出的“数据个数”也是正常的。这说明上传数据是正常的。
但是我想让端点2下传的数取反再上传,DEBUG372.EXE显示的个数和数据很多时候是不对的。您说这是不是端点2下传时出现问题?  问:我这个程序怎么端点2下传就不对呢?


/* CH375中断服务程序INT3,使用寄存器组1 */

void  mCh375Interrupt( ) interrupt 3using 1

{

        unsigned char i;
        unsigned char InterruptStatus;
        unsigned char length;
        unsigned char xdata buffer[ 64 ];
        Delay2us( );
      CH375_CMD_PORT = CMD_GET_STATUS;  /* 获取中断状态并取消中断请求 */
        Delay2us( );  /* 如果时钟频率低于16MHz则无需该指令延时 */
      InterruptStatus = CH375_DAT_PORT;  /* 获取中断状态 */

        switch ( InterruptStatus ){
                case USB_INT_EP2_OUT: {   /* 批量端点下传成功 */
                Delay2us( );
                CH375_CMD_PORT = CMD_RD_USB_DATA;  /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */
              Delay2us( );  /* 如果时钟频率低于16MHz则无需该指令延时 */
       length = CH375_DAT_PORT;  /* 首先读取后续数据长度 */
                Delay2us( );
              //  Delay2us( );
                for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_DAT_PORT;
                EX3 = 0;             /* 测试数据正确性,将接收到的命令包数据取反后返回给PC机 */
      CH375_CMD_PORT= CMD_WR_USB_DATA7   /* 向USB端点2的发送缓冲区写入数据块 */
                Delay2us( );
        CH375_DAT_PORT =length;  /* 首先写入后续数据长度,回传刚接收到的数据长度 */
              //  Delay2us( );
                for ( i = 0; i < length; i ++ )
               { CH375_DAT_PORT= ~ buffer[ i ] }  /* 数据取反后返回,由计算机应用程序测试数据是否正确 */
                //CH375_DAT_PORT = 3;  /* 发送中断数据1 */
       // CH375_DAT_PORT = 1;  /* 发送中断数据2 */
                 EX3 = 1;  /* 允许中断*/

                 EX3 = 0;
                 CH375_CMD_PORT = CMD_WR_USB_DATA5;  /* 向USB端点1的发送缓冲区写入数据块 */
                 Delay2us( );
         CH375_DAT_PORT =3   /* 后续数据长度 */

                 CH375_DAT_PORT = 3;
        CH375_DAT_PORT = 3;  /* 发送中断数据1 */
        CH375_DAT_PORT = 1;  /* 发送中断数据2 */
                 EX3 = 1;  /* 允许中断*/

                 break;
}

              case USB_INT_EP2_IN: {  /* 批量数据发送成功 */
             CH375_CMD_PORT= CMD_UNLOCK_USB   /* 释放当前USB缓冲区 */
            break;
      }
              case USB_INT_EP1_IN: {  /* 批量数据发送成功 */
               CH375_CMD_PORT= CMD_UNLOCK_USB   /* 释放当前USB缓冲区 */
              break;
       }
      default: {  /* 其它中断,未用到,解锁后退出即可 */
CH375_CMD_PORT= CMD_UNLOCK_USB   /* 释放当前USB缓冲区 */
break;
}

       }
}
我想想让端点2下传的数取反再上传,结果数据个数一下子老多,数也好多时候不对。




最新回复

是,端点2 都是Bulk Endpoint端点。主要CH375是专用的USB芯片。因为还不能将下传的数据显示出来呢。主程序和中断这块我还没整明白怎么弄。只能先让下传的数据取反后用调试工具上传。看下传的对否。哈哈。  详情 回复 发表于 2010-6-26 08:48
点赞 关注

回复
举报

86

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
为什么端点2即上传又下传呢?搞得人很晕。

你的端点的概念是不是USB Endpoint的概念?用Bushound抓包,分析一下USB总线上发生了什么事会让你明白问题出在哪里?

BTW:你的设备Descriptor是啥样的,端点1,端点2 都是Bulk Endpoint么?
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是,端点2 都是Bulk Endpoint端点。主要CH375是专用的USB芯片。因为还不能将下传的数据显示出来呢。主程序和中断这块我还没整明白怎么弄。只能先让下传的数据取反后用调试工具上传。看下传的对否。哈哈。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
ADI 有奖直播报名中~
直播时间:3月27日(周四) 上午10:00-11:30
直播主题:易于驱动SAR型ADC的原理、优点及应用介绍
好礼等你拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 6

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表