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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? fat32_base.c

?? blackfin平臺(tái)實(shí)現(xiàn)對(duì)SD卡的支持
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/************************************************************************
* File         : fat32_base.c
* Processor    : ADSP-BF533  
* IDDE         : VisualDSP++3.5
* Description  : FAT driver functions which is mainly cluster-based operation, includes:
*                  
*            Wait_Ready();
*            Wait_ReadyBusy();
*            CheckforError();
*            IdeStandby();
*            IdeIdle();
*
*************************************************************************/


#include "FAT/filesystem.h"
#include "FAT/fat32.h"
#include "IDE/ide_access.h"
#include "IDE/ide_base.h"
#include "type.h"

#define FAT_BUFFER_SIZE 1048576   //1M
#define FAT_GROUP_NUM_M 3 //2^3=8
#define FAT_GROUP_SIZE_M 17 //2^17= 128K
#define FAT_GROUP_DWORD_SIZE_M FAT_GROUP_SIZE_M-2
#define FAT_GROUP_SECTOR_NUM (1<<(FAT_GROUP_DWORD_SIZE_M-7))
#define FAT_GROUP_NUM (1<<FAT_GROUP_NUM_M)
#define FAT_GROUP_SIZE (1<<FAT_GROUP_SIZE_M) 

#pragma align 4
section("sdram0")  BYTE fat_chain[FAT_GROUP_NUM][FAT_GROUP_SIZE];

BYTE fat_group_index[FAT_GROUP_NUM]={ 0, 0, 0, 0, 0, 0, 0, 0};
BYTE next_fat_group=1;

FS_t *current_fs;
extern unsigned int cycles[100];

/******************************************************************
* Function     : fnFAT32_LBAofCluster
* Description : get cluster number and LBA of start sector in the cluster
* Input     : DWORD Cluster_Number-cluster number
* Output   : DWORD LBA of start sector in the cluster
*******************************************************************/

DWORD fnFAT32_LBAofCluster(DWORD Cluster_Number)
{
 return ((current_fs->cluster_begin_lba + ((Cluster_Number-2)*current_fs->bpb.sector_per_cluster)));
}

/******************************************************************
* Function     : fnFATChainInit
* Description : cluster chain initialization-read fist 128K FAT data to FAT buffer in SDRAM
* Input     : none
* Output   : none
*******************************************************************/

void fnFATChainInit()
{
	BYTE i,j;
	BUFFER *fat_sector;
	
	fat_sector = (BUFFER *)(fat_chain[0]);
	// Read the first 256 sectors to SDRAM
	fnIDE_BufferSector(fat_sector,partition_table[0]->fs->fat_begin_lba,FAT_GROUP_SECTOR_NUM);
}

/******************************************************************
* Function     : fnFAT32_init
* Description : FAT32 partition initialization-get FAT32 partition information
* Input     : 
*              FS_t *fs - pointer to structure which store FAT partition information
*              DWORD offest_sector - starting sector of FAT partition table
* Output   : none
*******************************************************************/
void fnFAT32_init(FS_t *fs,DWORD offset_sector)
{
	 
	 fnIDE_BufferSector(&buffers,offset_sector,1);		// read DBR

	 // Load Parameters of FAT32
	 fs->bpb.byte_per_sector =	fnIDE_SectorWord(BYTE_PER_SECTOR);    
	 fs->bpb.sector_per_cluster = 	fnIDE_SectorByte(SECTOR_PER_CLUSTER); 
	 fs->bpb.reserve_sector =	fnIDE_SectorWord(RESERVE_SECTOR);     
	 fs->bpb.FATnum =		fnIDE_SectorByte(FAT_NUM);             
	 fs->bpb.root_entrice = 		fnIDE_SectorWord(ROOT_ENTRICE);                
	 fs->bpb.media_descriptor =	fnIDE_SectorByte(MEDIA_DESCRIPTOR);   
	 fs->bpb.sector_per_track =      fnIDE_SectorWord(SECTOR_PER_TRACK);
	 fs->bpb.head_num=               fnIDE_SectorWord(HEAD_NUM);
	 fs->bpb.hide_sector=            fnIDE_SectorDWORD(HIDE_SECTOR);
	 fs->bpb.sector_num=             fnIDE_SectorDWORD(LARGE_SECTOR);
	 fs->bpb.sector_per_FAT=     	fnIDE_SectorDWORD(SECTOR_PER_FAT_4);
	 fs->bpb.flag=                   fnIDE_SectorWord(EXT_FLAG);
	 fs->bpb.root_cluster=           fnIDE_SectorDWORD(ROOT_CLUSTER);
	 fs->bpb.FSinfo_sector=		fnIDE_SectorDWORD(FSINFO_SECTOR);
	 fs->bpb.backup_sector=		fnIDE_SectorWord(BACKUP_SECTOR);                             
	
	 fs->byte_per_cluster= fs->bpb.byte_per_sector*fs->bpb.sector_per_cluster;
	 fs->fat_begin_lba = offset_sector + fs->bpb.reserve_sector;	
	 
	 fs->cluster_begin_lba = fs->fat_begin_lba + (fs->bpb.FATnum * fs->bpb.sector_per_FAT);

	 fs->fs_type= FS_TYPE_FAT32;
	 fs->total_cluster=fs->bpb.sector_num/fs->bpb.sector_per_cluster;
	 
	 fnFATChainInit();

	 if (fnIDE_SectorWord(0x1FE)!=0xAA55) 				//check ending - 0xAA55 in DBR 
	 {
	  	 printf("\r\nError: Incorrect Volume Signature");
		 while(1);
	 } 
}

/******************************************************************
* Function     : fnFAT32_FindNextCluster
* Description : find next cluster (according to current cluster in cluster chain). Finding steps:
*                    1, find next cluster in FAT buffer in SDRAM (128K)
*                    2, read another 128K FAT data from HD and write to FAT buffer to SDRAM if find nothing in step1
*                    3, repeat step 1 
* Input     : 
*              DWORD current_cluster -  current cluster number
* Output   : next cluster number
*******************************************************************/

DWORD fnFAT32_FindNextCluster(DWORD current_cluster)
{
	BYTE i;
	DWORD FAT_group_offset, UI32position;
	DWORD nextcluster;
	DWORD *cluster_buffer;
	DWORD sector_offset;

	if(current_cluster>current_fs->total_cluster)
		return 0xFFFFFFFF;

	// find image of current cluster in FAT table
	FAT_group_offset = current_cluster>>FAT_GROUP_DWORD_SIZE_M;
	UI32position = (current_cluster - (FAT_group_offset <<FAT_GROUP_DWORD_SIZE_M)) ; 

	//step 1 - begin searching next cluster in SDRAM
	for(i=0;i<FAT_GROUP_NUM;i++)
	{
		if(FAT_group_offset==fat_group_index[i])
		{
			cluster_buffer=(DWORD *)(fat_chain[i]);
			nextcluster = cluster_buffer[UI32position];
			if((nextcluster&0x0FFFFFFF)==0x0FFFFFFF)
			{
				return 0xFFFFFFFF;
			}
			else
			{
				return nextcluster;
			}
		}
	}

	//step 2 - read 128kB FAT table data(including current cluster) from HD and write to SDRAM
	sector_offset = (FAT_group_offset<<FAT_GROUP_SIZE_M)/current_fs->bpb.byte_per_sector;
	cluster_buffer = (DWORD*)(fat_chain[next_fat_group]);
	fnIDE_BufferSector(cluster_buffer,current_fs->fat_begin_lba+sector_offset,FAT_GROUP_SECTOR_NUM);
	fat_group_index[next_fat_group]=FAT_group_offset;
	next_fat_group= next_fat_group +1 ;
	if(next_fat_group==FAT_GROUP_NUM)
	{
		next_fat_group=1;
	}
	nextcluster = cluster_buffer[UI32position];
	if((nextcluster&0x0FFFFFFF)==0x0FFFFFFF)
	{
		return 0xFFFFFFFF;
	}
	else
	{
		return nextcluster;
	}
}

/******************************************************************
* Function     : fnFAT32_SectorReader
* Description : read target sector( according to offset of target sector in cluster)
*                  case 1 (normally)-target sector is in current cluster
*                  case 2 - target sector is not in current cluster,  find next cluster (according to offset)
* Input     : 
*             currentcluster_t cluster - current cluster number ( do not contain the sector in case 2)
*             DWORD offset - offset of target sector in the cluster
* Output   : cluster - current cluster number
*******************************************************************/			
currentcluster_t fnFAT32_SectorReader(currentcluster_t cluster, DWORD offset)
{
 	  DWORD SectortoRead = 0;
	  DWORD ClustertoRead = 0;
	  DWORD ClusterChain = 0;
	  WORD sector_per_cluster=current_fs->bpb.sector_per_cluster;
	  int i;
	  
	  if(cluster.value==0xFFFFFFFF)
	  	return cluster;
	  
	  ClusterChain = cluster.value;

	  ClustertoRead = offset / sector_per_cluster;	  
	  SectortoRead = offset - (ClustertoRead*sector_per_cluster);
	  
	  // cast 2 -call finFAT32_FindNextCluster() to find cluster that contain target sector
	  for (i=cluster.offset; i<ClustertoRead; i++)
	  {
	  	  ClusterChain = fnFAT32_FindNextCluster(ClusterChain);  
	  }

	  //register current cluster
	  cluster.value=ClusterChain;
	  cluster.offset=ClustertoRead;	
	  if (ClusterChain==0xFFFFFFFF)  
	  	  	return cluster;

	  //read target sector
	  fnIDE_BufferSector(&buffers,fnFAT32_LBAofCluster(ClusterChain)+SectortoRead,1);

	  return cluster;
}

/******************************************************************
* Function     : fnFAT32_WriteSector
* Description : write target sector( according to offset of target sector in cluster)
*                  case 1 (normally)-target sector is in current cluster
*                  case 2 - target sector is not in current cluster,  find next cluster (according to offset)
* Input     : 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区在线视频| 日韩综合在线视频| 欧美日韩一区视频| 国内精品国产三级国产a久久| 亚洲国产精品传媒在线观看| 欧美日韩亚州综合| 欧美丰满一区二区免费视频| 国产精品99久久久久久有的能看| 亚洲欧美激情一区二区| 26uuu亚洲综合色| 欧美日韩一级视频| 99热精品国产| 国产suv精品一区二区6| 免费看欧美美女黄的网站| 中文字幕综合网| 久久九九久久九九| 555www色欧美视频| 色成年激情久久综合| 国产91精品免费| 精品亚洲国内自在自线福利| 亚洲高清免费视频| 一片黄亚洲嫩模| 亚洲天堂av老司机| 欧美国产精品v| 精品久久久久99| 欧美一区二区不卡视频| 欧洲在线/亚洲| 99国产精品一区| 99视频精品在线| 国产福利一区在线| 国产一区二区三区四区五区入口| 亚洲成人自拍一区| 亚洲成av人在线观看| 亚洲乱码国产乱码精品精的特点| 国产精品天天摸av网| 久久久久九九视频| 久久无码av三级| 日韩欧美一级片| 日韩写真欧美这视频| 欧美肥妇bbw| 欧美日韩黄视频| 69精品人人人人| 日韩一区二区三区av| 欧美一级艳片视频免费观看| 91精品欧美福利在线观看| 欧美人伦禁忌dvd放荡欲情| 国产欧美日韩亚州综合| 精品美女在线观看| 久久夜色精品一区| 中文成人av在线| 亚洲美女屁股眼交| 亚洲成人1区2区| 日本大胆欧美人术艺术动态| 日韩激情在线观看| 久久99最新地址| 成人性视频免费网站| 99久免费精品视频在线观看| 91社区在线播放| 欧美精品一级二级三级| 精品日韩在线观看| 久久久综合九色合综国产精品| 国产女人aaa级久久久级 | 久久综合狠狠综合久久综合88 | 国产亚洲一本大道中文在线| 久久久精品影视| 亚洲乱码国产乱码精品精小说| 亚洲午夜日本在线观看| 麻豆精品久久精品色综合| 国产一区二区美女诱惑| av中文字幕亚洲| 欧美剧在线免费观看网站| 欧美精品一区二区三区蜜桃| 国产精品国产三级国产普通话蜜臀| 亚洲精品美腿丝袜| 蜜臀av一区二区在线观看| 国产精品亚洲人在线观看| 92国产精品观看| 日韩一区二区麻豆国产| 亚洲欧洲av色图| 午夜精品视频一区| 国产一区 二区| 99v久久综合狠狠综合久久| 日本精品裸体写真集在线观看| 欧美在线综合视频| 91免费国产视频网站| 日韩一级完整毛片| 国产女人18水真多18精品一级做| 中文幕一区二区三区久久蜜桃| 亚洲三级电影网站| 日本欧美一区二区在线观看| 国产成人a级片| 在线一区二区观看| 欧美一三区三区四区免费在线看| 久久毛片高清国产| 亚洲精品久久嫩草网站秘色| 香蕉影视欧美成人| 国产99久久久久久免费看农村| 在线中文字幕一区二区| 欧美va亚洲va在线观看蝴蝶网| 久久在线观看免费| 午夜不卡在线视频| 成人午夜激情片| 欧美日韩国产美| 国产精品视频第一区| 亚洲超碰精品一区二区| 国产成人h网站| 欧美性色aⅴ视频一区日韩精品| 国产日韩欧美精品电影三级在线| 亚洲午夜电影网| 丁香婷婷综合激情五月色| 欧美日韩一区二区在线观看| 国产欧美日韩综合| a级精品国产片在线观看| 欧美色图激情小说| 亚洲日本va午夜在线影院| 狠狠色丁香久久婷婷综合_中| 色欧美片视频在线观看| 久久五月婷婷丁香社区| 亚洲h精品动漫在线观看| 不卡的电视剧免费网站有什么| 日韩精品一区二区三区中文精品| 亚洲精品免费一二三区| 风间由美一区二区av101| 欧美一级久久久久久久大片| 亚洲欧洲精品天堂一级| 国产综合一区二区| 日韩欧美在线网站| 日韩不卡一二三区| 欧美日韩在线播放一区| 亚洲老司机在线| 不卡的av电影在线观看| 久久精品一区二区三区不卡| 男人的天堂亚洲一区| 91精品视频网| 亚洲v精品v日韩v欧美v专区| 色婷婷精品大在线视频| 国产精品久久久久永久免费观看| 九色综合狠狠综合久久| 制服丝袜国产精品| 一个色在线综合| 欧美在线观看视频一区二区三区| 国产精品国产三级国产aⅴ中文| 国产大陆a不卡| 久久一二三国产| 国产精品一线二线三线| 欧美日韩日日骚| 免费观看30秒视频久久| 5566中文字幕一区二区电影| 亚洲一区二区在线免费观看视频| 一本大道久久a久久综合| 日韩美女久久久| 色香蕉久久蜜桃| 亚洲欧美日韩一区二区| 欧美性猛交xxxx乱大交退制版| 亚洲精品视频一区| 色哟哟亚洲精品| 亚洲激情五月婷婷| 欧美色图12p| 亚洲成人免费在线| 精品少妇一区二区三区免费观看 | 欧美日韩国产经典色站一区二区三区| 亚洲丝袜另类动漫二区| 色偷偷一区二区三区| 一区二区三区在线免费观看| 欧美怡红院视频| 亚洲一区二区三区自拍| 欧美变态tickle挠乳网站| 国内精品久久久久影院一蜜桃| 久久久久国产免费免费| 成人高清免费观看| 亚洲人xxxx| 日韩欧美成人一区| 国产69精品久久久久毛片| 国产精品久久久久桃色tv| 91在线观看成人| 婷婷综合另类小说色区| 91 com成人网| 本田岬高潮一区二区三区| 一区二区三区欧美久久| 欧美精品aⅴ在线视频| 国产在线国偷精品免费看| 中文字幕成人网| 在线电影一区二区三区| 国产激情偷乱视频一区二区三区| 国产精品色哟哟| 欧美日免费三级在线| 精油按摩中文字幕久久| 久久久精品人体av艺术| 欧美日韩高清一区二区三区| 在线观看免费成人| 蜜臀av性久久久久蜜臀aⅴ| 国产欧美精品一区aⅴ影院 | 午夜精品视频一区| 国产精品二三区| 欧美一区二区精品久久911| 成人久久视频在线观看| 性做久久久久久| 中文字幕一区在线观看视频| 精品久久久久99| 欧美日韩亚洲综合在线 欧美亚洲特黄一级|