?? 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 + -