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

📄 flash.c

📁 使用程序烧写FLASH。平台是44B0。开发环境是:ads102
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -