標(biāo)題:
filerw.c周立功的SD卡操作
[打印本頁(yè)]
作者:
liuda
時(shí)間:
2015-1-23 03:53
標(biāo)題:
filerw.c周立功的SD卡操作
#include "config.h"
#include "string.h"
/*
*********************************************************************************************************
** 函數(shù)名稱(chēng): SetISR()
** 函數(shù)功能: 設(shè)置向量中斷
** 入口參數(shù): no 中斷號(hào)
** pri 中斷優(yōu)先級(jí)
** isr_func 中斷服務(wù)函數(shù)入口地址
** 出口參數(shù): 操作是(1)否(0)成功
** 調(diào)試說(shuō)明:
*********************************************************************************************************
*/
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; //設(shè)置中斷服務(wù)函數(shù)
*(volatile uint32*)((&VICVectPri0)+no)= pri & 0x0F; //設(shè)置中斷優(yōu)先級(jí)
VICIntSelect &= ~(1<<no);
VICIntEnable = 1<<no;
return 1;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): file_init
** 功能描述: 文件系統(tǒng)初始化
**
** 輸 入:
**
** 輸 出: RETURN_OK:成功
**
** 全局變量: 無(wú)
** 調(diào)用模塊:
********************************************************************************************************/
uint8 File_init(void)
{
DiskInit();//磁盤(pán)初始化
FileInit();//文件初始化
SetISR(24,4,(uint32)MCI_Handler);//設(shè)置SD卡的中斷
IRQEnable();//中斷使能
AddFileDriver(SDCammand);//添加文件驅(qū)動(dòng)
return 0;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): dir_creat
** 功能描述: 創(chuàng)建目錄
**
** 輸 入: path:路徑名,dirname目錄名
**
** 輸 出: RETURN_OK:成功
**
** 全局變量: 無(wú)
** 調(diào)用模塊:
********************************************************************************************************/
uint8 Dir_creat(char *path,char *dirname)
{
uint8 state=255;
ChangeDir(path);//打開(kāi)文件夾
state=MakeDir(dirname);
AllCacheWriteBack();
FileClose(0);
return state;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): dir_delete
** 功能描述: 刪除目錄
**
** 輸 入: path:路徑名,dirname目錄名
**
** 輸 出: RETURN_OK:成功
**
** 全局變量: 無(wú)
** 調(diào)用模塊:
********************************************************************************************************/
uint8 Dir_delete(char *path,char *dirname)
{
uint8 state=0;
ChangeDir(path);//打開(kāi)文件夾
state=RemoveDir(dirname);
AllCacheWriteBack();
FileClose(0);
return state;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): FindFile
** 功能描述: 獲取目錄中的文件名
**
** 輸 入: DirFilename:路徑名,i:路徑中的第幾個(gè)文件,F(xiàn)ileName:返回的文件名
**
** 輸 出: RETURN_OK:成功
** 其它參考fat.h中關(guān)于返回值的說(shuō)明
** 全局變量: 無(wú)
** 調(diào)用模塊: 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};//是為了文件、路徑小寫(xiě)變大寫(xiě)
strcpy(Path,DirFilename);
strupr(Path);// 變?yōu)榇髮?xiě) //
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;
}
*/
/*********************************************************************************************************
** 函數(shù)名稱(chēng): File_creat
** 功能描述: 創(chuàng)建文件
**
** 輸 入: path:路徑名,filename文件名
**
** 輸 出: RETURN_OK:成功
********************************************************************************************************/
uint8 File_creat(char *path,char *filename)
{
uint8 state=255;
ChangeDir(path);//打開(kāi)文件夾
state=MakeDir(filename);
AllCacheWriteBack();
FileClose(0);
return state;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): File_delete
** 功能描述: 刪除文件
**
** 輸 入: path:路徑名,filename文件名
**
** 輸 出: RETURN_OK:成功
**
** 全局變量: 無(wú)
** 調(diào)用模塊:
********************************************************************************************************/
uint8 File_delete(char *path,char *filename)
{
uint8 state=0;
ChangeDir(path);//打開(kāi)文件夾
state=RemoveFile(filename);
AllCacheWriteBack();
FileClose(0);
return state;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): file_find
** 功能描述: 獲取目錄中的指定文件類(lèi)型的文件名
**
** 輸 入: Dirname:路徑名,fileextname:文件擴(kuò)展名,filename:存放返回的文件名
**
** 輸 出: RETURN_OK:成功
** 其它參考fat.h中關(guān)于返回值的說(shuō)明
** 全局變量: 無(wú)
** 調(diào)用模塊: 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);
/* 查找空閑文件登記項(xiàng) */
for (Rt = 0; Rt < MAX_OPEN_FILES; Rt++)
{
if (FileInfo[Rt].Flags == 0)
{
break;
}
}
if (Rt < MAX_OPEN_FILES)
{
fp = FileInfo + Rt;
/* 獲取目錄開(kāi)始簇號(hào)和文件名 */
fp->DirClus = _GetFDTInfo(fp->Name,fileextname);
if (fp->DirClus < BAD_CLUS)
{
fp->Drive = GetDrive(fileextname); /* 獲取文件所在邏輯盤(pán)號(hào) */
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;//記下打開(kāi)文件的大小
fp->FstClus = FileFDT.FstClusLO | (uint32)FileFDT.FstClusHI << 16;//把FDT中的信息給MY_FILE
fp->Clus = fp->FstClus;
fp->Offset = 0;//清零偏移量
return Rt;
}
}*/
}
}
return RETURN_OK;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): file_open
** 功能描述: 打開(kāi)文件
**
** 輸 入: Dirname:路徑名
Filename:文件名
RWtype:打開(kāi)方式
**
** 輸 出: 文件句柄如果為0xff表示打開(kāi)失敗
**
** 全局變量: 無(wú)
** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
********************************************************************************************************/
HANDLE File_open(char *Dirname,char *Filename, char *RWtype)
{
HANDLE FHandle;//文件句柄,代表一個(gè)打開(kāi)的文件
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);//打開(kāi)文件夾
FHandle = FileOpen(FileName,RWType);//打開(kāi)文件,并得到文件句柄,F(xiàn)Handle實(shí)際是現(xiàn)在打開(kāi)的第幾個(gè)文件,也是MY_FILE FileInfo[FHandle]的編號(hào)
if(FHandle==Not_Open_FILE) return (int8)state;//文件打開(kāi)的狀態(tài),打開(kāi)錯(cuò)誤則退出并返回值
return FHandle;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): file_read
** 功能描述: 讀文件
**
** 輸 入:FHandle:文件句柄
Whence:讀文件的位置
offset:讀文件的字節(jié)數(shù)
Readbuf:讀回?cái)?shù)據(jù)存放位置
**
** 輸 出: RETURN_OK:成功
** 全局變量: 無(wú)
** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
********************************************************************************************************/
uint8 File_read(HANDLE FHandle,uint8 Whence,int32 offset,char *Readbuf)
{
uint8 state;
state=FileSeek(FHandle,0,Whence);//文件的內(nèi)容指針指向文件開(kāi)始后的0字節(jié)
state=FileRead(Readbuf,offset,FHandle);//讀取文件內(nèi)容,讀10個(gè)字節(jié)
return state;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): file_close
** 功能描述: 關(guān)閉文件文件
**
** 輸 入:FHandle:文件句柄
**
** 輸 出: RETURN_OK:成功
** 全局變量: 無(wú)
** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
**
** 作 者:
** 日 期: 2007年10月1日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 File_close(HANDLE FHandle)
{
uint8 state;
state=FileClose(FHandle);//關(guān)閉文件,釋放句柄,相當(dāng)于文件初始化
//FileCloseAll();//關(guān)閉所有文件
AllCacheWriteBack();//所有文件的緩存數(shù)據(jù)寫(xiě)回到文件
//RemoveFileDriver(0);//移除文件驅(qū)動(dòng),相當(dāng)于文件磁盤(pán)初始化
return state;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): file_write
** 功能描述: 讀文件
**
** 輸 入:FHandle:文件句柄
Whence:讀文件的位置
offset:讀文件的字節(jié)數(shù)
Readbuf:讀回?cái)?shù)據(jù)存放位置
**
** 輸 出: RETURN_OK:成功
** 全局變量: 無(wú)
** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
**
** 作 者:
** 日 期: 2007年10月1日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 File_write(HANDLE FHandle,uint8 Whence,int32 offset,char *Readbuf)
{
uint8 state;
state=FileSeek(FHandle,0,Whence);//文件的內(nèi)容指針指向文件開(kāi)始后的0字節(jié)
state=FileWrite(Readbuf,offset,FHandle);//讀取文件內(nèi)容,讀10個(gè)字節(jié)
return state;
}
/*********************************************************************************************************
** 函數(shù)名稱(chēng): file_read
** 功能描述: 讀文件
**
** 輸 入: DirFilename:路徑名
**
** 輸 出: RETURN_OK:成功
** 其它參考fat.h中關(guān)于返回值的說(shuō)明
** 全局變量: 無(wú)
** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
**
** 作 者:
** 日 期: 2007年10月1日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/*uint8 File_read(void)
{
HANDLE FHandle;//文件句柄,代表一個(gè)打開(kāi)的文件
char FileName[12]={"15153.txt"};//文件名
char Readbuf[21]={1};//讀取的文件內(nèi)容
uint8 state=0;
//AddFileDriver(SDCammand);//添加文件驅(qū)動(dòng)
//ChangeDir("..");//當(dāng)前目錄
state=ChangeDir("a:\\abc");//打開(kāi)文件夾
//ChangeDir("131");//打開(kāi)子文件夾
FHandle = FileOpen(FileName,"R");//打開(kāi)文件,并得到文件句柄,F(xiàn)Handle實(shí)際是現(xiàn)在打開(kāi)的第幾個(gè)文件,也是MY_FILE FileInfo[FHandle]的編號(hào)
if(FHandle==Not_Open_FILE)return 1;//文件打開(kāi)的狀態(tài),打開(kāi)錯(cuò)誤則退出并返回值
FileSeek(FHandle, 0, SEEK_SET);//文件的內(nèi)容指針指向文件開(kāi)始后的0字節(jié)
FileRead(Readbuf,10, FHandle);//讀取文件內(nèi)容,讀10個(gè)字節(jié)
FileClose(FHandle);//關(guān)閉文件,釋放句柄,相當(dāng)于文件初始化
//FileCloseAll();//關(guān)閉所有文件
AllCacheWriteBack();//所有文件的緩存數(shù)據(jù)寫(xiě)回到文件
//RemoveFileDriver(0);//移除文件驅(qū)動(dòng),相當(dāng)于文件磁盤(pán)初始化
//Lcd_chinese_16(1,160,Readbuf,0);
return state;
}*/
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1