命令GET_STATUS遇到的问题

第一次使用CH375A芯片,使用的是89C52读写375A,遇到的问题是 采用命令与375通讯,源程序如下: main(){ UINT8 Status,i; mDelaymS( 200 ); /* 延时200毫秒 */ CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 硬件复位CH375 */ mDelayuS( 2 ); /* 延时2US */ Status=CH375_GET_IC_VER( ); /*******获取芯片版本号 */ Status=CH375_CHECK_EXIST( );/*******测试工作状态 */ mStopIfError( Status ); /**************************/ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 初始化CH375,设置USB工作模式 */ CH375_WR_DAT_PORT( 6 ); /* 模式代码,自动检测USB设备连接 */ while( CH375_INT_WIRE ); /* 查询等待CH375操作完成中断(INT#低电平) */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断,获取中断状态 */ i= CH375_RD_DAT_PORT( ) ; /**************************/ …… } 其中:/*$$$$$$$$*/ UINT8 CH375_CHECK_EXIST( void ) { /* 测试CH375是否工作正常,返回操作状态:0表示工作正常;1表示错误 */ UINT8 i=0xF0; /* 测试数据输入 */ CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); mDelayuS( 2 ); CH375_WR_DAT_PORT( i ); mDelayuS( 2 );// i=CH375_RD_DAT_PORT( ); if( i == 0x0F ) return( 0 ); else return( 1 ); } /*$$$$$$$$*/ UINT8 CH375_GET_IC_VER( void ){ UINT8 i; CH375_WR_CMD_PORT( CMD_GET_IC_VER ); /* 查询等待CH375版本号 */ mDelayuS( 2 ); i=CH375_RD_DAT_PORT( ); return( i ); }

没有调用库函数,只是采用命令调试。GET_IC_VER /*******获取芯片版本号 */ CHECK_EXIST/*******测试工作状态 */两条命令都是正确的!但是在执行命令GET_STATUS是为什么INT#线一直是低电平状态,我看他提供的数据手册上说在执行完此命令后INT#引脚应该CH375取消中断,是不是为高电平?但是在上述程序中我测试了却是一直为低电平。在此请教谢谢!

设置模式之后,375是不给你中断的,你只需要在设置模式之后直接读取下数据端口的数据就可以了,按照你那样操作的话,你是永远也不会获取到中断的。判断一直为低电平的最好检测方法是将375的INT#脚撬起来,直接用万用表来测中断引脚的电压。


是呀!应该在这条命令中形成死循环while( CH375_INT_WIRE ); /* 查询等待CH375操作完成中断(INT#低电平) */ ,但是在上面程序中,这条语句执行过去了,证明我的U盘插入了,但是在执行完CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断,获取中断状态 */ i= CH375_RD_DAT_PORT( ) 后引脚INT#还为低电平(证明还有中断,没有取消中断请求)?


U盘插入的话是有中断的,也就是说在你先插U盘在上电的话,中断脚应该会有低电平的,返回的中断状态是0X15,但是在你先上电在查U盘的话,那么,你在那是等不到中断的,按照你的说法,你的中断引脚一直为低电平的话,那么,你就应该将375的中断引脚撬起来,直接拿万用表去测中断引脚是高还是低。如果是高的话,那就是你板子上面把375的中断引脚拉低了。


谢谢!我回去再测试一下!


已经解决了!


你好,我也出现了这情况,就是设置模式之后,375是不给中断的,就一直等U盘插入,当U盘插入后就一直中断低电平,CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断,获取中断状态 */ i= CH375_RD_DAT_PORT( ) 后也不行,拔出U盘中断返回值也为断开值,就是一直在中断拉不高,当然也把脚抬试过


脚抬试过的话,那么,中断引脚没有变高吗?


现在就个怪问题,当用中断方式时 /* CH375的INT#引脚连接51单片机的INT0引脚, 采用中断方式 */ void CH375Interrupt( ) interrupt 0 using 1 { unsigned char i; EA=0; CH375_WR_CMD_PORT( CMD_GET_STATUS ); //* 获取中断状态并取消中断请求 for( i = 10; i != 0; i -- ); mIntStatus = CH375_RD_DAT_PORT( ); //* 获取中断状态 CH375_INT_FLAG = 0; //* 清中断标志 if ( mIntStatus == USB_INT_DISCONNECT ) mDeviceOnline = 0; //* 检测到USB设备断开事件 else if ( mIntStatus == USB_INT_CONNECT ) mDeviceOnline = 1; //* 检测到USB设备连接事件 EA=1; } 当插U盘时进入中断,但执行CH375_WR_CMD_PORT( CMD_GET_STATUS ); 中断引脚没有变高又进行下次的中断. 还有用查询方式如下: /* 等待CH375中断并获取状态 */ unsigned char mWaitInterrupt() { /* 主机端等待操作完成, 返回操作状态 */ unsigned char c; while((P3&0x04)==0x04); //CH375_INT_WIRE 查询等待CH375操作完成中断(INT#低电平) CH375_WR_CMD_PORT( CMD_GET_STATUS );/* 产生操作完成中断, 获取中断状态 */ c = CH375_RD_DAT_PORT( ); /* 返回中断状态 */ if ( c == USB_INT_DISCONNECT ) mDeviceOnline = 0; /* 检测到USB设备断开事件 */ else if ( c == USB_INT_CONNECT ) mDeviceOnline = 1; /* 检测到USB设备连接事件 */ return( c ); } 执行后中断引脚变高正常运行.


hcn :能否把你QQ加下进一步交流,我这整几天了都是这问题,我的QQ:463159441而我这只能用中断方式谢谢


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