wince s3c2440 LM629的控制2011-11-06

2 篇文章 0 订阅
1 篇文章 0 订阅
#ifdef __cplusplus
extern "C"
{
#endif
BOOL VirtualCopy( LPVOID, LPVOID, DWORD, DWORD );
#ifdef __cplusplus
}
#endif

// Registers : I/O port
//

#define IOP_BASE      0xB1600000 // 0x56000000
#define IOP_PHY_BASE 0x56000000
typedef struct  {
		unsigned int  rGPACON;			// 00
		unsigned int  rGPADAT;
		unsigned int  rPAD1[2];
    
		unsigned int  rGPBCON;			// 10
		unsigned int  rGPBDAT;
		unsigned int  rGPBUP;
		unsigned int  rPAD2;
    
		unsigned int  rGPCCON;			// 20
		unsigned int  rGPCDAT;
		unsigned int  rGPCUP;
		unsigned int  rPAD3;
    
		unsigned int  rGPDCON;			// 30
		unsigned int  rGPDDAT;
	    unsigned int  rGPDUP; 
	    unsigned int  rPAD4;
    
		unsigned int  rGPECON;			// 40
		unsigned int  rGPEDAT;
		unsigned int  rGPEUP;
		unsigned int  rPAD5;
    
		unsigned int  rGPFCON;			// 50
		unsigned int  rGPFDAT;
		unsigned int  rGPFUP; 
		unsigned int  rPAD6;
    
		unsigned int  rGPGCON;			// 60
		unsigned int  rGPGDAT;
		unsigned int  rGPGUP; 
		unsigned int  rPAD7;
    
		unsigned int  rGPHCON;			// 70
		unsigned int  rGPHDAT;
		unsigned int  rGPHUP; 
		unsigned int  rPAD8;
    
		unsigned int  rMISCCR;			// 80
		unsigned int  rDCKCON;		
		unsigned int  rEXTINT0;
		unsigned int  rEXTINT1;		
		unsigned int  rEXTINT2;			// 90
		unsigned int  rEINTFLT0;
		unsigned int  rEINTFLT1;
		unsigned int  rEINTFLT2;
		unsigned int  rEINTFLT3;		// A0
		unsigned int  rEINTMASK;
		unsigned int  rEINTPEND;
		unsigned int  rGSTATUS0;		// AC
		unsigned int  rGSTATUS1;		// B0
		unsigned int  rGSTATUS2;		// B4 ;;; SHL
		unsigned int  rGSTATUS3;		// B8
		unsigned int  rGSTATUS4;		// BC
	
		unsigned int  rFLTOUT;			// C0
		unsigned int  rDSC0;
		unsigned int  rDSC1;
		unsigned int  rMSLCON;

		unsigned int  rGPJCON;			// D0
		unsigned int  rGPJDAT;
		unsigned int  rGPJUP;
		unsigned int  rPAD9;
	
}IOPreg;  


volatile IOPreg *v_pIOPRegs;


/********************************************************
 *	Name:		SimpleMoving.c							*
 *	Purpose:	Test LM629 electrical circuit			*
 *	Author:		Wang Yi									*
 *	Date:		October 12 2011							*
 ********************************************************
 */
typedef unsigned long       DWORD;
typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;

#define LOWORD(l)           ((WORD)(l))
#define HIWORD(l)           ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w)           ((BYTE)(w))
#define HIBYTE(w)           ((BYTE)(((WORD)(w) >> 8) & 0xFF))
#define MAKEDWORD(a, b)		((DWORD)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
//==============================================接口宏定义
//# ARM9 GPIO #
/*#define GPG3_OUT (1<<(3*2))
#define GPG11_OUT (1<<(11*2))
#define GPG12_OUT (1<<(12*2))
#define GPG10_OUT (1<<(10*2))
#define GPG9_IN ~(3<<9)
#define GPG7_OUT (1<<(7*2))
*/
#define GPF_OUT 0x5555
#define GPF_IN 0x0000
/*
#define GCON (v_pIOPRegs->rGPGCON)
#define GDAT (v_pIOPRegs->rGPGDAT)
#define FCON (v_pIOPRegs->rGPFCON)
#define FDATA (v_pIOPRegs->rGPFDAT)

#define CONTROL_PIN_MODE GCON
#define CONTROL_PIN_DATA GDATA
#define DATA_PORT_MODE FCON
#define DATA_PORT_DATA FDATA
  */
// # LM629 #
//**pin**
/*
#define CHIP_SELECT_PIN_MODE GPG3_OUT
#define PORT_SELECT_PIN_MODE GPG10_OUT
#define READ_PIN_MODE GPG11_OUT
#define WRITE_PIN_MODE GPG12_OUT
#define RESET_PIN_MODE GPG7_OUT
#define HOST_INTERRUPT_PIN_MODE GPG9_IN

#define CHIP_SELECT (~(1<<3))
#define COMMAND_PORT_SELECT (~(1<<10))
#define DATA_PORT_SELECT (1<<10)
#define READ_ENABLE (~(1<<11))
#define READ_DISABLE (1<<11)
#define WRITE_ENABLE (~(1<<12))
#define WRITE_DISABLE (1<<12)
#define RESET_ENABLE (~(1<<7)) 
#define RESET_DISABLE (1<<7) 
#define HOST_INTERRUPT_ENABLE (1<<9)
#define HOST_INTERRUPT_DISABLE (~(1<<9)) 
*/
#define CONTROL_PIN_MODE (v_pIOPRegs->rGPGCON)
#define CONTROL_PIN_DATA (v_pIOPRegs->rGPGDAT)
#define DATA_PORT_MODE (v_pIOPRegs->rGPFCON)
#define DATA_PORT_DATA (v_pIOPRegs->rGPFDAT)

#define	INPUT 0
#define	OUTPUT 1
#define CHIP_SELECT_PIN 3
#define PORT_SELECT_PIN 10
#define READ_PIN 11
#define WRITE_PIN 12
#define RESET_PIN 7
#define HOST_INTERRUPT_PIN 9

#define CHIP_SELECT 0
#define CHIP_UNSELECT 1
#define COMMAND_PORT_SELECT 0
#define DATA_PORT_SELECT 1
#define READ_ENABLE 0
#define READ_DISABLE 1
#define WRITE_ENABLE 0
#define WRITE_DISABLE 1
#define RESET_ENABLE 0 
#define RESET_DISABLE 1 
#define HOST_INTERRUPT_ENABLE 1
#define HOST_INTERRUPT_DISABLE 0

//===============================================================
//**command**
#define COMMAND_RESET 0x00
#define COMMAND_RSTI  0x1D
#define COMMAND_LFIL 0x1E
#define COMMAND_UDF 0x04
#define COMMAND_LTRJ 0x1F
#define COMMAND_STT 0x01
#define COMMAND_DFH 0x02
#define COMMAND_MSKI 0x1C
#define COMMAND_RDRP 0x0A
#define COMMAND_RDRV 0x0B
#define COMMAND_RDSIGS 0x0C
#define COMMAND_RDIP  0x09
#define COMMAND_RDDP 0x08
#define COMMAND_RDRP 0x0A

//===================================================用户设定的参数
#define ENCODER_LINE 500
#define SYSTEM_LINE 4*ENCONDER_LINE
#define FREQUENCY_CLOCK 8000000
#define SAMPLE_INTERVAL 2048/FREQUENCY_CLOCK
#define WORD_MAX 65536
#define PI 3.14159


#define SET_FILTER  0x000E
#define KP	0x059A
#define KI		0x0110
#define KD	0x0100
#define IL	0x0000

#define SET_TROJECTORY 0x002A
#define PO 0x000020CF
#define SP  0x0000516E
#define AC 0x00020202

//===================================================================



// *** Declarations ***

// *** Functions ***
// # LM629 #
void hostPortInitialization();
void writeByte(BYTE xByte);
void setControlBite(int pin, BOOL onOff);
void writeCommandByte(BYTE xCommand);
void writeDataByte(BYTE xData);
BYTE readByte();
BYTE readPin( int pin );
BYTE readStatusByte();
BYTE readDataByte();
void hardwareLm629Reset();
void checkNotBusy();
void maskInterrupt();
void loadFilterParameters( 	WORD xLfplData,	WORD xKp, 
							WORD xKi, WORD xKd,
							WORD xIl);	//LFIL
void updateFilter();		//UDF
void loadTrajectoryParameters(	WORD xLtrjData, DWORD xAc,
								DWORD xSp, DWORD xPo);	//LTRJ
void startMotion();		//STT
void defineHome();		//DFH
void resetInterrupts();
void waitSeconds();
void maskInterruputs();
void writeWord(WORD xWord);
void writeCommandWord( WORD xCommandWord);
void writeDataWord( WORD xDataWord);
void writeDataDword( DWORD xDataDword);
void readDesiredPosition ();
void readRealPosition();

void delay_us(int n);
void delay_ms(DWORD tmp_time) ;
int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...);



// LM629TestV0.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "LM629TestV0.h"
#include "afxwin.h"

int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{
 	// TODO: Place code here.

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


//=========================================================主程序
//	MessageBox( NULL, TEXT("hello word"), TEXT("hello"), MB_OK);
	hostPortInitialization();
	setControlBite( CHIP_SELECT_PIN, CHIP_SELECT);
	
//	writeCommandByte(COMMAND_RESET);
//	setControlBite( WRITE_PIN, WRITE_DISABLE);
//	checkNotBusy();
//	readStatusByte();								//6
//---------------------------------------------------------初始化
/*	setControlBite( RESET_PIN, RESET_DISABLE);
	MessageBox( NULL, TEXT("RESET_DISABLE"), TEXT("hello"), MB_OK);
	setControlBite( CHIP_SELECT_PIN, CHIP_SELECT);
	MessageBox( NULL, TEXT("CHIP_SELECT"), TEXT("hello"), MB_OK);
	setControlBite( WRITE_PIN, WRITE_ENABLE);
	MessageBox( NULL, TEXT("WRITE_ENABLE"), TEXT("hello"), MB_OK);
	setControlBite( READ_PIN, READ_ENABLE);
	MessageBox( NULL, TEXT("READ_ENABLE"), TEXT("hello"), MB_OK);

	setControlBite( PORT_SELECT_PIN, COMMAND_PORT_SELECT );	//如果通过,则下一步
	MessageBox( NULL, TEXT("COMMAND_PORT_SELECT"), TEXT("hello"), MB_OK); //
*/
//--------------------------------------------------------------调试到此
	/*hardwareLm629Reset();
	checkNotBusy();
	writeCommandByte(COMMAND_RESET);
	MessageBox( NULL, TEXT("COMMAND_RESET"), TEXT("hello"), MB_OK);
	checkNotBusy();

	writeCommandByte(COMMAND_RSTI);
	MessageBox( NULL, TEXT("COMMAND_RSTI"), TEXT("hello"), MB_OK);
	checkNotBusy();


	writeDataWord(0x0000);  
	MessageBox( NULL, TEXT("COMMAND_RSTI2"), TEXT("hello"), MB_OK);
*/
	BYTE interruptResetStatusByte = 0x55;
	while ((interruptResetStatusByte != 0xC0) && (interruptResetStatusByte != 0x80))
    {
		byte systemResetStatusByte = 0x55;
		while ((systemResetStatusByte != 0xC4) && (systemResetStatusByte != 0x84) )
		{
			hardwareLm629Reset();
			systemResetStatusByte = readStatusByte();
//			MessageBox( NULL, TEXT("内while循环"), TEXT("hello"), MB_OK);  
		}
		writeCommandByte(COMMAND_RSTI);
		writeDataWord(0x0000);
		interruptResetStatusByte = readStatusByte();
//		MessageBox( NULL, TEXT("外while循环"), TEXT("hello"), MB_OK);  
    }
//	MessageBox( NULL, TEXT("after initialization"), TEXT("hello"), MB_OK);  

	defineHome();
//--------------------------------------------------------load Filter paraments
	loadFilterParameters(SET_FILTER, KP, KI, KD,IL);
	updateFilter();
//	MessageBox( NULL, TEXT("after loadFilterParameters"), TEXT("hello"), MB_OK);  
//-------------------------------------------------------load TRAJECTORY paraments and start motor
	loadTrajectoryParameters(SET_TROJECTORY, AC, SP, PO);
//	MessageBox( NULL, TEXT("after loadTrajectoryParameters"), TEXT("hello"), MB_OK);  
	startMotion();
	MessageBox( NULL, TEXT("after startMotion"), TEXT("hello"), MB_OK);  
//	checkNotBusy();
	readDesiredPosition();
	readRealPosition();
//=================================================================HOST PORT TEST
/*	v_pIOPRegs->rGPFCON = 0x5555;
//	v_pIOPRegs->rGPFDAT = 0xff;
//	v_pIOPRegs->rGPGCON |= ( 1<<(2*11) );
//	v_pIOPRegs->rGPGCON = 0x0;
//	v_pIOPRegs->rGPGDAT = 0x0;
//	v_pIOPRegs->rGPGDAT &= ~( 1<<11 );
	writeByte(0x30);
	hostPortInitialization();
	setControlBite(CHIP_SELECT_PIN, CHIP_SELECT);
	setControlBite(READ_PIN, READ_DISABLE);
	setControlBite(WRITE_PIN, WRITE_ENABLE);
	setControlBite(WRITE_PIN, WRITE_ENABLE);
	setControlBite(PORT_SELECT_PIN_MODE, COMMAND_PORT_SELECT);
	setControlBite(HOST_INTERRUPT_PIN_MODE, HOST_INTERRUPT_ENABLE);
	setControlBite(RESET_PIN_MODE, RESET_ENABLE);
*/
//	================================================================ END OF THE TEST
	return 0;
}

//===================================接口函数
void hostPortInitialization()
{
//	CONTROL_PIN_MODE = ((CONTROL_PIN_MODE | 0x01540040) & 0xFEABFFBF);
//	CONTROL_PIN_DATA |= 0x1E88;
	CONTROL_PIN_MODE = 0x0;
	CONTROL_PIN_DATA = 0x0;
	setControlBite( RESET_PIN, RESET_DISABLE);
	setControlBite( CHIP_SELECT_PIN, CHIP_UNSELECT);
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	setControlBite( READ_PIN, READ_DISABLE);
	setControlBite( WRITE_PIN, COMMAND_PORT_SELECT);
	DATA_PORT_MODE = 0x5555;
	DATA_PORT_DATA = 0x0;
}
void writeByte(BYTE xByte)
{
	DATA_PORT_MODE = GPF_OUT;
	DATA_PORT_DATA = xByte;
//	setControlBite( READ_PIN, READ_DISABLE );
//	setControlBite( WRITE_PIN, WRITE_ENABLE);
//	delay_ms(1);
//	setControlBite( WRITE_PIN, WRITE_DISABLE);

//	setControlBite( WRITE_PIN, WRITE_DISABLE);
}	
void setControlBite(int pin, BOOL onOff)
{
	/*if ( pin == HOST_INTERRUPT_PIN ) {
		CONTROL_PIN_MODE &= ~(3<<pin);
	}
	else*/ CONTROL_PIN_MODE |= ( 1<<(2*pin) );
	
	if (onOff == 1) {
		CONTROL_PIN_DATA |= ( 1<<pin );
	}
	else CONTROL_PIN_DATA &= ~( 1<<pin );

}
//=================================================
void writeCommandByte(BYTE xCommand)
{
	checkNotBusy();

	setControlBite( READ_PIN, READ_DISABLE );
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	setControlBite(PORT_SELECT_PIN, COMMAND_PORT_SELECT);	//PS command
//	setControlBite( WRITE_PIN, WRITE_ENABLE);
//	delay_ms(1);
//	setControlBite( WRITE_PIN, WRITE_DISABLE);
//	setControlBite( WRITE_PIN, WRITE_DISABLE);

	writeByte( xCommand );
	setControlBite( WRITE_PIN, WRITE_ENABLE);
	delay_us(1);
	setControlBite( WRITE_PIN, WRITE_DISABLE);
}
void writeDataByte(BYTE xData)
{
	checkNotBusy();

	setControlBite( READ_PIN, READ_DISABLE );
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	setControlBite(PORT_SELECT_PIN, DATA_PORT_SELECT);	//ps data write
	writeByte( xData );
	setControlBite( WRITE_PIN, WRITE_ENABLE);
	delay_us(1);
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	delay_us(1);
}
void writeWord(WORD xWord)
{
	BYTE xCommand_H, xCommand_L;
	xCommand_H = HIBYTE( xWord );
	xCommand_L = LOBYTE( xWord );
	writeByte(xCommand_H);
	writeByte(xCommand_H);
}
void writeCommandWord( WORD xCommandWord )
{
	checkNotBusy();

	BYTE xCommand_H, xCommand_L;
	xCommand_H = HIBYTE( xCommandWord );
	xCommand_L = LOBYTE( xCommandWord );

	setControlBite( READ_PIN, READ_DISABLE );
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	setControlBite(PORT_SELECT_PIN, COMMAND_PORT_SELECT);	//ps Command write
	
	writeByte( xCommand_H );
	setControlBite( WRITE_PIN, WRITE_ENABLE);
	delay_us(1);
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	delay_us(1);

	writeByte( xCommand_L );
	setControlBite( WRITE_PIN, WRITE_ENABLE);
	delay_us(1);
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	delay_us(1);

}
void writeDataWord( WORD xDataWord)
{
	checkNotBusy();

	BYTE xData_H, xData_L;
	xData_H = HIBYTE( xDataWord );
	xData_L = LOBYTE( xDataWord );

	setControlBite( READ_PIN, READ_DISABLE );
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	setControlBite(PORT_SELECT_PIN, DATA_PORT_SELECT);	//ps data write
	
	writeByte( xData_H );
	setControlBite( WRITE_PIN, WRITE_ENABLE);
	delay_us(1);
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	delay_us(1);


	writeByte( xData_L );
	setControlBite( WRITE_PIN, WRITE_ENABLE);
	delay_us(1);
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	delay_us(1);

}

void writeDataDword( DWORD xDataDword)
{
	WORD xData_H, xData_L;
	xData_H = HIWORD( xDataDword );
	xData_L  = LOWORD( xDataDword );
	writeDataWord(xData_H);
	writeDataWord(xData_L);
}

BYTE readByte()
{
//	setControlBite( WRITE_PIN, WRITE_DISABLE);
//	setControlBite( READ_PIN, READ_ENABLE);
	DATA_PORT_MODE = GPF_IN;
//	setControlBite( READ_PIN, READ_DISABLE);
	BYTE xReadData;
	xReadData = DATA_PORT_DATA;
	return xReadData;

}
BYTE readPin( int pin )					//has  problems
{
	CONTROL_PIN_MODE &= ~(3<<pin);
	return CONTROL_PIN_DATA;
}
BYTE readStatusByte()
{
	BYTE xStatusByte;
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	setControlBite(PORT_SELECT_PIN, COMMAND_PORT_SELECT);	//ps status
	delay_us(1);
	setControlBite( READ_PIN, READ_ENABLE);
	delay_us(1);
	xStatusByte = readByte();

	setControlBite( READ_PIN, READ_DISABLE);
	delay_us(1);
//	const unsigned short * umsg;
//	sprintf(Buffer, "read data %d", xStatusByte);
//	MessageBox( NULL, Buffer, TEXT("hello"), MB_OK);
//	AfxMessageBox(L"1111"); 
//	MessageBox(Buffer, "消息框标题", MB_OK);
//	sprintf(umsg, "message:%d ",xStatusByte);
//	MessageBox( NULL, umsg, TEXT("hello"), MB_OK);
//	MessageBoxPrintf (TEXT ("read status"), 
//		TEXT ("the status byte: 0x%02x"), xStatusByte);

	return xStatusByte;
}
BYTE readDataByte()
{
	checkNotBusy();

	BYTE xDataByte;
	setControlBite( WRITE_PIN, WRITE_DISABLE);
	setControlBite(PORT_SELECT_PIN, DATA_PORT_SELECT);	//ps data read
	delay_us(1);
	setControlBite( READ_PIN, READ_ENABLE);
	delay_us(1);
	xDataByte = readByte();
	setControlBite( READ_PIN, READ_DISABLE);
	delay_us(1);
	return xDataByte;
}
WORD readDataWord()
{
	checkNotBusy();

	BYTE xDataByte_H, xDataByte_L;
	setControlBite( WRITE_PIN, WRITE_DISABLE);

	setControlBite(PORT_SELECT_PIN, DATA_PORT_SELECT);	//ps data read
	//delay_us(1);
	setControlBite( READ_PIN, READ_ENABLE);
	delay_us(1);
	xDataByte_H = readByte();
	setControlBite( READ_PIN, READ_DISABLE);
	delay_us(1);

	setControlBite( READ_PIN, READ_ENABLE);
	delay_us(1);
	xDataByte_H = readByte();
	setControlBite( READ_PIN, READ_DISABLE);
	delay_us(1);
	
	WORD xDataWord;
	xDataWord = MAKEWORD ( xDataByte_H, xDataByte_L );
	return xDataWord;
}
DWORD readDataDword()
{
	WORD xData_H, xData_L;
	DWORD xData;
	xData_H =  readDataWord();

	xData_L  =  readDataWord();
	xData = MAKEDWORD( xData_H, xData_L );
	return xData;
}
void hardwareLm629Reset()
{
	setControlBite( RESET_PIN, RESET_ENABLE );
	delay_us(100);
	setControlBite( RESET_PIN, RESET_DISABLE);
	delay_us(2000);
}
void checkNotBusy()
{
	BYTE xStatusByte = readStatusByte();
//	MessageBox( NULL, TEXT("checkNotBusy0"), TEXT("hello"), MB_OK);
	while ((xStatusByte & 0x01) != 0x00)
	{
		xStatusByte = readStatusByte();
//		MessageBox( NULL, TEXT("checkNotBusy1"), TEXT("hello"), MB_OK);
	}
	//MessageBox( NULL, TEXT("checkNotBusy2"), TEXT("hello"), MB_OK);
}
void maskInterrupt()
{
	writeCommandByte( COMMAND_MSKI );
}
void loadFilterParameters( WORD xLfplData,	WORD xKp, 
							WORD xKi, WORD xKd,
							WORD xIl)	//LFIL
{
	writeCommandByte( COMMAND_LFIL );
	writeDataWord( xLfplData );
	if ( xLfplData & (1<<3)  )
	{
		writeDataWord( xKp );
		MessageBox( NULL, TEXT("after LOAD Kp PARAMENTS"), TEXT("hello"), MB_OK);  

	}
	if ( xLfplData & (1<<2) )
	{
		writeDataWord( xKi);
		MessageBox( NULL, TEXT("after LOAD Ki PARAMENTS"), TEXT("hello"), MB_OK);  
		
	}
	if ( xLfplData & (1<<1)  )
	{
		writeDataWord( xKd);
		MessageBox( NULL, TEXT("after LOAD Kd PARAMENTS"), TEXT("hello"), MB_OK);  

	}
	if ( xLfplData & (1<<0) )
	{
		writeDataWord( xIl );
		MessageBox( NULL, TEXT("after LOAD Il PARAMENTS"), TEXT("hello"), MB_OK);  

	}
}
void updateFilter()		//UDF
{
	writeCommandByte( COMMAND_UDF );
}
void loadTrajectoryParameters(	WORD xLtrjData, DWORD xAc,
								DWORD xSp, DWORD xPo)	//LTRJ
{
	writeCommandByte( COMMAND_LTRJ );
	writeDataWord( xLtrjData );
	if ( xLtrjData & (1<<11) )
	{
		writeDataDword( xAc);
		writeDataDword( xSp);
//		MessageBox( NULL, TEXT("after LOAD SPEED MODE PARAMENTS"), TEXT("hello"), MB_OK);  
	}
	else 
	{
		writeDataDword( xAc);
		writeDataDword( xSp);
		writeDataDword( xPo );
//		MessageBox( NULL, TEXT("after LOAD POSITION MODE PARAMENTS"), TEXT("hello"), MB_OK);  
	}
}
void startMotion()		//STT
{
	writeCommandByte( COMMAND_STT );
}
void readDesiredPosition ()
{
	writeCommandByte( COMMAND_RDDP);
	unsigned long xDataDP;
	xDataDP = 	readDataDword();
	MessageBoxPrintf (TEXT ("read status"), 
		TEXT ("the desired position: 0x%08x"), xDataDP);

}
void readRealPosition()
{
	writeCommandByte( COMMAND_RDRP);
	unsigned long xDataRP;
	xDataRP = 	readDataDword();
	MessageBoxPrintf (TEXT ("read status"), 
		TEXT ("the real position: 0x%08x"), xDataRP);
}
void defineHome()		//DFH
{
	writeCommandByte( COMMAND_DFH );
}
void maskInterruputs()
{
	writeCommandByte( COMMAND_MSKI );	
}
void resetInterrupts()
{
	writeCommandByte( COMMAND_RSTI );
}

void delay_us(int n)
{ 
	LARGE_INTEGER litmp; 
	LONGLONG QPart1,QPart2; 
	double dfMinus, dfFreq, dfTim; 
	if(QueryPerformanceFrequency(&litmp)==FALSE) 
	   { 
		   MessageBox(NULL,TEXT("Error:QueryPerformanceFrequency"),TEXT("Error"),MB_OK); 
		   return;
	   } 
	dfFreq = (double)litmp.QuadPart; 
	QueryPerformanceCounter(&litmp); 
	QPart1 = litmp.QuadPart; 
	do 
	 { 
	   QueryPerformanceCounter(&litmp); 
	   QPart2=litmp.QuadPart; 
	   dfMinus=(double)(QPart2-QPart1); 
	   dfTim=dfMinus/dfFreq; 
	 }while(dfTim <0.000001*n); 
}
//毫秒级的延时函数
void   delay_ms(DWORD   tmp_time)   
{   
	DWORD   start;   
	DWORD   time_i=0;   
	start=GetTickCount();   
	while(time_i<=tmp_time)   
	{   
	 time_i=GetTickCount()-start;   
	}  
}

int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
	TCHAR   szBuffer [1024] ;
	va_list pArgList ;

	// The va_start macro (defined in STDARG.H) is usually equivalent to:
	// pArgList = (char *) &szFormat + sizeof (szFormat) ;

	va_start (pArgList, szFormat) ;

	// The last argument to wvsprintf points to the arguments

	_vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR), szFormat, pArgList) ;

	// The va_end macro just zeroes out pArgList for no good reason
	va_end (pArgList) ;
	return MessageBox (NULL, szBuffer, szCaption, 0|1) ;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值