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