⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nfapp.c

📁 该软件为在sunplus的61单片机上实现的mp3播放器.里面有完整的源代码.
💻 C
字号:
#include "NfApp.h"
#include "NFDrv.h"
static unsigned long int NF_RWaddr;
static unsigned int NF_RWcount;

#define NF_APP_DBUG	0x01
#define NF_ZONE_MAX	2
extern unsigned int g_RWBuf[]; 
#define BACK_BLOCK 			0x7ff
#define BACK_BLOCK_SECTOR	0xFFE0
/*
unsigned int Log2Phy[1000];
unsigned int redundant[16];
unsigned int Assigned[64];
//NF Define
unsigned int nfSector;
unsigned int nfPhyBlock;
unsigned int nfLogBlock;
#define NF_MAX_ZONE			2
#define NF_MAX_BLOCK 		1024
#define NF_MAX_LOG_BLOCK	1000
// NF_ZONE0=0xf300  NF_ZONE0=0xf700
void Make_LogTable(void)
{
	unsigned int phyBlock, logBlock, phyZone;	
	for(nfPhyBlock=0; nfPhyBlock<1024; nfPhyBlock++)
		Log2Phy[nfPhyBlock]=0xffff;
		
	for(phyBlock=0; phyBlock<64; phyBlock++)
		Assigned[phyBlock]=0x0000;
	
	for(nfPhyBlock=0; nfPhyBlock<1024; nfPhyBlock++)
	{
		NF_ReadOpenCarea(0x00, nfPhyBlock<<5 )
		NF_ReadRedtData();
		if(Check_DataBlank(redundant)) continue;
		if();
	}	
									
}// */
#define SUCCESS 0x0000
#define ERROR   0xffff
/***************************************************************************
	SmartMedia Redundant buffer data Controll Subroutine
***************************************************************************
unsigned int Check_DataBlank(unsigned char *redundant)
{
	char i;
	for(i=0; i<REDTSIZE; i++)
	if(*redundant++!=0xFF) return(ERROR);
	return(SUCCESS);
}	

void NF_ReadRedtData(void)
{
	unsigned int i;
	for(i=0; i<16; i++)
		redundant[i]=F_ReadNF();
}  // */
void NF_EraseAllBlock()
{
	unsigned int i;
	for(i=0; i<2048;i++)
	{
		NF_EraseBlock(i);			
	}	
}

void NF_EraseBackBlock()
{
	NF_EraseBlock(BACK_BLOCK);
}

void NF_BackBlockHead(unsigned long int cLBA)
{
	unsigned int i;
//	if( (cLBA & 0x1f) == 0 ) return;
	for(i = (cLBA & 0x1f); i != 0; i--)
		{
			//UartSendData(i);
			NF_PageRead(0x00, (cLBA & 0xffe0) + i, g_RWBuf);
			NF_PageProgram(0x00, BACK_BLOCK_SECTOR + i, g_RWBuf);
		} 
}

void NF_BackBlockTail(unsigned long int cLBA)
{
	unsigned int i;
	for(i=( cLBA & 0x1f ) + 1; i<0x20; i++)
		{
			//UartSendData(i);
			NF_PageRead(0x00, (cLBA & 0xffe0) + i, g_RWBuf);
			NF_PageProgram(0x00, BACK_BLOCK_SECTOR + i, g_RWBuf);		
		}	
}

void NF_ResumeBlock(unsigned long int cLBA)
{
	unsigned int i;
	NF_EraseBlock( cLBA>>5 );
	for(i=0; i<0x20; i++)
		{
			NF_PageRead(0x00, BACK_BLOCK_SECTOR + i, g_RWBuf);
			NF_PageProgram(0x00, (cLBA & 0xffe0) + i, g_RWBuf);				
		}
}

void NF_CopyBlockHeadAndTailToBackBlock(unsigned long int sectorAddr, unsigned int wLeng)
{
	unsigned int currentBlock, currentPage, i;
//Calculate Current Block
	currentBlock=(unsigned int)sectorAddr>>5;
	currentPage=sectorAddr % 0x20;
		
	NF_EraseBlock(BACK_BLOCK);
	for(i=0; i<0x20; i++)
		{
			if( (i < currentPage) || (i >= currentPage+wLeng) )
			{
		     NF_PageRead(0x0000, ((currentBlock<<5)&0xffffffe0)+i,g_RWBuf);
		     NF_PageProgram(0x0000,(BACK_BLOCK_SECTOR)+i,g_RWBuf);				
			}
		}		
}

void NF_ClearCurrentSector(unsigned long int sectorAddr)
{
unsigned int currentBlock, currentPage, i;
//Calculate Current Block
	currentBlock=(unsigned int)sectorAddr>>5;
	currentPage=sectorAddr % 0x20;
	
	NF_EraseBlock(BACK_BLOCK);
	
//Copy Current Block To Back Block	
	for(i=0; i<0x20; i++)
		{
		 NF_PageRead(0x0000, ((currentBlock<<5)&0xffffffe0)+i,g_RWBuf);
		 NF_PageProgram(0x0000,(BACK_BLOCK_SECTOR)+i,g_RWBuf);
		}
//Erase Current Block
	NF_EraseBlock(currentBlock);//currentBlock<<5);		

//Resume Current Block From Back Block
	for(i=0; i<0x20; i++)
		{
		 if(i != currentPage)
		 	{
		 	 NF_PageRead(0x0000,(BACK_BLOCK_SECTOR)+i,g_RWBuf);
		 	 //UartSendData(g_RWBuf[0]);
		 	 NF_PageProgram(0x0000, ((currentBlock<<5)&0xffffffe0)+i,g_RWBuf);		 
		 	}
		}			
}

void NF_WriteOpen()
{
}

void NF_ReadOpen(unsigned long int tAddr)
{
	NF_RWaddr=tAddr;
	NF_RWcount=0x00;
	NF_ReadOpenAarea(0x0000,tAddr);
}

void NF_ReadData(unsigned int *pData,unsigned int rLen)
{
	while(rLen--)
	{
	    if(0x200 == NF_RWcount++)
	    	{
	    		NF_RWcount=0x00;
	    		NF_ReadOpenAarea( 0x0000,++NF_RWaddr);
	    	}
		*pData++ = F_ReadNF();		
	}
}

unsigned int NF_ReadByte()
{
	if(0x200 == NF_RWcount++)
		{
	     NF_RWcount=0x00;
	     NF_ReadOpenAarea(0x0000,++NF_RWaddr);			
		}
	return(F_ReadNF());	
}

void NF_ReadClose()
{
	
}

void NF_WriteByte()
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -