亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fat.c

?? CS5532的驅動程序
?? C
字號:
/************************************************************/
/*		         FAT Code for   M32L					    */
/*				   By   pasyong								*/
/*				   2006-4									*/
/*				   Base ICC6.31A					        */
/************************************************************/
#include <iom8v.h>
#include <macros.h>
#include <string.h>

#include "DEFINE.H"
#include "mmc.h"
#include "fat.h"
#include "UART.H"
#include "DELAY.H"

extern uint08 BUFFER[512];


unsigned char  LONGNAME_BUFFER_ADDR[30];
unsigned char  DIRNAME_BUFFER_ADDR[30];
unsigned char *LongNameBuffer =		(unsigned char *) LONGNAME_BUFFER_ADDR;
unsigned char *DirNameBuffer =		(unsigned char *) DIRNAME_BUFFER_ADDR;
struct partrecord PartInfo;
unsigned char Fat32Enabled;
unsigned long FirstDataSector;
unsigned int  BytesPerSector;
unsigned int  SectorsPerCluster;
unsigned long FirstFATSector;
unsigned long FirstDirSector;
unsigned long FileSize;
unsigned long FatInCache = 0;

//********************************************************************************************
//讀一個扇區
//void ReadBlock(unsigned long LBA)
//********************************************************************************************
/*{   
  unsigned long temp;
  temp=LBA<<9;
  SD_Read_Block(temp);
}*/



/*-----------------------------------------------------------------------
 查詢數據區一個簇開始扇區號
-----------------------------------------------------------------------*/
unsigned long fatClustToSect(unsigned long clust)
{
	return ((clust-2) * SectorsPerCluster) + FirstDataSector;
}

/*-----------------------------------------------------------------------
 查詢一個簇所占扇區數
-----------------------------------------------------------------------*/
unsigned int fatClusterSize(void)
{
	// return the number of sectors in a disk cluster
	return SectorsPerCluster;
}


/*-----------------------------------------------------------------------
查詢SD卡文件系統信息
-----------------------------------------------------------------------*/
unsigned char fatInit(void)
{
   	uint16 data;uint08 t1,t2;
	struct bpb710 *bpb;
	uint08 i;
	uint16 temp;
	
	// 讀MBR結構
	//ReadBlock(0); 
	MMC_get_data_LBA(0,512,BUFFER);
	// 讀取分區表信息
	PartInfo = *((struct partrecord *) ((struct partsector *)BUFFER)->psPart);

	// 讀引導扇區
	// 引導扇區號在PartInfo.prStartLBA中
	//ReadBlock(PartInfo.prStartLBA);  //ataReadSectors( DRIVE0, PartInfo.prStartLBA, 1, SectorBuffer );
	MMC_get_data_LBA(PartInfo.prStartLBA,512,BUFFER);	
		
	bpb = (struct bpb710 *) ((struct bootsector710 *) BUFFER)->bsBPB;

	FirstDataSector	= PartInfo.prStartLBA;
	if(bpb->bpbFATsecs)
	{
		// bpbFATsecs非0,為FAT16,FAT表所占的扇區數在bpbFATsecs里
		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbFATsecs;
	}
	else
	{
		// bpbFATsecs是0,為FAT32,FAT表所占的扇區數在bpbBigFATsecs里
		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbBigFATsecs;
	}
	
	SectorsPerCluster	= bpb->bpbSecPerClust;
	BytesPerSector		= bpb->bpbBytesPerSec;
	FirstFATSector		= bpb->bpbResSectors + PartInfo.prStartLBA;
	
	//查詢SD卡文件系統分區類型
	switch (PartInfo.prPartType)
	{
		case PART_TYPE_DOSFAT16:
		case PART_TYPE_FAT16: 
		case PART_TYPE_FAT16LBA:
			// 第一個目錄扇區號為2
			FirstDirSector	= CLUST_FIRST;
			//FirstDataSector += (bpb->bpbRootDirEnts)/DIRENTRIES_PER_SECTOR;
			Fat32Enabled = 0;
			
			break;
		case PART_TYPE_FAT32LBA:
		case PART_TYPE_FAT32:
			FirstDirSector = bpb->bpbRootClust;
			Fat32Enabled = 1;
			break;
		default:break;
			//return 1;
	}
	
	//put_char(PartInfo.prPartType);
	//put_char((bpb->bpbBytesPerSec)>>8);
	//put_char(bpb->bpbSecPerClust);
	
	//查詢SD卡文件系統信息
	switch (PartInfo.prPartType)
	{
		case PART_TYPE_DOSFAT16:
				
				put_chars("DOSFAT 16");
				//LCD_write_english_string(0,0,"DOSFAT 16");
				break;
		case PART_TYPE_FAT16:
				put_chars("FAT16");
				//LCD_write_english_string(0,0,"FAT16 ");
				break;
		case PART_TYPE_FAT16LBA:
				put_chars("FAT16 LBA");
				//LCD_write_english_string(0,0,"FAT16 LBA");
				break;
		case PART_TYPE_FAT32LBA:
				put_chars("FAT32 LBA");
				//LCD_write_english_string(0,0,"FAT32 LBA");
				break;
		case PART_TYPE_FAT32:
				put_chars("FAT32");
				//LCD_write_english_string(0,0,"FAT32");
				break;
		default:
				put_chars("NO Parttion");
				//LCD_write_english_string(0,0,"No Partition!");
				break;
	}
	//顯示磁盤容量
  	data=PartInfo.prSize>>11;		//單位是MB
	put_chars("   Totel ");
	temp=data/1000;
	if(temp)
	put_char(temp+0x30);
	temp=data/100%10;
	put_char(temp+0x30);
	temp=data/10%10;
	put_char(temp+0x30);	
	temp=data%10;	
	put_char(temp+0x30);
	put_chars(" MB");
	
	return 0;
}

/*-----------------------------------------------------------------------
查詢一個文件的開始簇
-----------------------------------------------------------------------*/
unsigned int baseentry = 0;
unsigned int entrycount = 0;


unsigned long fatGetDirEntry(unsigned int entry)
{
	unsigned long sector;
	struct direntry *de = 0;	// 防止compiler warning
	struct winentry *we;
	unsigned int hasBuffer;
	unsigned int b;
	int i,index;
	char *p;
	
	entrycount = 0;
	DirNameBuffer = 0;
	
	
	// 讀取目錄區數據
	sector = fatClustToSect(FirstDirSector);

	/*put_char(0x55);
	put_char(0xAA);
	put_char(sector>>24);
	put_char(sector>>16);
	put_char(sector>>8);
	put_char(sector);
	*/
	
	hasBuffer = 0;
	index = 16;	//一個扇區包含16個目錄
	do 
	{
		if(index == 16)	// 是否該一人一扇區time for next sector ?
		{
			//ReadBlock(sector++);
			MMC_get_data_LBA(sector++,512,BUFFER);
			de = (struct direntry *)BUFFER;
			index = 0;
		}	
	
		if(*de->deName != 0xE5)		//此目錄不為空
		{
			// 如果if not a deleted entry
			if(de->deAttributes == ATTR_LONG_FILENAME)	//如果是長文件名
			{
				// we have a long name entry
				we = (struct winentry *) de;
				b = 13 *( (we->weCnt-1) & 0x0f);				// index into string
				p = &LongNameBuffer[b];
				for (i=0;i<5;i++)	*p++ = we->wePart1[i*2];	// copy first part			
				for (i=0;i<6;i++)	*p++ = we->wePart2[i*2];	// second part
				for (i=0;i<2;i++)	*p++ = we->wePart3[i*2];	// and third part
				if (we->weCnt & 0x40) *p = 0;					// in case dirnamelength is multiple of 13
				if ((we->weCnt & 0x0f) == 1) hasBuffer = 1;		// mark that we have a long entry
			}
			else
			{
				// we have a short name entry
				// check if this is the end of a multi-part long name entry
				if(hasBuffer)
				{
					// a long entry name has been collected
					// is it a directory ?
					if(de->deAttributes == ATTR_DIRECTORY)	//目錄
					{
						unsigned long save = FirstDirSector;
						unsigned int save2 = baseentry;
						unsigned long rval;
						
						strcpy(DirNameBuffer,LongNameBuffer);
						strcat(DirNameBuffer,"/");

//						rprintfStr(LongNameBuffer); rprintfProgStrM("/"); //EOL();

						// call recursively
						FirstDirSector = ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
						rval = fatGetDirEntry(entry);
						FirstDirSector = save;
						baseentry = save2;
						if (rval)
							return rval;
						else	
						{
							// reload original sector
							//ReadBlock(sector-1);//ataReadSectors( DRIVE0,	sector-1, 1, SectorBuffer);
							MMC_get_data_LBA((sector-1),512,BUFFER);
							entrycount--;			// decrement entry counter		
							*DirNameBuffer = 0;
                 				}
					}
					else 		// normal file entry正常的文件
						if(entrycount == entry)		//跳出	
							break;
					hasBuffer = 0;	// clear buffer	
					entrycount++;	// increment entry counter		
				}
				// else ignore short_name_only entries
			}
		}
		de++;
		index++;
	}while (*de->deName || index == 16);	// 0 in de->deName[0] if no more entries


	if (hasBuffer == 0)		// end of entries
	return 0;
	FileSize = de->deFileSize;
	return (unsigned long) ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
}



/*-----------------------------------------------------------------------
 在FAT表中查詢下一個簇所在扇區號
-----------------------------------------------------------------------*/
unsigned long fatNextCluster(unsigned long cluster)
{
	unsigned long nextCluster;
	unsigned long fatMask;
	unsigned long fatOffset;
	unsigned long sector;
	unsigned int offset;
	
	if(Fat32Enabled)	//表示FAT32格式	
	{
		// 一個表項為4bytes(32 bits)
		fatOffset = cluster << 2;
		// 設置 FAT32 bit mask
		fatMask = FAT32_MASK;
	}
	else //表示FAT16
	{
		// 一個表項為2bytes(16 bits)
		fatOffset = cluster << 1;
		// 設置 FAT16 bit mask
		fatMask = FAT16_MASK;
	}
	
	//計算FAT扇區號
	sector = FirstFATSector + (fatOffset / BytesPerSector);
	//計算FAT扇區號中表項的偏移地址
	offset = fatOffset % BytesPerSector;
    
	//ReadBlock(sector);
	MMC_get_data_LBA(sector,512,BUFFER);

	// 讀取下一個簇號
	nextCluster = (*((unsigned long*) &((char*)BUFFER)[offset])) & fatMask;

	// 是否文件的結束簇
	if (nextCluster == (CLUST_EOFE & fatMask))
		nextCluster = 0;
		
	return nextCluster;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影免费提供在线观看| 国产色婷婷亚洲99精品小说| 日韩免费电影网站| 国产精品热久久久久夜色精品三区| 一区二区三区欧美亚洲| 久久av中文字幕片| 色婷婷一区二区三区四区| 日韩一级片在线播放| 亚洲精品视频在线看| 久久99在线观看| 欧美男女性生活在线直播观看| 中文字幕亚洲成人| 国产成人免费视| 久久综合九色综合欧美就去吻| 日韩高清中文字幕一区| 99re视频这里只有精品| 欧美mv和日韩mv的网站| 天天综合网 天天综合色| 91同城在线观看| 国产精品欧美一级免费| 国产精品一区三区| 欧美不卡一区二区三区四区| 香蕉乱码成人久久天堂爱免费| 日本乱码高清不卡字幕| 亚洲色图19p| 99re热这里只有精品视频| 国产精品视频第一区| 懂色av一区二区三区蜜臀 | 成人动漫精品一区二区| 日韩精品一区二区三区视频在线观看 | 亚洲男同1069视频| 国产999精品久久| 日韩精品一区二区三区四区视频| 日韩影视精彩在线| 欧美日韩国产片| 石原莉奈一区二区三区在线观看| 欧美日韩一区二区三区高清| 亚洲一区二区三区在线播放| 91国偷自产一区二区开放时间| 亚洲欧美激情小说另类| 欧美色偷偷大香| 亚洲123区在线观看| 欧美精品成人一区二区三区四区| 成人av在线网站| 国产精品久久久久久久裸模| jlzzjlzz亚洲女人18| 亚洲色图视频网站| 欧美性猛片xxxx免费看久爱| 日韩高清一级片| 日韩一级视频免费观看在线| 国产美女av一区二区三区| 国产精品色一区二区三区| 一本一道综合狠狠老| 亚洲成人中文在线| 精品国产91亚洲一区二区三区婷婷| 韩国欧美一区二区| 国产精品欧美一区二区三区| 欧美亚洲国产bt| 日日夜夜免费精品视频| 国产视频一区二区三区在线观看| 99re亚洲国产精品| 日韩精品一级中文字幕精品视频免费观看 | 精品福利一区二区三区免费视频| 国产一区二区三区免费看| 中文字幕在线观看一区二区| 欧美日韩第一区日日骚| 国产一区二区在线观看免费| 亚洲色图清纯唯美| 日韩精品一区二区三区在线观看| 国产不卡视频在线播放| 亚洲电影激情视频网站| 久久伊99综合婷婷久久伊| 色综合久久久久久久久| 久久国产精品区| 亚洲欧美日韩国产综合| 日韩欧美一区二区在线视频| 91麻豆免费观看| 麻豆91在线播放免费| 日韩美女视频19| 日韩精品在线网站| 欧美性视频一区二区三区| 国产综合久久久久久鬼色| 一区二区三区中文在线观看| 久久午夜色播影院免费高清| 欧美日韩视频不卡| 成人午夜免费视频| 麻豆精品新av中文字幕| 亚洲bt欧美bt精品| 中国色在线观看另类| 日韩欧美一级精品久久| 欧美影院精品一区| 波多野结衣中文一区| 久久精品国产精品亚洲精品| 亚洲一区成人在线| 国产精品午夜在线| 欧美精品一区男女天堂| 欧美少妇一区二区| 色综合 综合色| 波多野结衣欧美| 国产成人自拍网| 久久狠狠亚洲综合| 亚洲成人综合在线| 一区二区三区波多野结衣在线观看| 国产精品青草久久| 久久麻豆一区二区| 欧美岛国在线观看| 91精品国产91久久久久久最新毛片| 色婷婷国产精品综合在线观看| 成人午夜视频福利| 精品精品国产高清a毛片牛牛| 在线视频中文字幕一区二区| av在线不卡网| 9人人澡人人爽人人精品| 国产成人高清在线| 国产激情偷乱视频一区二区三区| 国产精品一区免费视频| 国产成人精品午夜视频免费| 国产成人免费av在线| 懂色av中文一区二区三区| 国产在线播放一区三区四| 国产专区综合网| 国产高清在线观看免费不卡| 国产在线精品一区二区夜色 | av一本久道久久综合久久鬼色| 国产精品综合在线视频| 激情综合色综合久久| 国产资源精品在线观看| 国产激情视频一区二区三区欧美| 黄网站免费久久| 成人天堂资源www在线| 91免费精品国自产拍在线不卡| 91麻豆免费视频| 7878成人国产在线观看| 欧美白人最猛性xxxxx69交| 精品国产一区二区三区四区四| 久久综合九色综合97_久久久| 国产亚洲视频系列| 亚洲美女免费在线| 日韩电影一二三区| 韩国av一区二区三区四区 | 欧美自拍偷拍一区| 欧美精品vⅰdeose4hd| 精品久久久久久最新网址| 国产欧美日韩激情| 亚洲激情六月丁香| 蜜桃视频一区二区三区在线观看| 国产999精品久久久久久绿帽| 91国产免费观看| 欧美成人a∨高清免费观看| 国产精品超碰97尤物18| 亚洲成国产人片在线观看| 麻豆精品国产传媒mv男同| 不卡的av电影| 91精品一区二区三区在线观看| 国产日韩三级在线| 亚洲bt欧美bt精品| 成人午夜激情片| 欧美一二三四在线| 中文字幕欧美一区| 美腿丝袜在线亚洲一区| 91美女在线视频| 久久这里只精品最新地址| 亚洲影视资源网| 成人综合婷婷国产精品久久蜜臀| 欧美三级电影一区| 国产精品美女一区二区| 免费成人在线网站| 色av综合在线| 国产婷婷色一区二区三区四区| 亚洲高清视频中文字幕| av中文一区二区三区| 久久综合九色综合97_久久久| 亚洲国产精品久久不卡毛片| 成人一级黄色片| 精品不卡在线视频| 午夜免费久久看| 日本乱人伦一区| 国产精品国产精品国产专区不蜜| 日日夜夜精品免费视频| 色综合av在线| ...xxx性欧美| 成人深夜在线观看| 精品国产一区二区三区不卡| 日韩高清一区二区| 欧美日本韩国一区| 成人高清视频在线| 精品国精品国产| 美女爽到高潮91| 日韩免费观看2025年上映的电影| 一二三四社区欧美黄| 91免费看片在线观看| 1000精品久久久久久久久| 不卡电影一区二区三区| 中文字幕成人网| 播五月开心婷婷综合| 国产精品久久毛片| 成人小视频免费观看| 中文字幕+乱码+中文字幕一区| 成人性色生活片免费看爆迷你毛片| 中文字幕第一区|