flash.c

来自「使用程序烧写FLASH。平台是44B0。开发环境是:ads102」· C语言 代码 · 共 121 行

C
121
字号
#include "flash.h"

void DelayTime( int time)
{
	int i, j;
	if(time > 0)
		for(i = 0; i < time; i ++)
			for(j = 0; j < 65535; j ++) ;
}

void SST39VF160_ChipErase(void)
{
	Writeflash(FADDR1, DATA1);
	Writeflash(FADDR2, DATA3);
	Writeflash(FADDR1, DATA2);
	Writeflash(FADDR1, DATA1);
	Writeflash(FADDR2, DATA3);
	Writeflash(FADDR1, PIECEERASE);
	Waitfor_endofprg();
}

void SST39VF160_SectorErase(unsigned long SAaddr)
{
	Writeflash(FADDR1, DATA1);
	Writeflash(FADDR2, DATA3);
	Writeflash(FADDR1, DATA2);
	Writeflash(FADDR1, DATA1);
	Writeflash(FADDR2, DATA3);
	Writeflash(SAaddr, SECTORERASE);
	Waitfor_endofprg();
}

void SST39VF160_BlockErase(unsigned long BAaddr)
{
	Writeflash(FADDR1, DATA1);
	Writeflash(FADDR2, DATA3);
	Writeflash(FADDR1, DATA2);
	Writeflash(FADDR1, DATA1);
	Writeflash(FADDR2, DATA3);
	Writeflash(BAaddr, BLOCKERASE);
	Waitfor_endofprg();
}

int SST39VF160_WordProg(unsigned long addr,unsigned int dat)
{
	Writeflash(FADDR1, DATA1);
	Writeflash(FADDR2, DATA3);
	Writeflash(FADDR1, WORDPROGDATA);
	Writeflash(addr,dat);
	Waitfor_endofprg();
	return 1;
}

void Waitfor_endofprg(void)
{
	volatile unsigned int old_Status,now_Status;
	old_Status = *((volatile unsigned int *)0x00);
	while(1)
	{
		now_Status = *((volatile unsigned int *)0x00);
		if((old_Status&0x40) == (now_Status&0x40))
			break;
		else
			old_Status = now_Status;
	}	
}

void SST39VF160_ChipProg(unsigned long DataAddr,unsigned long RomAddr)
{
	int i;

	SST39VF160_ChipErase();
	DelayTime(10);

	for(i = 0; i < (ROMSIZE/2); i ++)
	{
		SST39VF160_WordProg( RomAddr, *((U16 *)DataAddr));
		RomAddr ++;
		DataAddr += 2;
	}
}

void SST39VF160_BlockProg(unsigned long BlockTh,unsigned long DataAddr)
{
	int i;
	unsigned long startaddr;

	if(BlockTh < MAX_NUM_BLOCK)
	{
		startaddr = ROMADDRESS + BlockTh * BLOCKSIZE;
		SST39VF160_BlockErase(startaddr);
		for(i = 0; i < BLOCKSIZE; i ++ ){
			SST39VF160_WordProg( startaddr, *((U16 *)DataAddr));
			startaddr ++;
			DataAddr += 2;
		}
	}
}

void SST39VF160_SectroProg(unsigned long SectorTh,unsigned long DataAddr)
{
	int i;
	unsigned long startaddr;

	if(MAX_NUM_SECTOR > SectorTh){
		startaddr = ROMADDRESS + SectorTh * SECTORSIZE;
		SST39VF160_SectorErase(startaddr);
		for( i = 0; i < SECTORSIZE; i ++ ){
			SST39VF160_WordProg(startaddr, *((U16 *)DataAddr));
			startaddr ++;
			DataAddr += 2;
		}
	}
}

void SST39VF160_WordFromUart(void)
{
	/*unsigned char *pString;

	pString = Uart_GetString*/
}

⌨️ 快捷键说明

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