📄 main.cpp
字号:
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
// 包含头文件
//---------------------------------------------------------------------------
#include <stdio.h> // 标准输入输出
#include "winio.h" // 直接IO
#include "hpildr.h"
#include "main.h"
#include <iostream> // 主函数
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
TFmMain *FmMain;
//---------------------------------------------------------------------------
// 构造函数
//---------------------------------------------------------------------------
__fastcall TFmMain::TFmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
// 处理窗口建立事件
//---------------------------------------------------------------------------
void __fastcall TFmMain::FormCreate(TObject *Sender)
{
HPIOpen(0x90000000);
}
//---------------------------------------------------------------------------
// 处理窗口撤销事件
//---------------------------------------------------------------------------
void __fastcall TFmMain::FormDestroy(TObject *Sender)
{
HPIClose();
}
//---------------------------------------------------------------------------
//Flash操作所用数据
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// 擦除整个FLASH用的数据
//---------------------------------------------------------------------------
static DWORD EAD[]=
{
0x00000555,0x000000AA,
0x000002AA,0x00000055,
0x00000555,0x00000080,
0x00000555,0x000000AA,
0x000002AA,0x00000055,
0x00000555,0x00000010
};
//---------------------------------------------------------------------------
// 擦除FLASH单个扇区用的数据
//---------------------------------------------------------------------------
static DWORD ESD[]=
{
0x00000555,0x000000AA,
0x000002AA,0x00000055,
0x00000555,0x00000080,
0x00000555,0x000000AA,
0x000002AA,0x00000055,
0x00000000,0x00000020
};
//---------------------------------------------------------------------------
// 向FLASH写一个字节
//---------------------------------------------------------------------------
static DWORD PBD[]=
{
0x00000555,0x000000AA,
0x000002AA,0x00000055,
0x00000555,0x000000A0
};
//---------------------------------------------------------------------------
// 向HPI写入4个字节(高字节在前)
//---------------------------------------------------------------------------
void TFmMain::Put4B(UINT val)
{
SetPortVal(EPD,val>>24,1); // 写HPIC_3
SetPortVal(EPD,val>>16,1); // 写HPIC_2
SetPortVal(EPD,val>> 8,1); // 写HPIC_1
SetPortVal(EPD,val ,1); // 写HPIC_0
}
//---------------------------------------------------------------------------
// 全部擦除FLASH
//---------------------------------------------------------------------------
void __fastcall TFmMain::Button1Click(TObject *Sender)
{
PnText->Caption="正在擦除...";
int i;
SetPortVal(CTL,0xE5,1); // 允许EPP读(IZ)
for(i=0;i<6;i++)
{
SetPortVal(EPA,0x00,1); // 写地址(计数器复位)
Put4B(0x00080008); // 写HPIC
Put4B(0x90000000+EAD[i*2]*4); // 写HPIA
Put4B(EAD[i*2+1]); // 写HPID
}
Fill();
SetPortVal(CTL,0xE4,1); // 允许EPP读(IZ)
PnText->Caption="擦除完成";
}
//---------------------------------------------------------------------------
// 显示FLASH内容
//---------------------------------------------------------------------------
void __fastcall TFmMain::Button4Click(TObject *Sender)
{
char buf[128];
DWORD addr;
strcpy(buf,EdAddr->Text.c_str());
sscanf(buf,"%x",&addr);
SGetBuff4B(addr+0x90000000,256,buff);
List(addr,buff,256);
}
//---------------------------------------------------------------------------
// 字节编程测试
//---------------------------------------------------------------------------
void __fastcall TFmMain::ByteProgrameClick(TObject *Sender)
{
int i;
for(i=0;i<256;i++){
FSendByte(i,i);
}
}
//---------------------------------------------------------------------------
// 擦除FLASH一个扇区
//---------------------------------------------------------------------------
void __fastcall TFmMain::SectorEraseClick(TObject *Sender)
{
PnText->Caption="正在擦除...";
int i;
SetPortVal(CTL,0xE5,1); // 允许EPP读(IZ)
for(i=0;i<5;i++)
{
SetPortVal(EPA,0x00,1); // 写地址(计数器复位) // 写HPIC
Put4B(0x00080008); // 写HPIA
Put4B(0x90000000+ESD[i*2]*4); // 写HPID
Put4B(ESD[i*2+1]);
}
SetPortVal(EPA,0x00,1); // 写地址(计数器复位) // 写HPIC
Put4B(0x00080008); // 写HPIA
Put4B(0x90000000); // 写HPID
Put4B(ESD[i*2+1]);
Fill();
SetPortVal(CTL,0xE4,1); // 允许EPP读(IZ)
PnText->Caption="擦除完成";
}
//---------------------------------------------------------------------------
// 将BIN文件写入FLASH
//---------------------------------------------------------------------------
void __fastcall TFmMain::BtProgClick(TObject *Sender)
{
char buf[128];
int hFile;
DWORD i;
DWORD flen;
DWORD len,addr;
BOOL symbol=false;
PnText->Caption="擦除完成";
strcpy(buf,EdAddr->Text.c_str());
sscanf(buf,"%x",&addr);
strcpy(buf,EdLen->Text.c_str());
sscanf(buf,"%x",&len);
if(OD->Execute()){
PnText->Caption="";
CG->Progress=0;
hFile=FileOpen(OD->FileName,fmOpenRead);
flen=FileSeek(hFile,0,2);
FileSeek(hFile,0,0);
FileRead(hFile,buff,flen);
FileClose(hFile);
len=(flen<len)?flen:len;
while(!symbol){
PnText->Caption="擦除完成";
for(i=0;i<len;i++){
FSendByte(addr+i,buff[i]);
CG->Progress=i*100/len;
}
SGetBuff4B(0x90000000,len,wdata);
for(i=0;i<len;i++)
if(buff[i]==wdata[i*4]){
symbol=true;
}
else
symbol=false;
break;
}
FillFiFo();
wsprintf(buf,"写入%d字节,编程结束.",len);
PnText->Caption=buf;
CG->Progress=100;
}
}
//---------------------------------------------------------------------------
// SRAM写入n个字节测试
//---------------------------------------------------------------------------
void __fastcall TFmMain::WdataClick(TObject *Sender)
{
/* int i,j;
for(i=0;i<256;i++){
wdata[i]=0x55;
}
//Writedata(0xB0000000,256,wdata);
SPutBuff4B(0xB0000000,256,wdata); */
char buf[128];
char mybuf[1024*64];
int hFile;
DWORD i;
DWORD flen;
DWORD len,addr;
strcpy(buf,EdAddr->Text.c_str());
sscanf(buf,"%x",&addr);
strcpy(buf,EdLen->Text.c_str());
sscanf(buf,"%x",&len);
if(OD->Execute()){
PnText->Caption="";
CG->Progress=0;
hFile=FileOpen(OD->FileName,fmOpenRead);
flen=FileSeek(hFile,0,2);
FileSeek(hFile,0,0);
FileRead(hFile,buff,flen);
FileClose(hFile);
len=(flen<len)?flen:len;
Put4B(0xB0000000);
for(i=0;i<6336+1077;i++){
//Put4B(buff[i]);
if(i>1076){
mybuf[i-1077]=buff[i];
}
CG->Progress=i*100/(6336+1077);
}
Writedata(0xB0000000,6336,mybuf);
FillFiFo();
wsprintf(buf,"写入%d字节",6336);
PnText->Caption=buf;
CG->Progress=100;
}
}
//---------------------------------------------------------------------------
// 从SRAM中读出n个字节测试
//---------------------------------------------------------------------------
void __fastcall TFmMain::RdataClick(TObject *Sender)
{
UCHAR value;
SGetBuff4B(0xB0000000,6336,buff);
for(int i=36;i>=0;i--){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -