?? cpld_dmadlg.cpp
字號:
// CPLD_DMADlg.cpp : implementation file
//
#include "stdafx.h"
#include "CPLD_DMA.h"
#include "CPLD_DMADlg.h"
#include "USB20C.H"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
//------------------------------------
//本模塊所用的公用變量
//------------------------------------
int gApi;
char *temp;
char str[10];
int DriverCount;
char a[5];
char convent[50];
char strChar[100];
CString strText;
BOOL bl_Init=false;
BOOL bl_ChangeIFC=false;
BOOL bl_Step=false;
long showSize[40];
int vToCount=41;
int iNext;
//-------------------------------------
__int64 sumCount;
//-------------------------------------
//讀寫線程
UINT Run_ReadThread(LPVOID param);
UINT Run_WriteThread(LPVOID param);
//-------------------------------------
//SetIFCFG(參數(shù)1..6)
struct IFCNumber
{
BOOL bl_Local; // 1 使用內(nèi)部同步時鐘=True
BOOL bl_48HMz; // 2 使用內(nèi)部30HMz
BOOL bl_Out; // 3 輸出
BOOL bl_FanXiang; // 4 不翻轉(zhuǎn)
BOOL bl_FIFO; // 5 同步DMA
BOOL bl_One; // 6 FIFO提前一個周期
}IFCNumberType;
//-------------------------------------
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCPLD_DMADlg dialog
CCPLD_DMADlg::CCPLD_DMADlg(CWnd* pParent /*=NULL*/)
: CDialog(CCPLD_DMADlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCPLD_DMADlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
}
void CCPLD_DMADlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCPLD_DMADlg)
DDX_Control(pDX, IDC_LIST1, m_List);
DDX_Control(pDX, IDC_CHECK3, cheFIFO);
DDX_Control(pDX, IDC_CHECK2, cheFanXiang);
DDX_Control(pDX, IDC_CHECK1, che48HMz);
DDX_Control(pDX, IDC_EDIT3, m_Edit3);
DDX_Control(pDX, IDC_EDIT2, m_Edit2);
DDX_Control(pDX, IDC_EDIT1, m_Edit1);
DDX_Control(pDX, IDC_BUTTON1, cmdReadDMA);
DDX_Control(pDX, IDC_BUTTON2, cmdWriteDMA);
DDX_Control(pDX, IDC_BUTTON3, cmdStep);
DDX_Control(pDX, IDC_BUTTON4, cmdExit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCPLD_DMADlg, CDialog)
//{{AFX_MSG_MAP(CCPLD_DMADlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON4, OncmdExit)
ON_BN_CLICKED(IDC_CHECK1, Onche48HMz)
ON_BN_CLICKED(IDC_CHECK2, OncheFanXiang)
ON_BN_CLICKED(IDC_CHECK3, OncheFIFO)
ON_BN_CLICKED(IDC_BUTTON3, OnCmdStep)
ON_BN_CLICKED(IDC_BUTTON1, OnCmdReadDMA)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON2, OnCmdWriteDMA)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON5, OnNEW_ReadDMA)
ON_BN_CLICKED(IDC_BUTTON6, OnnewWrite_DMA)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCPLD_DMADlg message handlers
BOOL CCPLD_DMADlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
/*/------------------------------------
USB20C 演示 讀寫CPLD DMA 從這里開始....
首先加載 USB20C.DLL 動態(tài)庫 到當(dāng)前緩沖.
------------------------------------/*/
USB20C_DLLInit();
gApi=USB20C_EnumDeviceCount();
itoa(gApi,a,10);
strcat(strChar,"函數(shù): USB20C_EnumDeviceCount 返回值: ");
strcat(strChar,a);
if (gApi>=1)
{
temp=" 枚舉設(shè)備成功。";
strcat(strChar,temp);
m_List.AddString(strChar);
}
else
{
temp=" 枚舉設(shè)備失敗。";
strcat(strChar,temp);
m_List.AddString(strChar);
//當(dāng)沒有設(shè)備連接時使讀寫DMA功能不可操作
Enable_But(false);
}
gApi=USB20C_Init(0, 1);
itoa(gApi,a,10);
strcpy(strChar,"函數(shù): USB20C_Init 返回值: ");
strcat(strChar,a);
switch (gApi)
{
case 0:
temp=" 不能初始化設(shè)備。";
strcat(strChar,temp);
m_List.AddString(strChar);
//當(dāng)沒有設(shè)備連接時使讀寫DMA功能不可操作
Enable_But(false);
break;
case 1:
temp=" 模塊工作在全速模式(USB1.1)。";
strcat(strChar,temp);
m_List.AddString(strChar);
break;
case 2:
temp=" 模塊工作在高速模式(USB2.0)。";
strcat(strChar,temp);
m_List.AddString(strChar);
break;
}
//------------------------------------
/*/ 初始化設(shè)置m_Edit1
--------------------------/*/
m_Edit1.SetSel(0,-1);
strText="已傳輸(秒)";
m_Edit1.ReplaceSel(strText);
/*/初始化設(shè)置m_Edit2
-------------------------/*/
m_Edit2.SetSel(0,-1);
strText="傳輸(字節(jié))";
m_Edit2.ReplaceSel(strText);
/*/ 初始化設(shè)置m_Edit3
-------------------------/*/
m_Edit3.SetSel(0,-1);
strText="傳輸速率(秒/字節(jié))";
m_Edit3.ReplaceSel(strText);
/*/--------------------------
初始化SetIFCFG函數(shù)參數(shù) ---/*/
Init_SetIFCFG();
//--------------------------
return TRUE; // return TRUE unless you set the focus to a control
}
void CCPLD_DMADlg::Init_SetIFCFG()
{
/*/初始化SetIFCFG函數(shù)參數(shù)
----------------------------/*/
IFCNumberType.bl_Local =true; //用內(nèi)部的同步時鐘(true 內(nèi)部同步時鐘;false外部同步時鐘)
IFCNumberType.bl_48HMz=false; //使用內(nèi)部時鐘(true 同步時鐘48HMz;false 同步時鐘30HMz)
IFCNumberType.bl_Out=true; //允許輸出(true輸出;false不輸出)
IFCNumberType.bl_FanXiang=false; //不翻轉(zhuǎn)(true翻轉(zhuǎn);false不翻轉(zhuǎn))
IFCNumberType.bl_FIFO=false; //使用DMA傳輸(true異步;false同步)
IFCNumberType.bl_One=false; //同步DMA傳輸時,FIFO標(biāo)志提前一個時鐘周期
}
void CCPLD_DMADlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CCPLD_DMADlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CCPLD_DMADlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CCPLD_DMADlg::OncmdExit()
{
//終止當(dāng)前讀寫 DMA 線程
try
{
bl_Step=false;
KillTimer(1);
USB20C_EndDMA();
//關(guān)閉窗口時斷開與設(shè)備的連接
USB20C_Done();
//關(guān)閉窗口時釋放USB20C.DLL動態(tài)連接庫
USB20C_DLLDone();
//OnCancel();
CDialog::OnCancel();
}
catch (...)
{
MessageBox(" Close Error!!!!!!","UUUUUUUU");
}
}
void CCPLD_DMADlg::Enable_But(BOOL blTrue)
{
/*/------------------------------
如果系統(tǒng)初始化失敗,禁用讀寫鍵
-------------------------------/*/
cmdReadDMA.EnableWindow(blTrue);
cmdWriteDMA.EnableWindow(blTrue);
cmdStep.EnableWindow(blTrue);
}
void CCPLD_DMADlg::but_Enable(BOOL blTrue)
{
/*/------------------------------
開始讀時禁用寫鍵,反之禁用讀鍵
-------------------------------/*/
cmdReadDMA.EnableWindow(blTrue);
cmdWriteDMA.EnableWindow(blTrue);
}
void CCPLD_DMADlg::Onche48HMz()
{
/*/---------------------------------------
選擇使用48HMz內(nèi)部時鐘時改變bl_48HMz標(biāo)識
---------------------------------------/*/
CButton *p;
p=(CButton*) GetDlgItem(IDC_CHECK1);
if(p->GetCheck())
{
IFCNumberType.bl_48HMz=true;
bl_ChangeIFC=true;
}
else
{
IFCNumberType.bl_48HMz=false;
bl_ChangeIFC=true;
}
}
void CCPLD_DMADlg::OncheFanXiang()
{
/*/-----------------------------------------
選擇使用同步時鐘反向時設(shè)置bl_FanXing標(biāo)示
-----------------------------------------/*/
CButton *p;
p=(CButton*) GetDlgItem(IDC_CHECK2);
if(p->GetCheck())
{
IFCNumberType.bl_FanXiang=true;
bl_ChangeIFC=true;
}
else
{
IFCNumberType.bl_FanXiang=false;
bl_ChangeIFC=true;
}
}
void CCPLD_DMADlg::OncheFIFO()
{
/*/---------------------------------------------
選擇使用FIFOFlag提前一個周期時改變bl_FIFO標(biāo)示
--------------------------------------------/*/
CButton *p;
p=(CButton *) GetDlgItem(IDC_CHECK3);
if(p->GetCheck())
{
IFCNumberType.bl_FIFO=true;
bl_ChangeIFC=true;
}
else
{
IFCNumberType.bl_FIFO=false;
bl_ChangeIFC=true;
}
}
CString CCPLD_DMADlg::ShowMsg(CString cText)
{
m_Edit1.SetSel(0,-1);
m_Edit1.ReplaceSel(cText);
return " ";
}
void CCPLD_DMADlg::CreateTimer()
{
/*/---------------------------------
設(shè)置計(jì)時器1,100ms
---------------------------------/*/
SetTimer(1,100,NULL);
}
void CCPLD_DMADlg::DMARead()
{
/*/----------------------------------
這是讀 DMA 的測試涵數(shù)屬于臨時
----------------------------------/*/
int dataSize;
int DataRead[1];
byte Buf[65536];
dataSize = 65536;
if (USB20C_EndDMA()==false)
{
MessageBox("結(jié)束DMA出錯。", "USB20C_讀DMA",MB_ICONINFORMATION+MB_OK);
bl_Step=false;
}
if (USB20C_SetIFCFG(IFCNumberType.bl_Local,IFCNumberType.bl_48HMz,IFCNumberType.bl_Out,IFCNumberType.bl_FanXiang,IFCNumberType.bl_FIFO,IFCNumberType.bl_One))
{
/*
'function USB20C_SetIFCFG(IntIFCLK, IntClk48MHz, IntClkOutEn, IFCLKInvert, AsyncFIFO, OnePulseEarly :Boolean): Boolean; StdCall;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -