📄 ch375hft.c
字号:
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 + -