📄 uwrite.cpp
字号:
//---------------------------------------------------------------------------
#include <windows.h>
#include "evm6xdll.h"
#include <vcl.h>
#pragma hdrstop
#include "uWrite.h"
#include <dir.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
void WriteWord2Mem( LPVOID hHpi, ULONG ulDataAddr, ULONG ulDataWord,ULONG ulLength );
void ReadWordFromMem( LPVOID hHpi, ULONG ulDataAddr, ULONG ulDataWord,ULONG ulLength );
HANDLE hBd = NULL; // 板子句柄
short iBd = 0; // 板号
BOOL bExcl = 1; // 独占打开 = TRUE
EVM6XDLL_BOOT_MODE mode = HPI_BOOT_MAP0; // DSP 启动方式
LPVOID hHpi = NULL; // HPI 接口句柄
ULONG ulDataWord;
unsigned long UBuff[1024*4096]; //存取内存数据缓冲
short iMp; /* Map 选择器 = MAP0 */
EVM6XDLL_CLOCK_MODE clkMode;
EVM6XDLL_ENDIAN_MODE ednMode;
int isStart=0;
String strRV;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
exit(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try {
mRead->Text="";
hBd = evm6x_open( iBd, bExcl );
if ( hBd == INVALID_HANDLE_VALUE )
{mRead->Lines->Add("evm板打开错误!!");}
else
{mRead->Lines->Add("evm板打开OK");}
/*-----------------------------------------------------------------------*/
/* 对目标进行reset . */
/*-----------------------------------------------------------------------*/
if ( !evm6x_reset_board(hBd))
{mRead->Lines->Add("目标板复位错误!!");}
else
{mRead->Lines->Add("目标板复位OK");}
/*-----------------------------------------------------------------------*/
/* 配置EVM板 . */
/*-----------------------------------------------------------------------*/
if (isStart==0)
{
if ((!evm6x_set_board_config(hBd,clkMode,ednMode,0xff)) && (isStart==0))
{mRead->Lines->Add("EVM BOAD CONFIG 错误!!");}
else
{mRead->Lines->Add("EVM BOAD CONFIG OK");isStart=1;}
}
/*-----------------------------------------------------------------------*/
/* 设置启动方式 并让 DSP 复位. */
/*-----------------------------------------------------------------------*/
mode = iMp ? HPI_BOOT : HPI_BOOT_MAP0;
if ( !evm6x_reset_dsp(hBd,mode) )
{mRead->Lines->Add("Rest DSP错误!!!!");}
else
{mRead->Lines->Add("Rest DSP OK");}
/*-----------------------------------------------------------------------*/
/* 建立从目标到hpi的连接. */
/*-----------------------------------------------------------------------*/
hHpi = evm6x_hpi_open(hBd);
if ( hHpi == NULL )
{mRead->Lines->Add("hpi 打开错误!!");}
else
{mRead->Lines->Add("hpi 打开 OK");}
if ((chkWR->Checked) && (!chkCoff->Checked))
{
if (!(chk1->Checked))
{
if ( !evm6x_init_emif(hBd, hHpi) )
{mRead->Lines->Add("扩展内存初始化错误!");}
else
{mRead->Lines->Add("扩展内存初始化 OK");}
if (eValue->Text=="")
ShowMessage("请输入正确的值");
else
{ WriteWord2Mem(hHpi,ULONG(eStart->Text.ToInt()) /*Addr*/, ULONG(eValue->Text.ToInt()),ULONG(eLength->Text.ToInt()));
mRead->Lines->Add("写数据 OK");}
}
ReadWordFromMem(hHpi,ULONG(eStart->Text.ToInt()),ulDataWord,ULONG(eLength->Text.ToInt()));
mRead->Lines->Add("读数据 OK");
}
evm6x_hpi_close(hHpi);
evm6x_unreset_dsp(hBd);
evm6x_close(hBd);
mRead->Lines->Add(strRV);
strRV="";
return ;
}
catch (Exception &exception)
{
Application->ShowException(&exception);
ShowMessage("数据错误!!");
}
} /* end of button1 */
/*-------------------------------------------------------------------------*/
/* 写一个字 (32 bits) to DSP memory */
/*-------------------------------------------------------------------------*/
void WriteWord2Mem( LPVOID hHpi, ULONG ulDataAddr, ULONG ulDataWord,ULONG ulLength )
{
ULONG ulReturnedLength;
//ulLength = 4;
ulReturnedLength = ulLength;
if ( !evm6x_hpi_fill(hHpi,ulDataWord,
&ulReturnedLength, ulDataAddr))
{
ShowMessage("内存填充时发生错误!");
}
if ( (ulLength)!= ulReturnedLength )
{
ShowMessage("写错误,写完的长度与您所需的长度不等:" + String(ulReturnedLength));
}
}
void ReadWordFromMem( LPVOID hHpi, ULONG ulDataAddr, ULONG ulDataWord,ULONG ulLength )
{
ULONG ulReturnedLength;
ULONG ulh;
ULONG ulDW[1024];
ulh=ulLength;
ulReturnedLength = ulLength;
if ( !evm6x_hpi_read( hHpi,ulDW,
&ulReturnedLength, ulDataAddr))
{ShowMessage("内存读时发生错误!"); }
int i;
ULONG UTotal;
UTotal=ulReturnedLength;
String stmp;
for (i=0;i<=int(ulReturnedLength)/4-1;i++)
{
stmp=String(long(ulDW[i]));
stmp=stmp.IntToHex(stmp.ToInt(),32);
strRV= strRV + " " + stmp;
}
if ( ulh != UTotal )
{
ShowMessage("读错误,读完的长度与您所需的长度不等:" + String(UTotal));
}
strRV=strRV+"****************";
/* UCHAR CH;
for (i=0;i<=80*16;i++)
{
if (!evm6x_nvram_read(hBd,i,&CH))
{strRV=strRV+" " +"ERR"; }
else
stmp=CH;
strRV=strRV+" " +IntToHex(stmp.ToInt(),2);
}*/
free(ulDW);
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
cb1->ItemIndex=1;
cmbe->ItemIndex=0;
ednMode=LITTLE_ENDIAN_MODE;
clkMode=DSP_CLOCK_NORMAL;
iMp=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cb1Click(TObject *Sender)
{
iMp=short(cb1->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cmbeChange(TObject *Sender)
{
if (cmbe->ItemIndex==0)
ednMode=LITTLE_ENDIAN_MODE;
else if (cmbe->ItemIndex==1)
ednMode=BIG_ENDIAN_MODE;
}//---------------------------------------------------------------------------
void __fastcall TForm1::chkWRClick(TObject *Sender)
{
grpWR->Enabled=chkWR->Checked;
// if (chkWR->Checked)
chkCoff->Checked=false;
grpCoff->Enabled=false;
Button3->Visible=false;
Button1->Visible=True;
Button1->Enabled=chkWR->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnCoffClick(TObject *Sender)
{
if (oDIAG->Execute())
eCoff->Text=oDIAG->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::chkCoffClick(TObject *Sender)
{
grpCoff->Enabled=chkCoff->Checked;
grpWR->Enabled=false;
chkWR->Checked=false;
Button3->Visible=True;
Button3->Enabled=chkCoff->Checked;
Button1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::eCoffExit(TObject *Sender)
{
if (eCoff->Text!="")
{ if (!FileExists(eCoff->Text))
{
ShowMessage("指定的文件不存在!");
eCoff->SetFocus();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char ch;
int ich;
long lLen;
String strVal,sTmp[4],str1,strTmp;
int handle;
FILE *stream;
int i,ii=69;
unsigned long iCount,Len1, UVal;
/*-----------------------------------------------------------------------*/
/* 打开目标板 */
/*-----------------------------------------------------------------------*/
hBd = evm6x_open( iBd, bExcl );
if ( hBd == INVALID_HANDLE_VALUE ) exit(1);
/*-----------------------------------------------------------------------*/
/*目标板复位 */
/*-----------------------------------------------------------------------*/
/*if ( !evm6x_reset_board(hBd) ) exit(1);
if (!evm6x_set_board_config(hBd,clkMode,ednMode,0xff))
{mRead->Lines->Add("EVM BOAD CONFIG 错误!!");}
else
{mRead->Lines->Add("EVM BOAD CONFIG OK");}*/
/*-----------------------------------------------------------------------*/
/* 复位并设置DSP启动模式并 */
/*-----------------------------------------------------------------------*/
mode = iMp ? HPI_BOOT : HPI_BOOT_MAP0;
if ( !evm6x_reset_dsp(hBd,mode) ) exit(1);
/*-----------------------------------------------------------------------*/
/* 建立一个HPI连接 */
/*-----------------------------------------------------------------------*/
hHpi = evm6x_hpi_open(hBd);
if ( hHpi == NULL ) exit(1);
/*-----------------------------------------------------------------------*/
/* 初始化emif寄存器 */
/*-----------------------------------------------------------------------*/
if ( !evm6x_init_emif(hBd, hHpi) ) exit(1);
BOOL bVerbose = 0; /* COFF load verbose mode = FALSE */
BOOL bClr = 0; /* Clear bss mode = FALSE */
BOOL bDump = 0; /* Dump mode = FALSE */
WriteWord2Mem( hHpi, 0x01840070 /*Addr*/, 0x00000010 /*Data*/ ,4);
if (!evm6x_coff_load(hBd,hHpi,eCoff->Text.c_str(),bVerbose,bClr,bDump)) exit(8);
evm6x_hpi_close(hHpi);
/*-----------------------------------------------------------------------*/
/* 恢复停止状态的DSP */
/*-----------------------------------------------------------------------*/
evm6x_unreset_dsp(hBd);
/*-----------------------------------------------------------------------*/
/* 关闭指定的连接 */
/*-----------------------------------------------------------------------*/
evm6x_close(hBd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
free(UBuff);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cb1Change(TObject *Sender)
{
iMp=short(cb1->ItemIndex);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -