⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.~cpp

📁 dsp下载器上位机程序 感兴趣的朋友可以下来
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#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 + -