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

📄 progflash.c

📁 dsp自编程源代码
💻 C
字号:
//ProgFlash.c
//可以用于烧写sst29le010 sst29le020
//烧写原理(按照以下顺序):
//(1)打开文件
//(2)将文件中的数据存入DSP的RAM,每一次只取一帧
//(3)烧写存储器的一帧,烧写完毕后再取一帧数据,直到文件读取完毕

#include "ProgFlash.h"

UINT* pFlashData;//存放数据的起始地点
BOOL m_bAlreadyOpen=0;//还没有打开
extern BYTE FlashBuffer1[BUFFERSIZE];//sst29lv010 sst29lv020每一帧的大小
extern UINT FLASH_START;
UINT BufferNum=0;//一帧数据的存储进度
long FileNum=0;//文件的提取进度
long FileSize=0;//文件长度
FILE *fp1;
extern void BurnOneFrame(void);

void LoadFile(void)
{
    FileSize=0;
	if ((fp1=fopen("f:\\tiaozhanbei\\CCSwork\\TEST_0\\Debug\\test0.bin","rb"))==NULL)//e:\\tiaozhanbei\\CCSwork\\TEST_0\\Debug\\test0.bin   e:\\CCSwork\\TEST_0\\Debug\\test0.bin
	{//D:\\DTS\\Debug\\xxx.bin//f:\\tiaozhanbei\\CCSwork\\TEST_0\\Debug\\test0.bin
		printf("can't open %s\n", "TEST0.bin");
	}
	else
	{
		m_bAlreadyOpen=1;//文件已经打开

		//下面用于计算文件的长度
		CountFileSize(fp1,&FileSize);
		FileSize=0x10000;//本次已经知道文件的长度
		FLASH_START=0x8000;
		FileNum=0x8000;	//文件的提取进度	
	} 	
}


void CountFileSize(FILE* fp,long* FileSize)
{	
/*	fgetc(fp);
	while(!feof(fp))//如果遇到文件结尾feof(fp)函数返回非0值
	{
		(*FileSize)++;
		fgetc(fp);
	}*/
	fseek(fp,0,2);//这种方式更快
	*FileSize = ftell(fp);	
}

//fseek(FILE *fp,long offset,int origin);
//文件开始位置	SEEK_SET	0
//当前位置		SEEK_CUR	1
//文件尾		SEEK_END	2

void LoadFlashBuffer(FILE* fp)
{
	
	for(BufferNum=0;BufferNum<BUFFERSIZE;BufferNum++)
	{
		FlashBuffer1[BufferNum]=fgetc(fp);
	}
	BurnOneFrame();
}

void BurnFlash(void)//烧写flash存储器
{
	int i;
	if(m_bAlreadyOpen==1)//如果文件已经打开	
	{
		for(i=0;i<BUFFERSIZE;i++)
			FlashBuffer1[i]=0;
		//for(i=0;i<FileNum;i++)
		//	FlashBuffer1[0]=fgetc(fp1);
		i=fseek(fp1,0x8000,0);
		while(FileSize>FileNum)//文件还没有取完
		{
			LoadFlashBuffer(fp1);
			FLASH_START+=0x80;
			FileNum+=BUFFERSIZE;	
		}
		fclose(fp1);
	}	
}

⌨️ 快捷键说明

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