烧写hex文件到flash问题
时间:10-02
整理:3721RD
点击:
各位大侠,我仿照别人的烧写程序改写了一个自己的hex文件烧写程序,DSP是DSP6713,Flash是AM29LV160D,程序是从hex文件中每次读取10行,对这10行进行处理主要是去掉空格和换行符等,然后将其烧写进FLASH,之后再读取10行,循环进行直到读完整个hex文件。现在的问题是:我的进行完第一次10行的读取烧写后,到第二次就会挂死在那里,始终没找到原因,希望大家帮忙看看这是怎么回事?
下面是程序代码:
——————————————————————————————————————————
#include "Sun6713_config.h"
#include
#include
#define Sourceaddr 0x90000000
Uint8 Tempdata[720];
Uint8 Tempdata2[740];
Uint16 Tempdata1;
unsigned short Data_to_write[120];
unsigned char Data_from_flash[1024];
char filename[128];
long codelength;
long datalength;
long lengthtemp;
unsigned int processaddr=Sourceaddr;
unsigned int counter=0;
/********************************************************************************/
volatile Uint16* FLASH_ADR1 = (volatile Uint16 *)(0x90000000+(0x555 740)
{
datalength = 740;
codelength -= 740;
lengthtemp = 740;
}
else
{
datalength = codelength;
lengthtemp = codelength;
Conditionback = 0;
}
fread(Tempdata2,sizeof(unsigned char),datalength,stream);
/************************/
/************************/
if(datalength<740)
{
for(i=datalength;i<740;i++)
{
Tempdata2='F';
}
}
/************************/
/************************/
for(k=0;k<10;k++)
{
for(i=0;i<72;i++)
{
Tempdata[72*k+i]=Tempdata2[74*k+i];
}
}
/************************/
/************************/
for(i=0;i<720;i++)
{
switch(Tempdata)
{
case'0':Tempdata=0x00;break;
case'1':Tempdata=0x01;break;
case'2':Tempdata=0x02;break;
case'3':Tempdata=0x03;break;
case'4':Tempdata=0x04;break;
case'5':Tempdata=0x05;break;
case'6':Tempdata=0x06;break;
case'7':Tempdata=0x07;break;
case'8':Tempdata=0x08;break;
case'9':Tempdata=0x09;break;
case'A':Tempdata=0x0A;break;
case'B':Tempdata=0x0B;break;
case'C':Tempdata=0x0C;break;
case'D':Tempdata=0x0D;break;
case'E':Tempdata=0x0E;break;
case'F':Tempdata=0x0F;break;
default:break;
}
}
for(i=0;i<120;i++)
{
Data_to_write=(Tempdata[i*6]<<12)|(Tempdata[i*6+1]<<8)|(Tempdata[i*6+3]<<4)|Tempdata[i*6+4];
}
Write_Flash(Data_to_write,(Uint16 *)processaddr);
processaddr += 120;
printf("%s,%d\n","Writing FLASH is in progress",counter++);
}
fclose(stream);
*(unsigned char *)Sourceaddr = 0xF0;
puts(" End of writting the Flash\n");
puts(" Now Please reset your system\n");
}
else
puts("the file is empty\n");
}
/*******************************************************/