?? 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 + -