- #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;
- }*/
复制代码
|