flash_m.c

来自「基于凌阳GPCE061」· C语言 代码 · 共 89 行

C
89
字号
extern unsigned int R_TESTBuffer;
extern unsigned int SP_Flash_ReadType();
extern unsigned int SP_Flash_ReadStatus();
extern void  SP_ClearWatchDog();
extern void  SP_Flash_Initial();
extern void  SP_Flash_ReadBuffer(unsigned long,unsigned int*,unsigned int);
extern void  SP_Flash_WritePage(unsigned long,unsigned int*);
extern void  SP_Flash_EraseBlock(unsigned long);
unsigned int SP_Flash_Format(unsigned long R_Address,unsigned int R_StartBlock,unsigned int* R_Point,unsigned int R_Count);
void SP_Test_Flash()
{
	unsigned int i,j;
	unsigned int* R_Point;
	unsigned long R_Address;
	SP_Flash_ReadBuffer(0,&i,1);
	if(i==0x2367)
		return;
	SP_Flash_EraseBlock(0);
	j=0;
	while(j!=0x6000)
	{
		j=SP_Flash_ReadStatus();
		j&=0x6000;
	}
	R_Point=&R_TESTBuffer;
	*R_Point=0x2367;
	R_Point++;
	i=SP_Flash_Format(0x20000,1,R_Point,1023);
	R_Point=&R_TESTBuffer;
	SP_Flash_WritePage(0,R_Point);
	j=0;
	while(j!=0x6000)
	{
		j=SP_Flash_ReadStatus();
		j&=0x6000;
	}	

	R_Point=&R_TESTBuffer;
	for(j=0;j<1024;j++)
	{
		*R_Point=0;
		R_Point++;
	}
	R_Point=&R_TESTBuffer;
	R_Address=(unsigned long) i;
	R_Address*=0x20000;
	j=2048-i;
	i=SP_Flash_Format(R_Address,i,R_Point,j);
	SP_Flash_WritePage(0x0800,R_Point);
	j=0;
	while(j!=0x6000)
	{
		j=SP_Flash_ReadStatus();
		j&=0x6000;
	}
}
unsigned int SP_Flash_Format(unsigned long R_Address,unsigned int R_StartBlock,unsigned int* R_Point,unsigned int R_Count)	
{
	unsigned int i,j,k;
	j=R_StartBlock;
	k=0;
	while(1)
	{
		SP_ClearWatchDog();
		SP_Flash_EraseBlock(R_Address);
		i=0x0000;
		while(i!=0x6000)
		{
			i=SP_Flash_ReadStatus();
			i&=0x6000;
		}
		i=SP_Flash_ReadStatus();
		i&=0x0100;
		if(i==0)
		{
			*R_Point=j;
			R_Point++;
			k++;
		}
		j++;
		R_Address+=0x00020000;
		if(k>=R_Count)
			break;
		if(j>=2048)
			break;
	}
	return j;
}

⌨️ 快捷键说明

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