www.pudn.com > flashburn.rar > flashburn.c


#include "flashburn.h" 
#include "stdio.h" 
typedef unsigned char BYTE; 
void ResetFlash() //FLASH复位子程序 
{BYTE *pa; 
pa=(BYTE *)0x8000; 
*pa=0x0F0; 
} 
void EraseFlash() //FLASH片擦除子程序 
{ 
BYTE *pa; 
pa=(BYTE *)0x8555; 
*pa=0x0AA; 
pa=(BYTE *)0x82AA; 
*pa=0x055; 
pa=(BYTE *)0x8555; 
*pa=0x080; 
pa=(BYTE *)0x8555; 
*pa=0x0AA; 
pa=(BYTE *)0x82AA; 
*pa=0x055; 
pa=(BYTE *)0x8555; 
*pa=0x010; 
delay_10s(); //延时10s 
} 
void WriteFlash(BYTE *pa,int pd)//写FLASH某个单元的子程序 
{ 
BYTE *tmp; 
tmp=(BYTE *) 0x8555; 
*tmp=0x0AA; 
tmp=(BYTE *)0x82AA; 
*tmp=0x055; 
tmp=(BYTE *)0x8555; 
*tmp=0x0A0; 
*pa=pd; 
delay_200ms(); //延时200ms 
} 
//延时子程序可用简单的加法计数实现,例如延时10s的子程序示例如下: 
delay_10s() 
{ 
int i; 
int j; 
for(i=0;i<0x100;i++) 
{ 
for(j=0;j<0x01000;j++); 
} 
} 
 
void main() 
{ 
BYTE *FlashPtr; //指向FLASH的指针 
int FlashData; //写往FLASH的数据 
int i; 
BYTE *OriMem; //代码在片内RAM的源地址 
int iDatalen; //代码段长度 
ResetFlash(); //复位FLASH 
EesetFlash(); //整片擦除FLASH 
//开始烧写FLASH,下面为Boot表引导信息 
FlashPtr=(BYTE *)0x8000; 
FlashData=0x10AA; //置16位存储器格式 
WriteFlash(FlashPtr++,FlashData); 
FlashData=0x7FFF; //置SWWSR初始化值 
WriteFlash(FlashPtr++,FlashData); 
FlashData=0x0F800; //置BSCR初始化值 
WriteFlash(FlashPtr++,FlashData); 
FlashData=0x0000; //程序执行入口偏移地址XPC 
WriteFlash(FlashPtr++,FlashData); 
FlashData=0x1000; //程序执行入口地址PC 
WriteFlash(FlashPtr++,FlashData); 
FlashData=0x002e; //第一个程序段的长度 
WriteFlash(FlashPtr++,FlashData); 
FlashData=0x0000; //第一个程序要装入的内部RAM区偏移地址 
WriteFlash(FlashPtr++,FlashData); 
FlashData=0x1000; //第一个程序段要装入的内部RAM区地址 
WriteFlash(FlashPtr++,FlashData); //开始烧写第一段程序 
OriMem=(BYTE *)0x1000; //第一段程序首地址 
iDatalen=0x002e; //第一段程序长度 
for(i=0;i