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

📄 fengdlg.cpp

📁 给予wince操作系统的evc程序
💻 CPP
字号:
// FengDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Feng.h"
#include "FengDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif




/////////////////////////////////////////////////////////////////////////////
// CFengDlg dialog

CFengDlg::CFengDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFengDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFengDlg)
		// 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(IDR_MAINFRAME);
}

void CFengDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFengDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFengDlg, CDialog)
	//{{AFX_MSG_MAP(CFengDlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFengDlg message handlers

BOOL CFengDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 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
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	v_pADCRegs = (volatile ADCreg*)VirtualAlloc(0, sizeof(ADCreg), MEM_RESERVE, PAGE_NOACCESS);
     if (v_pADCRegs == NULL) 
	 {
     DEBUGMSG (1,(TEXT("v_pADCRegs is not allocated\n\r")));
     return TRUE;
	 }
      if (!VirtualCopy((PVOID)v_pADCRegs, (PVOID)ADC_BASE, sizeof(ADCreg), PAGE_READWRITE|PAGE_NOCACHE)) 
	  {
         DEBUGMSG (1,(TEXT("v_pADCRegs is not mapped\n\r")));
        return TRUE;
	  }
     DEBUGMSG (1,(TEXT("v_pADCRegs is mapped to %x\n\r"), v_pADCRegs));	

   v_pPWMRegs= (volatile PWMreg*)VirtualAlloc(0, sizeof(PWMreg), MEM_RESERVE, PAGE_NOACCESS);
   if (v_pPWMRegs == NULL) 
   {
     RETAILMSG (1,(TEXT("v_pPWMRegs is not allocated\n\r")));
   }
   if (!VirtualCopy((PVOID)v_pPWMRegs, (PVOID)PWM_BASE, sizeof(PWMreg), PAGE_READWRITE|PAGE_NOCACHE)) 
   {
     RETAILMSG (1,(TEXT("v_pPWMRegs is not mapped\n\r")));
   }
    RETAILMSG (1,(TEXT("v_pPWMRegs is mapped to %x\n\r"), v_pPWMRegs));

	 v_pIOPRegs = (volatile IOPreg*)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
   if (v_pIOPRegs == NULL) 
   {
     RETAILMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r")));
   }
   if (!VirtualCopy((PVOID)v_pIOPRegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE)) 
   {
      RETAILMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r")));
   } 
    RETAILMSG (1,(TEXT("v_pIOPRegs is mapped to %x\n\r"), v_pIOPRegs));

	 v_pIOPRegs->rGPFCON = 0x55aa;       
     v_pIOPRegs->rGPFUP  = 0xff;      // The pull up function is disabled GPC[15:0] 
	 v_pIOPRegs->rGPFDAT=0x30;
	return TRUE;  // return TRUE  unless you set the focus to a control
}


DWORD WINAPI Watch(LPVOID lpparameter)
{
	//密切监视IO口
   RETAILMSG (1,(TEXT("IO Watch Enter!!!\n\r")));
   volatile IOPreg *v_pIOPRegs;
   v_pIOPRegs = (volatile IOPreg*)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
   if (v_pIOPRegs == NULL) 
   {
     RETAILMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r")));
   }
   if (!VirtualCopy((PVOID)v_pIOPRegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE)) 
   {
      RETAILMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r")));
   } 
  // RETAILMSG (1,(TEXT("v_pIOPRegs is mapped to %x\n\r"), v_pIOPRegs));
  
   v_pIOPRegs->rGPGCON=0xff000300;
   v_pIOPRegs->rGPGUP=0xffff;
  // while(TRUE)
   //{   
   //    RETAILMSG (1,(TEXT("while Enter!!!\n\r")));
	  // if(v_pIOPRegs->rGPGDAT&0x01)
	   //{
      //   RETAILMSG (1,(TEXT("IOState Has Been Changed!!!\n\r")));
	//	  break; 
	  // }
	  // else
	//	   continue;
	   while(v_pIOPRegs->rGPGDAT&0x01);
	   RETAILMSG (1,(TEXT("IO State Has Been Changed!!!\n\r")));
	  // break;
  // }  
  return 0;
}



DWORD WINAPI Thread2(LPVOID lpparameter)
{
 

RETAILMSG(1,(TEXT("Thread2  Enter!!!!\n\r")));

 volatile ADCreg *v_pADCRegs;

v_pADCRegs = (volatile ADCreg*)VirtualAlloc(0, sizeof(ADCreg), MEM_RESERVE, PAGE_NOACCESS);
     if (v_pADCRegs == NULL) 
	 {
     DEBUGMSG (1,(TEXT("v_pADCRegs is not allocated\n\r")));
     return TRUE;
	 }
      if (!VirtualCopy((PVOID)v_pADCRegs, (PVOID)ADC_BASE, sizeof(ADCreg), PAGE_READWRITE|PAGE_NOCACHE)) 
	  {
         DEBUGMSG (1,(TEXT("v_pADCRegs is not mapped\n\r")));
        return TRUE;
	  }
     DEBUGMSG (1,(TEXT("v_pADCRegs is mapped to %x\n\r"), v_pADCRegs));	
     Sleep(10000);
     v_pADCRegs->rADCCON=0x0;
     RETAILMSG(1,(TEXT("Thread2  out!!!!\n\r")));
     return 0;

}



