CH375不使用INT#引脚[求助]

用CH375做读写U盘程序,因系统设计时主控CPU IO资源比较紧,想不使用INT#引脚来查询中断(即INT#引脚悬空,不跟单片机连接),进而采用读CH375读取中断标志(即A0=1时读出的CH375状态)的BIT7来查询INT#引脚的中断,在使用CH375的文件读写库时,调用CH375FileOpen()得到的状态,却是0X23.

1,这种用法可以用吗?

2, 我已经修改头文件中的查询函数. void xQueryInterrupt( void ) /* 查询CH375中断并更新中断状态 */ { //while ( CH375_INT_WIRE ); /* 如果CH375的中断引脚输出高电平则等待 */ while(xReadCH375Status() & 0x80); xWriteCH375Cmd( CMD_GET_STATUS ); /* 获取当前中断状态,发出命令后至少延时2uS */ CH375IntStatus = xReadCH375Data( ); /* 获取中断状态 */ if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; /* 检测到USB设备断开事件 */ else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT; /* 检测到USB设备连接事件 */ }

其中UINT8 xReadCH375Status(void) { UINT8 mStatus; mDelay1_2uS( ); mDelay1_2uS( ); IO0DIR &= 0xFFFF00FF; /* 读操作所以数据输入 */ IO0CLR |= 0x000000A0; /* 输出有效读控制信号, 读CH375芯片的数据端口, A0(P0.4)=1; CS(P0.7)=0; WR=(P0.6)=1; RD(P0.5)=0; */ IO0DIR = IO0DIR; IO0DIR = IO0DIR; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mStatus = (UINT8)( IO0PIN >> 8 ); /* 从CH375的并口P0.15-P0.8输入数据 */ IO0SET |= 0x000000E0; /* 输出无效的控制信号, 完成操作CH375芯片, A0(P0.4)=0; CS(P0.7)=1; WR=(P0.6)=1; RD(P0.5)=1; */ mDelay1_2uS( ); mDelay1_2uS( ); return( mStatus ); }

为什么会出现这种情况呢?

那这个时候中断引脚是高的还是低的呢?估计这个和中断没有什么关系,和你软件上面有关系,你可以将你的读写子函数帖出来看下。以及你的硬件上面供电足不足,USB口有没有串接电阻,USB口是否接反等等都有可能出现你的DISK-READY不通过的。


这时的中断引脚是低电平!! 这也就是说中断已经来了,但是从xReadCH375Status()中读出来的中断并不代表INT#引脚?或者说xReadCH375Status()读取出错了. UINT8 xReadCH375Status(void) { UINT8 mStatus; mDelay1_2uS( ); mDelay1_2uS( ); IO0DIR &= ~(0xffU<<15); /* 读操作所以数据输入 */ IO0SET |= A0_MASK; IO0CLR |= UDISK_CS_MASK | RD_MASK; IO0DIR = IO0DIR; IO0DIR = IO0DIR; mStatus = (UINT8)( IO0PIN >> 15 ); IO0SET |= UDISK_CS_MASK | WD_MASK | RD_MASK; mDelay1_2uS( ); mDelay1_2uS( ); return( mStatus ); }


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