遇到了一些问题: void mDelayuS( unsigned char N ) {/* 微秒级精确延时函数,延时时间2*N+5 us*/
while (-- N); }
void mDelaymS( unsigned char N ) { /* 毫秒级延时函数,延时N ms */ while (N --) { mDelayuS(245); mDelayuS(246); } } /* 将程序空间的字符串复制到内部RAM中,返回字符串长度 */ UINT8 mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }
/* 检查操作状态,如果错误则显示错误代码并停机 */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ while ( 1 ) { LED_OUT_ACT( ); /* LED闪烁 */ mDelaymS( 200 ); LED_OUT_INACT( ); mDelaymS( 200 ); } } main( ) { UINT8 i,j; UINT32 y; LED_RUN_ACT( ); /* 开机后LED亮一下以示工作 */ mDelaymS( 100 ); /* 延时100毫秒 */ LED_RUN_INACT( ); /* LED熄灭*/ CH375_CMD_PORT = CMD_RESET_ALL;//执行硬件复位 mDelaymS( 60 ); /* 延时60毫秒 */ //执行硬件复位 CH375Reset( ); /* 复位CH375 */ mDelaymS( 50 ); /* 延时50毫秒 */
i = CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ mStopIfError( i ); /* 其它电路初始化 */ /**************/ while ( 1 ) { while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */ while ( CH375DiskStatus < DISK_CONNECT ) { /* 查询CH375中断并更新中断状态,等待U盘插入 */ if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有设备连接则返回成功,CH375DiskConnect 同时会更新全局变量CH375DiskStatus */ mDelaymS( 100 );/* 延时100毫秒 */ } LED_RUN_ACT( ); /* LED亮 */ mDelaymS( 200 ); /* 延时,保证可靠通用,有的USB存储器需要几十毫秒的延时 */ /**************/ /* 检查U盘是否准备好,某些U盘必须要执行这一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略, */ mDelaymS( 100 ); if ( ( i=CH375DiskReady( ) )== ERR_SUCCESS ) break; /* 查询磁盘是否准备好,延时500毫秒后自动跳过去*/ } mStopIfError( i );//测试 /* 查询磁盘物理容量 */ LED_RUN_ACT( ); /* LED亮 */ mDelaymS( 100 );//????????????? i = CH375DiskSize( ); mStopIfError( i ); //测试 mDelaymS( 10 ); y=mCmdParam.DiskSize.mDiskSizeSec;//??????????????
LED_RUN_ACT( ); /* 开始操作U盘 */ /* 如果LI.TXT文件已经存在则添加数据到尾部,如果不存在则新建文件 */ mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/LI.TXT" ); /* 文件名,该文件在根目录下 */ i = CH375FileOpen( ); /* 打开文件 */ …… } 我再论坛上看到说在程序执行过程中,一般能执行过 CH375DiskReady( )成功的话后面的操作一般没有问题!但是在上面程序中,我的执行过了这条函数指令,返回结果也是0,应该是成功执行了,但是在执行 mDelaymS( 100 );//????????????? i = CH375DiskSize( ); mStopIfError( i ); //测试 mDelaymS( 10 ); y=mCmdParam.DiskSize.mDiskSizeSec;//??????????????是查询磁盘容量结果y总是0x5F5F5F(结果应该是错误,我的盘是1G),并且在执行i = CH375FileOpen( ); /* 打开文件 */时返回结果为0x82!调试不通呀,期待高手知道一下,提供一个思路也行!