DWORD WINAPI BallMove(LPVOID lpparameter)
{ 

   RETAILMSG(1,(TEXT("PWM Thread Enter!\n\r")));
   volatile IOPreg *v_pIOPRegs;
   volatile PWMreg *v_pPWMRegs;

    v_pIOPRegs = (volatile IOPreg*)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
   if (v_pIOPRegs == NULL) 
   {
     RETAILMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r")));
   }
   if (!VirtualCopy((PVOID)v_pIOPRegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE)) 
   {
      RETAILMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r")));
   } 
    RETAILMSG (1,(TEXT("v_pIOPRegs is mapped to %x\n\r"), v_pIOPRegs));
  v_pPWMRegs= (volatile PWMreg*)VirtualAlloc(0, sizeof(PWMreg), MEM_RESERVE, PAGE_NOACCESS);
   if (v_pPWMRegs == NULL) 
   {
     RETAILMSG (1,(TEXT("v_pPWMRegs is not allocated\n\r")));
   }
   if (!VirtualCopy((PVOID)v_pPWMRegs, (PVOID)PWM_BASE, sizeof(PWMreg), PAGE_READWRITE|PAGE_NOCACHE)) 
   {
     RETAILMSG (1,(TEXT("v_pPWMRegs is not mapped\n\r")));
   }
    RETAILMSG (1,(TEXT("v_pPWMRegs is mapped to %x\n\r"), v_pPWMRegs)); 

    Sleep(10000);
	v_pIOPRegs->rGPBUP  = 0x7ff;      // The pull up function is disabled GPB[10:0]
    v_pIOPRegs->rGPBCON=0x1555aa;
    v_pPWMRegs->rTCON= 0x0;//stop timer
    v_pIOPRegs->rGPBDAT=0x0;
    RETAILMSG(1,(TEXT("0 Motor Stop! \r\n")));
	return 0;
}



void CFengDlg::OnButton1() 
{  
   	DWORD ThreadID;
	DWORD code;
	CRect rect;
	int  m=0;
	// TODO: Add your control notification handler code here
     unsigned long *p;
    p=new unsigned long[500000];

   // v_pCLKPWRegs->rCLKDIVN=0x03;
   // v_pCLKPWRegs->rMPLLCON= (0xa1<<12)|(0x3<<4) | 0x1; // FCLK=202.8M
    
   //生成IO守候线程
     v_pIOPRegs->rGPGCON=0xff000300;
     v_pIOPRegs->rGPGUP=0xffff;
     
    
    if(!GetExitCodeThread(WatchThread,&code)||(code!=STILL_ACTIVE))
	{
	   RETAILMSG(1,(TEXT("Watch Thread Succeed!\n\r")));
	   WatchThread=CreateThread(NULL,0,Watch,&Watchball,0,&ThreadID);
   	}
	if(WatchThread==NULL)
	{
	RETAILMSG(1,(TEXT("Watch Thread Failed!!!!\n\r")));
	}


	//生成关断ADC的线程

	if(!GetExitCodeThread(RedThread,&code)||(code!=STILL_ACTIVE))
	{
	   RETAILMSG(1,(TEXT("chuang jian cheng gong22222!!!!\n\r")));
	   RedThread=CreateThread(NULL,0,Thread2,&Redball,0,&ThreadID);
   	}
	if(RedThread==NULL)
	{
	RETAILMSG(1,(TEXT("failed222222!!!!\n\r")));
	}
     v_pADCRegs->rADCCON=(1<<14)|(255<<6)|(2<<3)|(0<<2)|(1<<1);//enable prescaler,ain2,normal,start by read
     usConData=v_pADCRegs->rADCDAT0&0x3ff;
	 DEBUGMSG (1,(TEXT("Start Cai Yang!!!!\n\r")));  
	 for(unsigned long i=0;i<500000;i++)
	{   
      while(!(v_pADCRegs->rADCCON&0x8000));//检查ECFLG位是否为高
	  if(v_pADCRegs->rADCCON&0x02)
	  { 
		  usConData=v_pADCRegs->rADCDAT0&0x3ff;
	      p[i]=usConData;
	  }
	  else
	  {
		  break;
	  }
	}	 
	 RETAILMSG(1,(TEXT("ADC Success!i='%d'\r\n"),i));
    for(unsigned long j=i-150;j<i+10;j++)
	{
     RETAILMSG(1,(TEXT("ADC_READ: Read Success! ADCDAT10 '%x'\r\n"),p[j]));   
	 }
    //Ports  : GPB10  GPB9   GPB8   GPB7   GPB6   GPB5    GPB4    GPB3   GPB2   GPB1  GPB0
    //Signal : GPB10  GPB9   GPB8   GPB7   GPB6   DIS_OFF L3CLOCK L3DATA L3MODE PWM2  PWM1
    //Setting: Output Output Output Output Output Output  Output  TOUT3 TOUT2 TOUT1 TOUT0 
    //Binary : 01,    01     *01,   *01    *01,   01      01,     10     10,    10    10  
  //  v_pIOPRegs->rGPBCON = 0x15555a;
    v_pIOPRegs->rGPBUP  = 0x7ff;      // The pull up function is disabled GPB[10:0]
    v_pIOPRegs->rGPBCON=0x1555aa;
    //v_pIOPRegs->rGPBUP|= 0x4;
    //v_pPWMRegs->rTCFG0=255; //预分频设置           1
    v_pPWMRegs->rTCFG1=3;//分频设置;//1/8      2
    v_pPWMRegs->rTCNTB0=125; //给两个缓冲器//赋值     3
    v_pPWMRegs->rTCMPB0=62;                  //      4
	v_pPWMRegs->rTCON|=(1<<1)|(1<<2);//manual update    5  
	v_pIOPRegs->rGPBDAT=0x3e0;  //会死机
	v_pPWMRegs->rTCON &= ~(1<<1);  //                  6        
	v_pPWMRegs->rTCON |= (1<<3)|1;//start timer,auto reload 8 
    RETAILMSG(1,(TEXT("0 Motor start !\r\n")));
    
    //生成关断PWM的线程
	if(!GetExitCodeThread(BlueThread,&code)||(code!=STILL_ACTIVE))
   {   

	RETAILMSG(1,(TEXT("chuang jian cheng gong1111!!!!\n\r")));
	BlueThread=CreateThread(NULL,0,BallMove,&Blueball,0,&ThreadID);  

	}
	if(BlueThread==NULL)
	{

	DEBUGMSG (1,(TEXT("failed11111!!!!\n\r")));

	}	
    
	v_pPWMRegs->rTCFG1|=(3<<4);//分频设置;//1/8      2
    v_pPWMRegs->rTCNTB1=125; //给两个缓冲器//赋值     3
    v_pPWMRegs->rTCMPB1=62;                  //      4
	v_pPWMRegs->rTCON|=(1<<9)|(1<<10);//manual update    5  
	v_pIOPRegs->rGPBDAT=0x3e0;  //会死机
	v_pPWMRegs->rTCON &= ~(1<<9);  //                  6 
	RETAILMSG(1,(TEXT("1 Motor Sart!\r\n")));
	v_pPWMRegs->rTCON |= (1<<11)|(1<<8);//start timer,auto reload 8 
	Sleep(10000);
    v_pPWMRegs->rTCON=0x0;
	RETAILMSG(1,(TEXT("1 Motor End!\r\n")));
    Sleep(10000);
    v_pPWMRegs->rTCON=0x0;
	RETAILMSG(1,(TEXT("1 Motor End!\r\n")));

    Sleep(10000);
    RETAILMSG(1,(TEXT("IO start!\r\n")));
	v_pIOPRegs->rGPFCON = 0x55aa;       
    v_pIOPRegs->rGPFUP  = 0xff;      // The pull up function is disabled GPC[15:0] 
	v_pIOPRegs->rGPFDAT=0xc0;
  //  Sleep(10000);
    v_pIOPRegs->rGPFDAT=0x30;
    RETAILMSG(1,(TEXT("IO End!\r\n")));
     Sleep(10000);
     RETAILMSG(1,(TEXT("444444444444444444444!\r\n")));
	// v_pIOPRegs->rGPBUP  = 0x7ff;      // The pull up function is disabled GPB[10:0]
  //  v_pIOPRegs->rGPBCON=0x1555aa;
    //v_pIOPRegs->rGPBUP|= 0x4;
    //v_pPWMRegs->rTCFG0=255; //预分频设置           1
  /*  v_pPWMRegs->rTCFG1|=(3<<4);//分频设置;//1/8      2
    v_pPWMRegs->rTCNTB1=125; //给两个缓冲器//赋值     3
    v_pPWMRegs->rTCMPB1=62;                  //      4
	v_pPWMRegs->rTCON|=(1<<9)|(1<<10);//manual update    5  
	v_pIOPRegs->rGPBDAT=0x3e0;  //会死机
	v_pPWMRegs->rTCON &= ~(1<<9);  //                  6 
	RETAILMSG(1,(TEXT("1 Motor Sart!\r\n")));
	v_pPWMRegs->rTCON |= (1<<11)|(1<<8);//start timer,auto reload 8 
    Sleep(10000);
    v_pPWMRegs->rTCON=0x0;
	RETAILMSG(1,(TEXT("1 Motor End!\r\n")));*/
 }
   

⌨️ 快捷键说明

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