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

📄 main.cpp

📁 dsp下载器上位机程序 感兴趣的朋友可以下来
💻 CPP
字号:
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
// 包含头文件
//---------------------------------------------------------------------------
#include <stdio.h>									// 标准输入输出
#include "winio.h"									// 直接IO
#include "main.h"									// 主函数
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
TFmMain *FmMain;
//---------------------------------------------------------------------------
// 构造函数
//---------------------------------------------------------------------------
__fastcall TFmMain::TFmMain(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
// 处理窗口建立事件
//---------------------------------------------------------------------------
void __fastcall TFmMain::FormCreate(TObject *Sender)
{
	succ=InitializeWinIo();							// 初始化直接IO操作
	succ=GetPortVal(ECR,&PtVal,1);                  // 读取ECR寄存器
	OLDECR=PtVal;                                   // 保存原模式
	succ=SetPortVal(ECR,0x95,1);					// 进入EPP模式(0x95)
	succ=SetPortVal(CTL,0xE4,1);					// 允许EPP读(IZ)
	succ=GetPortVal(EPD,&PtVal,1);					// 预读数据
}
//---------------------------------------------------------------------------
// 处理窗口撤销事件
//---------------------------------------------------------------------------
void __fastcall TFmMain::FormDestroy(TObject *Sender)
{
	succ=SetPortVal(ECR,OLDECR,1);					// 恢复原模式
	ShutdownWinIo();	                            // 结束直接IO操作
}
//---------------------------------------------------------------------------
// 转换到SPP模式
//---------------------------------------------------------------------------
void __fastcall TFmMain::R1Click(TObject *Sender)
{
	succ=SetPortVal(ECR,0x15,1);					// 转换到SPP模式
}
//---------------------------------------------------------------------------
// 发送数据
//---------------------------------------------------------------------------
void __fastcall TFmMain::T1Click(TObject *Sender)
{
	UCHAR value;

	strcpy(buff,EdData->Text.c_str());
	sscanf(buff,"%X",&value);
	value=0x00;
//	succ=SetPortVal(CTL,0xEF,1);                    // EPP输出
//	Sleep(1);
	succ=SetPortVal(CTL,0xE4,1);                    // EPP输出
	succ=SetPortVal(EPD,value,1);					// 写数据
//	succ=SetPortVal(CTL,0xE6,1);                    // EPP输入
}
//---------------------------------------------------------------------------
// 读取数据
//---------------------------------------------------------------------------
void __fastcall TFmMain::BtDatRClick(TObject *Sender)
{
	succ=SetPortVal(CTL,0xE7,1);                    // EPP输出
/*
	succ=GetPortVal(EPD,&PtVal,1);					// 读数据
	sprintf(buff,"%02X",(UCHAR)PtVal);
	EdData->Text=buff;
*/
}
//---------------------------------------------------------------------------
// 发送地址
//---------------------------------------------------------------------------
void __fastcall TFmMain::BtAddWClick(TObject *Sender)
{
	UCHAR value;

	strcpy(buff,EdData->Text.c_str());
	sscanf(buff,"%X",&value);
	succ=SetPortVal(CTL,0xE5,1);                    // EPP输出
	succ=SetPortVal(EPA,value,1);					// 写地址
	succ=SetPortVal(CTL,0xE4,1);                    // EPP输入
}
//---------------------------------------------------------------------------
// 读取状态
//---------------------------------------------------------------------------
void __fastcall TFmMain::BtStatClick(TObject *Sender)
{
	GetPortVal(STA,&PtVal,1);
	sprintf(buff,"%02X",(UCHAR)PtVal);
	EdData->Text=buff;
}
//---------------------------------------------------------------------------
// 清除ListBox内容
//---------------------------------------------------------------------------
void __fastcall TFmMain::BitBtn6Click(TObject *Sender)
{
	LBMain->Items->Clear();
}
//---------------------------------------------------------------------------
// 发送命令并接收数据
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// 向HPI写入4个字节(高字节在前)
//---------------------------------------------------------------------------
void TFmMain::Put4B(UINT val)
{
    succ=SetPortVal(EPD,val>>24,1);				        // 写HPIC_3
    succ=SetPortVal(EPD,val>>16,1);				        // 写HPIC_2
    succ=SetPortVal(EPD,val>> 8,1);				        // 写HPIC_1
    succ=SetPortVal(EPD,val    ,1);				        // 写HPIC_0
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void TFmMain::WaitReady()
{
    int i;
    ULONG Curr,Prev;
	GetPortVal(STA,&Prev,1);
    for(i=0;i<0x07FFFFFF;i++){
    	GetPortVal(STA,&Curr,1);
        if((Curr&0x40)==(Prev&0x40)) break;
        Prev=Curr;        
    }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void TFmMain::Fill()
{
    int i;
	succ=SetPortVal(CTL,0xE4,1);				        	// 允许EPP读(IZ)
    for(i=0;i<8;i++)
    {
	    succ=SetPortVal(EPA,0x00,1);				        // 写地址(计数器复位)
        Put4B(0x00080008);                                  // 写HPIC
        Put4B(0xFFFFFFFC);                                  // 写HPIA
        Put4B(0xFFFFFFFF);                                  // 写HPID
    }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
static DWORD EAD[]=
{
    0x90001554,0x000000AA,
    0x90000AA8,0x00000055,
    0x90001554,0x00000080,
    0x90001554,0x000000AA,
    0x90000AA8,0x00000055,
    0x90001554,0x00000010
};
void TFmMain::EraseAll()
{
    int i;
	succ=SetPortVal(CTL,0xE4,1);				        	// 允许EPP读(IZ)
    for(i=0;i<6;i++)
    {
	    succ=SetPortVal(EPA,0x00,1);				        // 写地址(计数器复位)
        Put4B(0x00080008);                                  // 写HPIC
        Put4B(EAD[i*2+0]);                                  // 写HPIA
        Put4B(EAD[i*2+1]);                                  // 写HPID
    }
    Fill();
    WaitReady();
}
//---------------------------------------------------------------------------
// 擦除一个扇区
//---------------------------------------------------------------------------
static DWORD ESD[]=
{
    0x90001554,0x000000AA,
    0x90000AA8,0x00000055,
    0x90001554,0x00000080,
    0x90001554,0x000000AA,
    0x90000AA8,0x00000055,
    0x90000000,0x00000020
};
void TFmMain::EraseOneSector(UINT Sec)
{
    int i;
    succ=SetPortVal(CTL,0xE4,1);				        	// 允许EPP读(IZ)
    for(i=0;i<5;i++)
    {
        succ=SetPortVal(EPA,0x00,1);				        // 写地址(计数器复位)                                                            // 写HPIC
        Put4B(0x00080008);                                  // 写HPIA
        Put4B(ESD[i*2+0]);                                  // 写HPID
        Put4B(ESD[i*2+1]);
    }
    succ=SetPortVal(EPA,0x00,1);				            // 写地址(计数器复位)                                                            // 写HPIC
    Put4B(0x00080008);                                      // 写HPIA
    Put4B(Sec);                                             // 写HPID
    Put4B(ESD[i*2+1]);
    Fill();
    WaitReady();
}
//---------------------------------------------------------------------------
// 向FLASH写一个字节
//---------------------------------------------------------------------------
static DWORD PBD[]=
{
    0x90001554,0x000000AA,
    0x90000AA8,0x00000055,
    0x90001554,0x000000A0
};
void TFmMain::PutByte(UINT addr,UCHAR data)
{
    int i;
	SetPortVal(CTL,0xE4,1);				        	        // 允许EPP读(IZ)
    for(i=0;i<3;i++)
    {
    	SetPortVal(EPA,0x00,1);				                // 写地址(计数器复位)
        Put4B(0x00080008);
        Put4B(PBD[i*2+0]);
        Put4B(PBD[i*2+1]);
    }
   	SetPortVal(EPA,0x00,1);				                    // 写地址(计数器复位)
    Put4B(0x00080008);
    Put4B(addr);
    Put4B((UINT)data);
    Fill();
    WaitReady();
}
//---------------------------------------------------------------------------
void __fastcall TFmMain::SpeedButton1Click(TObject *Sender)
{
	char buf[256];
	succ=GetPortVal(ECR,&PtVal,1);                  // 读取ECR寄存器
	PtVal=PtVal&0xFF;
	wsprintf(buf,"%02X",(UCHAR)PtVal);
	EdDat->Text=buf;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFmMain::BitBtn5Click(TObject *Sender)
{
    EraseAll();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFmMain::ByteProgrameClick(TObject *Sender)
{
    int i;
    for(i=0;i<128;i++){
        PutByte(0x90000000+i*4,i);
    }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFmMain::SectorEraseClick(TObject *Sender)
{
    EraseOneSector(0x90000000+0);
}
//---------------------------------------------------------------------------
// 程序结束
//---------------------------------------------------------------------------


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -