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

📄 uwrite.cpp

📁 DSP6000开发板QuickStartpdf文档
💻 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 + -