- #include "config.h"
- #include "string.h"
- /*
- *********************************************************************************************************
- ** 函數名稱: SetISR()
- ** 函數功能: 設置向量中斷
- ** 入口參數: no 中斷號
- ** pri 中斷優先級
- ** isr_func 中斷服務函數入口地址
- ** 出口參數: 操作是(1)否(0)成功
- ** 調試說明:
- *********************************************************************************************************
- */
- uint8 SetISR(uint32 no, uint32 pri, uint32 isr_func)
- {
- if(no > 31) return 0;
- if(pri > 15) return 0;
-
- *(volatile uint32*)((&VICVectAddr0)+no) = isr_func; //設置中斷服務函數
- *(volatile uint32*)((&VICVectPri0)+no)= pri & 0x0F; //設置中斷優先級
- VICIntSelect &= ~(1<<no);
- VICIntEnable = 1<<no;
-
- return 1;
- }
- /*********************************************************************************************************
- ** 函數名稱: file_init
- ** 功能描述: 文件系統初始化
- **
- ** 輸 入:
- **
- ** 輸 出: RETURN_OK:成功
- **
- ** 全局變量: 無
- ** 調用模塊:
- ********************************************************************************************************/
- uint8 File_init(void)
- {
- DiskInit();//磁盤初始化
- FileInit();//文件初始化
- SetISR(24,4,(uint32)MCI_Handler);//設置SD卡的中斷
- IRQEnable();//中斷使能
- AddFileDriver(SDCammand);//添加文件驅動
- return 0;
- }
- /*********************************************************************************************************
- ** 函數名稱: dir_creat
- ** 功能描述: 創建目錄
- **
- ** 輸 入: path:路徑名,dirname目錄名
- **
- ** 輸 出: RETURN_OK:成功
- **
- ** 全局變量: 無
- ** 調用模塊:
- ********************************************************************************************************/
- uint8 Dir_creat(char *path,char *dirname)
- {
- uint8 state=255;
- ChangeDir(path);//打開文件夾
- state=MakeDir(dirname);
- AllCacheWriteBack();
- FileClose(0);
- return state;
- }
- /*********************************************************************************************************
- ** 函數名稱: dir_delete
- ** 功能描述: 刪除目錄
- **
- ** 輸 入: path:路徑名,dirname目錄名
- **
- ** 輸 出: RETURN_OK:成功
- **
- ** 全局變量: 無
- ** 調用模塊:
- ********************************************************************************************************/
- uint8 Dir_delete(char *path,char *dirname)
- {
- uint8 state=0;
- ChangeDir(path);//打開文件夾
- state=RemoveDir(dirname);
- AllCacheWriteBack();
- FileClose(0);
- return state;
- }
- /*********************************************************************************************************
- ** 函數名稱: FindFile
- ** 功能描述: 獲取目錄中的文件名
- **
- ** 輸 入: DirFilename:路徑名,i:路徑中的第幾個文件,FileName:返回的文件名
- **
- ** 輸 出: RETURN_OK:成功
- ** 其它參考fat.h中關于返回值的說明
- ** 全局變量: 無
- ** 調用模塊: GetDirClusIndex,GetDiskInfo
- ********************************************************************************************************/
- /* uint8 FindFile(char *DirFilename,char i,char *FileName)
- {
- uint32 ClusIndex=0;
- uint8 Rt=0, Drive=0;
- Disk_Info *Disk;
- FDT *FileFDT;
- char Path[15]={0};//是為了文件、路徑小寫變大寫
- strcpy(Path,DirFilename);
- strupr(Path);// 變為大寫 //
-
- Rt = PATH_NOT_FIND;//=0x0e
- ClusIndex = GetDirClusIndex(Path);//abc空空空空空
- if (ClusIndex != BAD_CLUS)
- {
- Drive = GetDrive(Path);
- Disk = GetDiskInfo(Drive);
- Rt = NOT_FIND_DISK;
- if (Disk != NULL)
- {
- Rt = RETURN_OK;
- Disk->PathClusIndex = ClusIndex;
- }
- }
- GetFDTInfo(FileFDT,Drive,ClusIndex,i);
- Lcd_chinese_16(1,160,FileFDT->Name,0);
- strcpy(FileName,FileFDT->Name);
- return Rt;
- }
- */
- /*********************************************************************************************************
- ** 函數名稱: File_creat
- ** 功能描述: 創建文件
- **
- ** 輸 入: path:路徑名,filename文件名
- **
- ** 輸 出: RETURN_OK:成功
- ********************************************************************************************************/
- uint8 File_creat(char *path,char *filename)
- {
- uint8 state=255;
- ChangeDir(path);//打開文件夾
- state=MakeDir(filename);
- AllCacheWriteBack();
- FileClose(0);
- return state;
- }
- /*********************************************************************************************************
- ** 函數名稱: File_delete
- ** 功能描述: 刪除文件
- **
- ** 輸 入: path:路徑名,filename文件名
- **
- ** 輸 出: RETURN_OK:成功
- **
- ** 全局變量: 無
- ** 調用模塊:
- ********************************************************************************************************/
- uint8 File_delete(char *path,char *filename)
- {
- uint8 state=0;
- ChangeDir(path);//打開文件夾
- state=RemoveFile(filename);
- AllCacheWriteBack();
- FileClose(0);
- return state;
- }
- /*********************************************************************************************************
- ** 函數名稱: file_find
- ** 功能描述: 獲取目錄中的指定文件類型的文件名
- **
- ** 輸 入: Dirname:路徑名,fileextname:文件擴展名,filename:存放返回的文件名
- **
- ** 輸 出: RETURN_OK:成功
- ** 其它參考fat.h中關于返回值的說明
- ** 全局變量: 無
- ** 調用模塊: GetDirClusIndex,GetDiskInfo
- ********************************************************************************************************/
- uint8 File_find(char *Dirname,char *fileextname,char (*filename)[12])
- { MY_FILE FileInfo[MAX_OPEN_FILES];
- MY_FILE *fp;
- HANDLE Rt;
- FDT FileFDT;
- uint32 i;
- uint8 temp;
- char NAME[12]={0};
- ChangeDir(Dirname);
- /* 查找空閑文件登記項 */
- for (Rt = 0; Rt < MAX_OPEN_FILES; Rt++)
- {
- if (FileInfo[Rt].Flags == 0)
- {
- break;
- }
- }
-
- if (Rt < MAX_OPEN_FILES)
- {
- fp = FileInfo + Rt;
-
- /* 獲取目錄開始簇號和文件名 */
- fp->DirClus = _GetFDTInfo(fp->Name,fileextname);
- if (fp->DirClus < BAD_CLUS)
- {
- fp->Drive = GetDrive(fileextname); /* 獲取文件所在邏輯盤號 */
-
-
-
- i = 0;
- /*if (FileName[0] == DEL_FDT)
- {
- FileName[0] = ESC_FDT;
- }*/
- while (1)
- {
- temp = GetFDTInfo(&FileFDT, fp->Drive, fp->DirClus, i);
- if (temp != RETURN_OK)
- {temp = RETURN_OK;
- break;
- }
- if (FileFDT.Name[0] == EMPTY_FDT)
- {
- temp = NOT_FIND_FDT;
- break;
- }
- if ((FileFDT.Attr & ATTR_VOLUME_ID) == 0)
- if((FileFDT.Name[8]==fileextname[0])&&(FileFDT.Name[9]==fileextname[1])&&(FileFDT.Name[10]==fileextname[2])&&(FileFDT.Name[0]!=0xe5))
- {strcpy(NAME,FileFDT.Name);
- NAME[11]='\0';
- strcpy(*(filename++),NAME);
- }
- i++;
- }
- /* 獲取文件信息 */
- // if (FindFDTFileInfo(&FileFDT, fp->Drive, fp->DirClus, fp->Name,(*filename)[12]) == RETURN_OK)
- /*{
- if ((FileFDT.Attr & ATTR_DIRECTORY) == 0)
- {
- fp->Flags = FILE_FLAGS_READ;
- fp->FileSize = FileFDT.FileSize;
- Sd_File_size = FileFDT.FileSize;//記下打開文件的大小
- fp->FstClus = FileFDT.FstClusLO | (uint32)FileFDT.FstClusHI << 16;//把FDT中的信息給MY_FILE
- fp->Clus = fp->FstClus;
- fp->Offset = 0;//清零偏移量
- return Rt;
- }
- }*/
- }
- }
-
- return RETURN_OK;
- }
- /*********************************************************************************************************
- ** 函數名稱: file_open
- ** 功能描述: 打開文件
- **
- ** 輸 入: Dirname:路徑名
- Filename:文件名
- RWtype:打開方式
- **
- ** 輸 出: 文件句柄如果為0xff表示打開失敗
- **
- ** 全局變量: 無
- ** 調用模塊: GetDirClusIndex,GetDiskInfo
- ********************************************************************************************************/
- HANDLE File_open(char *Dirname,char *Filename, char *RWtype)
- {
- HANDLE FHandle;//文件句柄,代表一個打開的文件
- char DirName[12]={0};
- char FileName[12]={0};//文件名
- char RWType[3]={0};
- uint8 state=0;
- strcpy(DirName,Dirname);
- strcpy(FileName,Filename);
- strcpy(RWType,RWtype);
- state=ChangeDir(DirName);//打開文件夾
- FHandle = FileOpen(FileName,RWType);//打開文件,并得到文件句柄,FHandle實際是現在打開的第幾個文件,也是MY_FILE FileInfo[FHandle]的編號
- if(FHandle==Not_Open_FILE) return (int8)state;//文件打開的狀態,打開錯誤則退出并返回值
-
- return FHandle;
- }
- /*********************************************************************************************************
- ** 函數名稱: file_read
- ** 功能描述: 讀文件
- **
- ** 輸 入:FHandle:文件句柄
- Whence:讀文件的位置
- offset:讀文件的字節數
- Readbuf:讀回數據存放位置
- **
- ** 輸 出: RETURN_OK:成功
- ** 全局變量: 無
- ** 調用模塊: GetDirClusIndex,GetDiskInfo
- ********************************************************************************************************/
- uint8 File_read(HANDLE FHandle,uint8 Whence,int32 offset,char *Readbuf)
- {
- uint8 state;
- state=FileSeek(FHandle,0,Whence);//文件的內容指針指向文件開始后的0字節
- state=FileRead(Readbuf,offset,FHandle);//讀取文件內容,讀10個字節
- return state;
- }
- /*********************************************************************************************************
- ** 函數名稱: file_close
- ** 功能描述: 關閉文件文件
- **
- ** 輸 入:FHandle:文件句柄
- **
- ** 輸 出: RETURN_OK:成功
- ** 全局變量: 無
- ** 調用模塊: GetDirClusIndex,GetDiskInfo
- **
- ** 作 者:
- ** 日 期: 2007年10月1日
- **-------------------------------------------------------------------------------------------------------
- ** 修改人:
- ** 日 期:
- **------------------------------------------------------------------------------------------------------
- ********************************************************************************************************/
- uint8 File_close(HANDLE FHandle)
- {
- uint8 state;
- state=FileClose(FHandle);//關閉文件,釋放句柄,相當于文件初始化
- //FileCloseAll();//關閉所有文件
- AllCacheWriteBack();//所有文件的緩存數據寫回到文件
- //RemoveFileDriver(0);//移除文件驅動,相當于文件磁盤初始化
- return state;
- }
- /*********************************************************************************************************
- ** 函數名稱: file_write
- ** 功能描述: 讀文件
- **
- ** 輸 入:FHandle:文件句柄
- Whence:讀文件的位置
- offset:讀文件的字節數
- Readbuf:讀回數據存放位置
- **
- ** 輸 出: RETURN_OK:成功
- ** 全局變量: 無
- ** 調用模塊: GetDirClusIndex,GetDiskInfo
- **
- ** 作 者:
- ** 日 期: 2007年10月1日
- **-------------------------------------------------------------------------------------------------------
- ** 修改人:
- ** 日 期:
- **------------------------------------------------------------------------------------------------------
- ********************************************************************************************************/
- uint8 File_write(HANDLE FHandle,uint8 Whence,int32 offset,char *Readbuf)
- {
- uint8 state;
- state=FileSeek(FHandle,0,Whence);//文件的內容指針指向文件開始后的0字節
- state=FileWrite(Readbuf,offset,FHandle);//讀取文件內容,讀10個字節
- return state;
- }
- /*********************************************************************************************************
- ** 函數名稱: file_read
- ** 功能描述: 讀文件
- **
- ** 輸 入: DirFilename:路徑名
- **
- ** 輸 出: RETURN_OK:成功
- ** 其它參考fat.h中關于返回值的說明
- ** 全局變量: 無
- ** 調用模塊: GetDirClusIndex,GetDiskInfo
- **
- ** 作 者:
- ** 日 期: 2007年10月1日
- **-------------------------------------------------------------------------------------------------------
- ** 修改人:
- ** 日 期:
- **------------------------------------------------------------------------------------------------------
- ********************************************************************************************************/
- /*uint8 File_read(void)
- {
- HANDLE FHandle;//文件句柄,代表一個打開的文件
- char FileName[12]={"15153.txt"};//文件名
- char Readbuf[21]={1};//讀取的文件內容
- uint8 state=0;
- //AddFileDriver(SDCammand);//添加文件驅動
- //ChangeDir("..");//當前目錄
- state=ChangeDir("a:\\abc");//打開文件夾
- //ChangeDir("131");//打開子文件夾
- FHandle = FileOpen(FileName,"R");//打開文件,并得到文件句柄,FHandle實際是現在打開的第幾個文件,也是MY_FILE FileInfo[FHandle]的編號
- if(FHandle==Not_Open_FILE)return 1;//文件打開的狀態,打開錯誤則退出并返回值
- FileSeek(FHandle, 0, SEEK_SET);//文件的內容指針指向文件開始后的0字節
- FileRead(Readbuf,10, FHandle);//讀取文件內容,讀10個字節
- FileClose(FHandle);//關閉文件,釋放句柄,相當于文件初始化
- //FileCloseAll();//關閉所有文件
- AllCacheWriteBack();//所有文件的緩存數據寫回到文件
- //RemoveFileDriver(0);//移除文件驅動,相當于文件磁盤初始化
- //Lcd_chinese_16(1,160,Readbuf,0);
- return state;
- }*/
復制代碼
|