📄 nfapp.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 + -