#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) ;
}