⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch375hft.c

📁 U盘对考的例子程序 U盘对考的例子程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	UINT8	i;
	UINT32	TotalLen,NewSize;
	CH375_PORT_INIT( );  /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */
	mDelay100mS( );  /* 延时100毫秒 */
	mInitSTDIO( );  /* 为了让计算机通过串口监控演示过程 */
	printf( "Start\n" );
	Change_Bit=0x01;
	i = CH375LibInit( );  /* 初始化CH375程序库和CH375芯片,操作成功返回0 */
	mStopIfError( i );
	Change_Bit=0x02;
	i = CH375LibInit( );  /* 初始化CH375程序库和CH375芯片,操作成功返回0 */
	mStopIfError( i );
/* 其它电路初始化 */

	while ( 1 ) {
//		printf( "Wait Udisk\n" );
		while(1){
			if(interrupt_bit==0){
		 		 Change_Bit=0x01;
				 wire_interrupt( );  /* 查询CH375中断并更新中断状态,等待U盘插入 */
				 if(status==0x15)interrupt_bit=1;
			 }
			 if(interrupt_bit_u0==0){
				Change_Bit=0x02;
				wire_interrupt_u0( );
				if ( status_u0 == 0x15 )interrupt_bit_u0=1;   /* 查询CH375中断并更新中断状态,等待U盘插入 */
				}
			if((interrupt_bit==1)&(interrupt_bit_u0==1))break;
		}
		interrupt_bit=0;
		interrupt_bit_u0=0;
		mDelay100mS( );  /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */
		mDelay100mS( );

/* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */
		Change_Bit=0x01;
		for ( i = 0; i < 5; i ++ ) {  /* 有的U盘总是返回未准备好,不过可以被忽略 */
			mDelay100mS( );
//			printf( "Ready ?\n" );
			if ( CH375DiskReady( ) == ERR_SUCCESS ){
			mCmdParam.SaveVariable.mSaveVariable=1;			//为0时恢复变量,为1时保存变量
			mCmdParam.SaveVariable.mBuffer=copy_mCmdParam;	//指向要保存的缓冲区
//			mCopy_Data_To_Data(copy_buf,DISK_BASE_BUF,0x200);
			CH375SaveVariable( );		 
			break;  /* 查询磁盘是否准备好 */
			}
		}
		Change_Bit=0x02;
		for ( i = 0; i < 5; i ++ ) {  /* 有的U盘总是返回未准备好,不过可以被忽略 */
			mDelay100mS( );
//			printf( "Ready1 ?\n" );
			if ( CH375DiskReady( ) == ERR_SUCCESS )
			{	
			mCmdParam.SaveVariable.mSaveVariable=1;			//为0时恢复变量,为1时保存变量
			mCmdParam.SaveVariable.mBuffer=copy_mCmdParam_u0;	//指向要保存的缓冲区
//			mCopy_Data_To_Data(copy_buf_u0,DISK_BASE_BUF,0x200);
			CH375SaveVariable( );		 
			 break;  /* 查询磁盘是否准备好 */			
			}
		}
		Change_Bit=0x01;
		mCmdParam.SaveVariable.mSaveVariable=0;			//为0时恢复变量,为1时保存变量
		mCmdParam.SaveVariable.mBuffer=copy_mCmdParam;	//指向要保存的缓冲区
//		mCopy_Data_To_Data(DISK_BASE_BUF,copy_buf,0x200);
		CH375SaveVariable( );
		CH375DirtyBuffer(); 	
//		printf( "Open\n" );
		mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, "\\12.TXT" );  /* 文件名,该文件在根目录下 */
		i = CH375FileOpen( );  /* 打开文件 */
		if ( i == ERR_SUCCESS ) {  /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */
			mCmdParam.SaveVariable.mSaveVariable=1;			//为0时恢复变量,为1时保存变量
			mCmdParam.SaveVariable.mBuffer=copy_mCmdParam;	//指向要保存的缓冲区
//			mCopy_Data_To_Data(copy_buf,DISK_BASE_BUF,512);
			CH375SaveVariable( );
			NewSize=CH375vFileSize;
			TotalLen=(CH375vFileSize+511)>>9;
			Change_Bit=0x02;
			mCmdParam.SaveVariable.mSaveVariable=0;			//为0时恢复变量,为1时保存变量
			mCmdParam.SaveVariable.mBuffer=copy_mCmdParam_u0;	//指向要保存的缓冲区
//			mCopy_Data_To_Data(DISK_BASE_BUF,copy_buf_u0,0x200);
			CH375SaveVariable( );	
	 		CH375DirtyBuffer();
		mCopyCodeStringToXRAM( mCmdParam.Open.mPathName, "\\345.TXT" );  /* 文件名,该文件在根目录下 */
			i = CH375FileCreate( );  /* 新建文件并打开,如果文件已经存在则先删除后再新建 */
			mStopIfError( i );
			mCmdParam.SaveVariable.mSaveVariable=1;			//为0时恢复变量,为1时保存变量
			mCmdParam.SaveVariable.mBuffer=copy_mCmdParam_u0;	//指向要保存的缓冲区
//			mCopy_Data_To_Data(copy_buf_u0,DISK_BASE_BUF,0x200);
			CH375SaveVariable();
			printf("write\n");
		while(1){
				printf("TotalLen=%02x\n",(unsigned short)TotalLen);
				Change_Bit=0x01;//设备1
				mCmdParam.SaveVariable.mSaveVariable=0;			//为0时恢复变量,为1时保存变量
				mCmdParam.SaveVariable.mBuffer=copy_mCmdParam;	//指向要保存的缓冲区
//				mCopy_Data_To_Data(DISK_BASE_BUF,copy_buf,512);
				CH375SaveVariable();
				CH375DirtyBuffer();
/*				printf("a:\n");
				for(i=0;i!=100;i++)
					printf("%02x ",(unsigned short)copy_mCmdParam[i]);
				printf("\n");*/
				mCmdParam.Read.mSectorCount = 32;  /* 读取全部数据,如果超过60个扇区则只读取60个扇区 */
				CH375vFileSize += 511;  /* 默认情况下,以扇区方式读取数据时,无法读出文件尾部不足1个扇区的部分,所以必须临时加大文件长度以读取尾部零头 */
				i = CH375FileRead( );  /* 从文件读取数据 */
				mStopIfError( i );
				CH375vFileSize -= 511;  /* 恢复原文件长度 */
				mCmdParam.SaveVariable.mSaveVariable=1;			//为0时恢复变量,为1时保存变量
				mCmdParam.SaveVariable.mBuffer=copy_mCmdParam;	//指向要保存的缓冲区
//				mCopy_Data_To_Data(copy_buf,DISK_BASE_BUF,0x200);
				CH375SaveVariable();
/*				printf("b:\n");
				for(i=0;i!=100;i++)
					printf("%02x ",(unsigned short)copy_mCmdParam[i]);
				printf("\n");*/
				Change_Bit=0x02;	//设备2
				mCmdParam.SaveVariable.mSaveVariable=0;			//为0时恢复变量,为1时保存变量
				mCmdParam.SaveVariable.mBuffer=copy_mCmdParam_u0;	//指向要保存的缓冲区
//				mCopy_Data_To_Data(DISK_BASE_BUF,copy_buf_u0,0x200);
				CH375SaveVariable();
				CH375DirtyBuffer();
				mCmdParam.Write.mSectorCount = 32;  /* 写入所有扇区的数据 */
			i = CH375FileWrite( );  /* 向文件写入数据 */
				mCmdParam.SaveVariable.mSaveVariable=1;			//为0时恢复变量,为1时保存变量
				mCmdParam.SaveVariable.mBuffer=copy_mCmdParam_u0;	//指向要保存的缓冲区
//				mCopy_Data_To_Data(copy_buf_u0,DISK_BASE_BUF,0x200);
				CH375SaveVariable();
				if(TotalLen<32)break;
			TotalLen-=32;
			}
				Change_Bit=0x02;		
				mCmdParam.SaveVariable.mSaveVariable=0;			//为0时恢复变量,为1时保存变量
				mCmdParam.SaveVariable.mBuffer=copy_mCmdParam_u0;	//指向要保存的缓冲区
//				mCopy_Data_To_Data(DISK_BASE_BUF,copy_buf_u0,0x200);
				CH375SaveVariable();
				CH375DirtyBuffer();
				mCmdParam.Modify.mFileAttr = 0xff;  /* 输入参数: 新的文件属性,为0FFH则不修改 */
				mCmdParam.Modify.mFileTime = 0xffff;  /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */
				mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2004, 5, 18 );  /* 输入参数: 新的文件日期: 2004.05.18 */
				mCmdParam.Modify.mFileSize = NewSize;  /* 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限,如果文件长度大于64KB,那么NewSize必须为UINT32 */
				i = CH375FileModify( );  /* 修改当前文件的信息,修改日期和长度 */
				mStopIfError( i );
				mCmdParam.Close.mUpdateLen = 0;  /* 不要自动计算文件长度,如果自动计算,那么该长度总是512的倍数 */
				i = CH375FileClose( );
				printf("close\n");
				mStopIfError( i );
				Change_Bit=0x01;
				mCmdParam.SaveVariable.mSaveVariable=0;			//为0时恢复变量,为1时保存变量
				mCmdParam.SaveVariable.mBuffer=copy_mCmdParam;	//指向要保存的缓冲区
