ch375讀寫u盤C51示例源程序_第1頁
ch375讀寫u盤C51示例源程序_第2頁
ch375讀寫u盤C51示例源程序_第3頁
ch375讀寫u盤C51示例源程序_第4頁
ch375讀寫u盤C51示例源程序_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、ch375讀寫u盤C51示例源程序#includedatatype.h#includeconsole.h#include44b0 x.h#include/*以下定義的詳細說明請看CH375HF9.H文件*/#defineLIB_CFG_FILE_IO1/*文件讀寫的數(shù)據(jù)的復制方式,0為外部子程序,1為內(nèi)部復制*/#defineLIB_CFG_INT_EN1/*CH375的INT#引腳連接方式接s3c44b0 x外部中斷2引腳*/*單片機的RAM有限,其中CH375子程序用512字節(jié),剩余RAM部分可以用于文件讀寫緩沖*/#defineFILE_DATA_BUF_LEN0 x2000/*外部RA

2、M的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長度不小于一次讀寫的數(shù)據(jù)長度*/#includeCH375HF9.H#defineCH375Cmd*(volatileU8*)(0 x4000001)/*總線方式*/#defineCH375Dat*(volatileU8*)(0 x4000000)externU32MCLK;/*CH375主機文件系統(tǒng)接口*/*支持:FAT12/FAT16/FAT32*/*ARM單片機C語言的U盤文件讀寫示例程序*/*該程序?qū)盤中的/C51/CH375HFT.C文件中的小寫字母轉(zhuǎn)成大寫字母后,寫到新建的文件NEWFILE.TXT中,如果找不到原文件CH375HFT.C,那么該程序?qū)@

3、示C51子目錄下所有以CH375開頭的文件名,并新建NEWFILE.TXT文件并寫入提示信息,如果找不到C51子目錄,那么該程序?qū)@示根目錄下的所有文件名,并新建NEWFILE.TXT文件并寫入提示信息*/*CH375的INT#引腳采用查詢方式處理數(shù)據(jù)復制方式為,內(nèi)部復制,本程序適用于s3c44b0 x單片機,串口0輸出監(jiān)控信息,57600bps*/*ENDIAN=little*/voidmDelay1_2uS()/*至少延時1.2uS,根據(jù)單片機主頻調(diào)整*/UINT32i;for(i=30;i!=0;i-);void_irqCH375Interrupt(void)/*CH375中斷服務(wù)程序,

4、由CH375的INT#的低電平或者下降沿觸發(fā)單片機中斷*/rEXTINTPND=0 xf;/clearEXTINTPNDreg.rI_ISPC=BIT_EINT2;/clearpending_bitxWriteCH375Cmd(CMD_GET_STATUS);/*獲取中斷狀態(tài)并取消中斷請求*/CH375IntStatus=xReadCH375Data();/*獲取中斷狀態(tài)*/if(CH375IntStatus=USB_INT_DISCONNECT)CH375DiskStatus=DISK_DISCONNECT;/*檢測到USB設(shè)備斷開事件*/elseif(CH375IntStatus=USB_

5、INT_CONNECT)CH375DiskStatus=DISK_CONNECT;/*檢測到USB設(shè)備連接事件*/externvoidCH375Interrupt(void);voidCH375_PORT_INIT()/*初始化*/rINTCON=0 x5;rINTMOD=0 x0;/All=IRQmoderPDATG=0 xff;rPCONG=0 xffff;rPUPG=0 x0;/shouldbeenabledrEXTINT=0 x0;pISR_EINT2=(unsigned)CH375Interrupt;rINTMSK=(BIT_GLOBAL|BIT_EINT2);/startINTvo

6、idxWriteCH375Cmd(UINT8mCmd)/*外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令*/mDelay1_2uS();mDelay1_2uS();/*至少延時1uS*/CH375Cmd=mCmd;mDelay1_2uS();mDelay1_2uS();/*至少延時2uS*/voidxWriteCH375Data(UINT8mData)/*外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù)*/CH375Dat=mDatamDelay1_2uS();/*至少延時1.2uS*/UINT8xReadCH375Data(void)/*外部定義的被CH375程序庫

7、調(diào)用的子程序,從CH375讀數(shù)據(jù)*/UINT8mData;mDelay1_2uS();/*至少延時1.2uS*/mData=(UINT8)CH375Dat;return(mData);/*延時指定毫秒時間,根據(jù)單片機主頻調(diào)整,不精確*/voidmDelaymS(UINT32ms)UINT32i;while(ms-)for(i=25000;i!=0;i-);/*檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機*/voidmStopIfError(UINT8iError)if(iError=ERR_SUCCESS)return;/*操作成功*/printf(Error:%02Xn,(UINT16)iEr

8、ror);/*顯示錯誤*/while(1)mDelaymS(100);/*為printf和getkey輸入輸出初始化串口*/voidmInitSTDIO()U16SERIAL_BAUD=57600;chartable_begin/*/n;chartable_beginvoidShowSysClock(intargc,char*argv)printf(Systemisrunning%dHzn,MCLK);intMain(void)unsignedchart;UINT8i,c,SecCount;UINT16NewSize,count;/*因為RAM容量有限,所以NewSize限制為16位,實際上如

9、果文件較大應(yīng)該分幾次讀寫并且將NewSize改為UINT32以便累計*/UINT8*pCodeStr;ChangePllValue(24,6,1);Port_Init();console_init(57600);next_line();puts(table_begin);puts(UsbforS3C44B0 xn);ShowSysClock(0,NULL);printf(SerialBaudrateis%dn,SERIAL_BAUD);next_line();puts(table_begin);puts(SystemInitialized.n);mDelaymS(50);/*延時100毫秒*/

10、printf(”測試CH375是否正常n);mDelaymS(60);/*延時50ms*/printf(nCH375_Init完成!);i=CH375LibInit();/*初始化CH375程序庫和CH375芯片,操作成功返回0*/mStopIfError(i);/*其它電路初始化*/CH375_PORT_INIT();while(1)printf(n請插入U盤!n);while(CH375DiskStatus!=DISK_CONNECT)/*查詢CH375中斷并更新中斷狀態(tài),等待U盤插入*/mDelaymS(10);/*檢查U盤是否準備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才

11、能工作*/for(i=0;i11);/*讀取原文件*/printf(Openn);strcpy(char*)mCmdParam.Open.mPathName,WC51WCH375HFT.C/*;文件名,該文件在C51子目錄下*/i=CH375FileOpen();/*打開文件*/if(i=ERR_MISS_DIR|i=ERR_MISS_FILE)/*沒有找到文件*/*列出文件*/if(i=ERR_MISS_DIR)pCodeStr=(UINT8*)*;/*C51子目錄不存在則列出根目錄下的文件*/elsepCodeStr=(UINT8*)C51CH375*;/*CH375HFT.C文件不存在則

12、列出C51子目錄下的以CH375開頭的文件*/printf(Listfile%sn,pCodeStr);for(c=0;cFILE_DATA_BUF_LEN)/*由于演示板用的62256只有32K字節(jié),其中CH375子程序用512字節(jié),所以只讀取不超過63個扇區(qū),也就是不超過32256字節(jié)*/SecCount=FILE_DATA_BUF_LEN/512;/*由于演示板用的62256只有32K字節(jié),其中CH375子程序用512字節(jié),所以只讀取不超過63個扇區(qū),也就是不超過32256字節(jié)*/NewSize=FILE_DATA_BUF_LEN;/*由于RAM有限所以限制長度*/else/*如果原文件

13、較小,那么使用原長度*/SecCount=(CH375vFileSize+511)9;/*(CH375vFileSize+511)/512,計算文件的扇區(qū)數(shù),因為讀寫是以扇區(qū)為單位的,先加511是為了讀出文件尾部不足1個扇區(qū)的部分*/NewSize=(UINT16)CH375vFileSize;/*原文件的長度*/printf(Size=%ld,Len=%d,Sec=%dn,CH375vFileSize,NewSize,(UINT16)SecCount);mCmdParam.Read.mSectorCount=SecCount;/*讀取全部數(shù)據(jù),如果超過60個扇區(qū)則只讀取60個扇區(qū)*/*cur

14、rent_buffer=&FILE_DATA_BUF0;如果文件讀寫的數(shù)據(jù)的復制方式為外部子程序,那么需要設(shè)置存放數(shù)據(jù)的緩沖區(qū)的起始地址*/CH375vFileSize+=511;/*默認情況下,以扇區(qū)方式讀取數(shù)據(jù)時,無法讀出文件尾部不足1個扇區(qū)的部分,所以必須臨時加大文件長度以讀取尾部零頭*/i=CH375FileRead();/*從文件讀取數(shù)據(jù)*/CH375vFileSize-=511;/*恢復原文件長度*/mStopIfError(i);/*如果文件比較大,一次讀不完,可以再調(diào)用CH375FileRead繼續(xù)讀取,文件指針自動向后移動while(1)c=32;每次讀取32個扇區(qū)mCmdP

15、aram.Read.mSectorCount=c;指定讀取的扇區(qū)數(shù)CH375FileRead();讀完后文件指針自動后移處理數(shù)據(jù)if(mCmdParam.Read.mSectorCountc)break;實際讀出的扇區(qū)數(shù)較小則說明文件已經(jīng)結(jié)束如果希望從指定位置開始讀寫,可以移動文件指針mCmdParam.Locate.mSectorOffset=3;跳過文件的前3個扇區(qū)開始讀寫i=CH375FileLocate();mCmdParam.Read.mSectorCount=10;CH375FileRead();直接讀取從文件的第(512*3)個字節(jié)開始的數(shù)據(jù),前3個扇區(qū)被跳過如果希望將新數(shù)據(jù)添加

16、到原文件的尾部,可以移動文件指針i=CH375FileOpen();mCmdParam.Locate.mSectorOffset=0 xffffffff;移到文件的尾部,以扇區(qū)為單位,如果原文件是3字節(jié),則從512字節(jié)開始添加i=CH375FileLocate();mCmdParam.Write.mSectorCount=10;CH375FileWrite();在原文件的后面添加數(shù)據(jù)*/printf(Closen);i=CH375FileClose();/*關(guān)閉文件*/mStopIfError(i);i=FILE_DATA_BUF100;FILE_DATA_BUF100=0;/*置字符串結(jié)束標

17、志,最多顯示500個字符*/printf(Line1:%sn,FILE_DATA_BUF);FILE_DATA_BUF100=i;/*恢復原字符*/for(count=0;count=a&c=z)FILE_DATA_BUFcount=c-(a-A);#ifdefEN_DISK_WRITE/*子程序庫支持寫操作*/*產(chǎn)生新文件*/printf(Createn);strcpy(char*)mCmdParam.Create.mPathName,NEWFILE.TXT);/*新文件名,在根目錄下*/i=CH375FileCreate();/*新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建*/mSto

18、pIfError(i);printf(Writen);mCmdParam.Write.mSectorCount=SecCount;/*寫入所有扇區(qū)的數(shù)據(jù)*/*current_buffer=&FILE_DATA_BUF0;如果文件讀寫的數(shù)據(jù)的復制方式為外部子程序,那么需要設(shè)置存放數(shù)據(jù)的緩沖區(qū)的起始地址*/i=CH375FileWrite();/*向文件寫入數(shù)據(jù)*/mStopIfError(i);printf(Modifyn);mCmdParam.Modify.mFileAttr=0 xff;/*輸入?yún)?shù):新的文件屬性,為0FFH則不修改*/mCmdParam.Modify.mFileTime=Oxffff;/*輸入?yún)?shù):新的文件時間,為0FFFFH則不修改,使用新建文件產(chǎn)生的默認時間*/mCmdParam.Modify.mFileDate=MAKE_FILE_DATE(2004,5,18);/*輸入?yún)?shù):新的文件日期:2004.05.18*/mCmdParam.Modify.mFileSize=NewSize;/*輸入?yún)?shù):如果原文件較小,那么新的文件長度與原文件一樣長,否則被RAM所限,如果文件長度大于64KB,那么NewSize必須為UINT32*/i=CH375FileModify();/*修改

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論