📄 programer.cpp
字号:
//Programer 类使用MonitorROM类和MCU通信;
//实现FLASH写入与擦除;
#include "stdafx.h"
#include "MonitorROM.h"
#include "Programer.h"
Programer::Programer(MonitorROM *lpROM)
{
rom = lpROM;
}
void Programer::SetMCU(int MCUType)//设置FLASH开始地址,大小;
{
switch(MCUType)
{
case MC908J3:
wFStartAddress = 0xEC00;
nFLASHSize = 4096;
break;
case MC908J1:
wFStartAddress = 0xF600;
nFLASHSize = 1536;
break;
}
}
int Programer::PageErase(WORD Address)//擦除一页FLASH;
{
WORD sp; //MCU SP指针;
DWORD event;
if(Address<wFStartAddress||Address>wFStartAddress+nFLASHSize)
return 1;//地址超出范围;
if(Address%64!=0)return 2;//地址不是边界地址;
if(!rom->Write(0x80,(BYTE)(Address>>8)))
return 3;//装载代码错误;
if(!rom->Write(0x81,(BYTE)(Address)))
return 3;//装载代码错误;
for(int i=0;i<sizeof(EraseCode);i++)
{
if(!rom->IWrite(EraseCode[i]))
return 3;//装载代码错误;
}
rom->ReadSP(&sp);
rom->Write(sp+1,0);
rom->Write(sp+4,0);
rom->Write(sp+5,0x82);
SetCommMask(rom->hCom,EV_BREAK);
rom->Run();
WaitCommEvent(rom->hCom,&event,NULL);
PurgeComm(rom->hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
if(event==EV_BREAK)return 0;//成功
else return 5;//错误
}
int Programer::PageProgram(WORD Address, BYTE *Data)//写入一页FLASH;
{
WORD sp; //MCU SP指针;
DWORD event;
if(Address%32!=0)return 2;//地址不是边界地址
if(!rom->Write(0x82,(BYTE)(Address>>8)))
return 3;//装载代码错误;
if(!rom->Write(0x83,(BYTE)(Address)))
return 3;//装载代码错误;
for(int i=0;i<32;i++)
{
if(!rom->IWrite(Data[i]))
return 4;//装载数据错误;
}
for(i=0;i<sizeof(ProgramCode);i++)
{
if(!rom->IWrite(ProgramCode[i]))
return 3;//装载代码错误;
}
rom->ReadSP(&sp);
rom->Write(sp+1,0);
rom->Write(sp+4,0);
rom->Write(sp+5,0xA4);
SetCommMask(rom->hCom,EV_BREAK);
rom->Run();
WaitCommEvent(rom->hCom,&event,NULL);
PurgeComm(rom->hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
if(event==EV_BREAK)return 0;//成功
else return 5;//错误
}
int Programer::MassErase( )//整FLASH擦除;
{
WORD sp; //MCU SP指针;
DWORD event;
if(!rom->Write(0x80,(BYTE)(wFStartAddress>>8)))
return 3;//装载代码错误;
if(!rom->Write(0x81,(BYTE)(wFStartAddress)))
return 3;//装载代码错误;
for(int i=0;i<sizeof(MassErsCode);i++)
{
if(!rom->IWrite(MassErsCode[i]))
return 3;//装载代码错误;
}
rom->ReadSP(&sp);
rom->Write(sp+1,0);
rom->Write(sp+4,0);
rom->Write(sp+5,0x82);
SetCommMask(rom->hCom,EV_BREAK);
rom->Run();
WaitCommEvent(rom->hCom,&event,NULL);
PurgeComm(rom->hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
if(event==EV_BREAK)return 0;//成功
else return 5;//错误
}
int Programer::ProgramFile(HFILE hFile)//写入一个可执行代码文件到FLASH
{
return 0;//成功
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -