📄 writeflash.c
字号:
// #define _debug
#ifdef _debug
#define FBUS 10 //总线速度4M
#else
#define FBUS 32 //总线速度32M
#endif
#define ERARNGE() {__asm jsr $FE13;} //跳到0x2806执行//gw32 0xFe13
#define PGRRNGE() {__asm jsr $FE10;} //跳到0x2809执行 gw32 0xFE10
#define LDRNGE() {__asm jsr $FA31;} //跳到0x2809执行 gw32 0xFA31
//RAM buffer define areac
const word Ram_Blcok = (word)Ram_Key;
#define Bus_Speed Ram_Key[0]
#define RamDataSize Ram_Key[1]
#define ADD_RH Ram_Key[2]
#define ADD_RL Ram_Key[3]
void ErasePage(byte const *Address,byte *ebuffer) //FLASH擦除函数
{
word eaddress;
byte highaddr;
ebuffer[0] = FBUS;
eaddress =(word)Address;
highaddr = eaddress>>8;
ebuffer[2] =highaddr;
ebuffer[3] =(byte) eaddress;
//FLCR = 0x0a; //control erase.open
__asm ldhx ebuffer; //将要擦除的地址装入H,X寄存器
ERARNGE(); //调用擦除函数
// FLCR = 0x00; //control erase.close
}
//---------------------------------------------------------------------
void WriteFlash(byte const *address,byte number,byte *inbuffer,byte writeflag) //FLASH编程函数
{
word romaddress;
BYTE bhigh;
DisableInterrupts;
FLBPR = 0x8C;
//-----------------------
if(writeflag==NORMAL_WRITE)
{
ErasePage(address,inbuffer);//first errase flash
}
delayms(1);
romaddress = (word)address;
//wrietflag:
//----------------------------
inbuffer[1] = number;
inbuffer[0] = FBUS;
bhigh = romaddress>>8;
inbuffer[2] = bhigh;
inbuffer[3] = (byte)romaddress;
//FLCR = 0x09; //control erase.open
__asm ldhx inbuffer; //将要编程的地址装入H,X寄存器
PGRRNGE(); //调用编程函数
//FLCR = 0x00;
FLBPR = 0x00;
EnableInterrupts;
}
//load rom data to outbuffer
void ReadFlash(byte const *address,byte length,byte *outbuffer)
{
word romaddress;
byte bhigh;
outbuffer[0] = FBUS;
outbuffer[1] = length;
romaddress = (word)address;
bhigh = romaddress>>8;
outbuffer[2] = bhigh;
outbuffer[3] = (byte)romaddress;
// __asm ldhx Ram_Blcok; //将要编程的地址装入H,X寄存器
__asm ldhx outbuffer;
LDRNGE(); //调用编程函
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -