📄 flash main.c
字号:
#include <stdio.h>
#include <file.h>
#include <std.h>
#include <math.h>
#define OFFSET 0x4000
#define CLKMD *(int *)0x58
#define SSWSR *(int *)0x28
void FlashWrite(unsigned address,unsigned data);
unsigned FlashRead(unsigned address);
void delay(unsigned x,unsigned y);
void main()
{
int fileNo,filecur;
unsigned myaddress,mydata,checkdata;
unsigned temp,len,i,ii;
char mychar[5];
//禁止所有可屏蔽中断
asm(" RSBX INTM");
SSWSR=SSWSR & 0xFE7F;
//设定PLL
CLKMD=0x0;
ii=CLKMD & 0x0001;
while(ii)
{
ii=CLKMD & 0x0001;
}
CLKMD=0x9007;
delay(1,256); //等待PLL锁定
FlashWrite((0x555+OFFSET),0x00AA);//1st cycle
FlashWrite((0x2AA+OFFSET),0x0055);//2 nd cycle
FlashWrite((0x555+OFFSET),0x00A0);//Program command
fileNo=open("e:\\dsp\\MFC_32A.hex",0x8000,0);
if(fileNo<0)
{
printf("File Open Err! The No. Is %d\n",fileNo);
}
else
{
printf("File Opened! Is Burning...\n");
lseek(fileNo,0,0);
do
{
asm(" RSBX XF");
filecur=read(fileNo,mychar,3);
temp=(mychar[1]<60 ? ((unsigned)mychar[1]-48):((unsigned)mychar[1]-55));
len=temp<<4;
temp=(mychar[2]<60 ? ((unsigned)mychar[2]-48):((unsigned)mychar[2]-55));
len=len+temp;
len=len>>1;
filecur=read(fileNo,mychar,4);
temp=(mychar[0]<60 ? ((unsigned)mychar[0]-48):((unsigned)mychar[0]-55));
myaddress=temp<<12;
temp=(mychar[1]<60 ? ((unsigned)mychar[1]-48):((unsigned)mychar[1]-55));
myaddress=myaddress+(temp<<8);
temp=(mychar[2]<60 ? ((unsigned)mychar[2]-48):((unsigned)mychar[2]-55));
myaddress=myaddress+(temp<<4);
temp=(mychar[3]<60 ? ((unsigned)mychar[3]-48):((unsigned)mychar[3]-55));
myaddress=myaddress+temp;
filecur=read(fileNo,mychar,2);
for(i=0;i<len;i++)
{ asm(" RSBX XF");
filecur=read(fileNo,mychar,4);
temp=(mychar[0]<60 ? ((unsigned)mychar[0]-48):((unsigned)mychar[0]-55));
mydata=temp<<12;
temp=(mychar[1]<60 ? ((unsigned)mychar[1]-48):((unsigned)mychar[1]-55));
mydata=mydata+(temp<<8);
temp=(mychar[2]<60 ? ((unsigned)mychar[2]-48):((unsigned)mychar[2]-55));
mydata=mydata+(temp<<4);
temp=(mychar[3]<60 ? ((unsigned)mychar[3]-48):((unsigned)mychar[3]-55));
mydata=mydata+temp;
FlashWrite(myaddress,mydata);//put mydata into myaddress
checkdata=FlashRead(myaddress);
if(checkdata!=mydata)
{
printf("Data Check Err!\n");
filecur=0;
break;
}
myaddress++;
}
len=0;
filecur=read(fileNo,mychar,4);
if(strcmp(mychar,"FF\r\n")==0)
{
filecur=0;
break;
}
}while(filecur>0);
if(filecur==0)
{
printf("File Burned!\n");
lseek(fileNo,3,0);
filecur=read(fileNo,mychar,4);
temp=(mychar[0]<60 ? ((unsigned)mychar[0]-48):((unsigned)mychar[0]-55));
myaddress=temp<<12;
temp=(mychar[1]<60 ? ((unsigned)mychar[1]-48):((unsigned)mychar[1]-55));
myaddress=myaddress+(temp<<8);
temp=(mychar[2]<60 ? ((unsigned)mychar[2]-48):((unsigned)mychar[2]-55));
myaddress=myaddress+(temp<<4);
temp=(mychar[3]<60 ? ((unsigned)mychar[3]-48):((unsigned)mychar[3]-55));
myaddress=myaddress+temp;
printf("Creating Boot Mark...\n");
FlashWrite(0xFFFF,myaddress);
checkdata=FlashRead(0xFFFF);
if(checkdata!=myaddress)
{
printf("Data Check Err!\n");
printf("Boot Mark Can't be Created!\n");
}
else
{
printf("Boot Mark Created! OK!\n");
}
}
else
{
printf("Source File Read Err!\n");
}
}
fileNo=close(fileNo);
if(fileNo==0)
{
printf("File Closed!\n");
}
else
{
printf("File Close Err! The No. Is %d\n",fileNo);
}
}
void FlashWrite(unsigned address,unsigned data)
{
unsigned *p;
p=(unsigned *)address;
*p=data;
}
unsigned FlashRead(unsigned address)
{
unsigned *p;
p=(unsigned *)address;
return *p;
}
void delay(unsigned x,unsigned y)
{
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -