列举目录下的所有文件时,只能显示第一个文件[求助]

我将ch376和5000系列DSP相连,用例程中的80行代码列举目录下的所有文件和文件夹,可是每次程序运行时只能列出第一个文件或者文件夹,我发现原因是只有第一次执行CMD01_RD_USB_DATA0命令才能引起ch376的D7拉低(中断),当程序执行CMD0H_FILE_ENUM_GO时,ch376的D7便不再拉低,所以程序一直停留在等待D7拉低(中断)。这样也只能显示第一个文件名了。 出现错误后,我从并口读到的数据一直是0XA0 我发现一个现象:用示波器量D7时,可以捕捉到最开始的初始化中断,但是INT#脚上的中断始终没有(一直高电平)。

请问这是咋回事啊?

CH376芯片是DSP接口是什么接口?这个估计还是时序上面有点问题。至于你说的INT#引脚没有中断产生很好判断。只要设置好CH376的模式之后。插入U盘,这个时候程序不运行。INT#引脚应该一直为低电平。


CH376芯片和DSP接口是DSP的数据接口D0-D7,CH376的片选和A0接DSP的地址总线。 您说的时序的问题,我貌似也有同感,因为我把下面的代码: UINT8 mWaitInterrupt( void ) {/* 等待CH376中断并获取状态,主机端等待操作完成,返回操作状态 */ while( CH376_CMD_PORT & PARA_STATE_INTB ); /* 查询等待CH376操作完成中断(INT#低电平) */ xWriteCH376Cmd( CMD_GET_STATUS ); /* 产生操作完成中断,获取中断状态 */ return( xReadCH376Data( ) ); }

改写为:

UINT8 mWaitInterrupt( void ) {/* 等待CH376中断并获取状态,主机端等待操作完成,返回操作状态 */ while(1) { if( CH376_CMD_PORT & PARA_STATE_INTB ) /* 查询等待CH376操作完成中断(INT#低电平) */ break; else /* 防止CH376老在那儿等待中断*/ { mDelaymS( 200 ); break; } } xWriteCH376Cmd( CMD_GET_STATUS ); /* 产生操作完成中断,获取中断状态 */ return( xReadCH376Data( ) ); }

那么便可以列举打印出目录下的所有的文件和文件夹,但是在列举打印出的文件之间会显示几个Error status XX, (产生这个打印信息也是可以理解的,因为程序中有如下代码: void mStopIfError( UINT8 iErrCode ) { if ( iErrCode == USB_INT_SUCCESS ) return; printf( "Error status, %02X\n", (UINT16)iErrCode ); })

请问:如何解决时序的问题呢?


延时的时间有点长。建议你直接使用中断引脚的方式来判断中断是否来了更加的合理。


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