//				mCopy_Data_To_Data(DISK_BASE_BUF,copy_buf,0x200);
				CH375SaveVariable();
				CH375DirtyBuffer();
				mCmdParam.Close.mUpdateLen = 0;  /* 不要自动计算文件长度,如果自动计算,那么该长度总是512的倍数 */
				i = CH375FileClose( );
				mStopIfError( i );
		}
		while(1){
			if(interrupt_bit==0){
				 Change_Bit=0x01;
				 wire_interrupt( );  /* 查询CH375中断并更新中断状态,等待U盘插入 */
				 if(status==0x16)interrupt_bit=1;
			 }
			 if(interrupt_bit_u0==0){
				Change_Bit=0x02;
				wire_interrupt_u0( );
				if ( status_u0 == 0x16 )interrupt_bit_u0=1;   /* 查询CH375中断并更新中断状态,等待U盘插入 */
				}
			if((interrupt_bit==1)||(interrupt_bit_u0==1)){
				if(interrupt_bit==1)
					interrupt_bit=0;
				if(interrupt_bit_u0==1)
					interrupt_bit_u0=0;
				break;
				}
		}
		printf("again\n");
//		while ( CH375DiskStatus != DISK_DISCONNECT ) xQueryInterrupt( );  /* 查询CH375中断并更新中断状态,等待U盘拔出 */
		mDelay100mS( );
		mDelay100mS( );
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -