📄 dcmotor.cpp
字号:
#include "windows.h"
#include "s2410.h"
#define DCMOTOR_IOCTRL_RUN 1
#define DCMOTOR_IOCTRL_STOP 2
#define DCM_TCNTB0 16384
volatile PWMreg *g_pPWMreg=NULL;
volatile IOPreg *g_pIOPregs = NULL;
typedef struct{
unsigned int a;
}EXIO_TEST;
EXIO_TEST *exio=NULL;
bool
DllEntry(HANDLE hinstdll,
DWORD dwreason,
LPVOID lpvreserved )
{
return true;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
bool DCM_Close(DWORD hopencontext)
{
bool bret = true;
return bret;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
bool DCM_Deinit(DWORD hdevicecontext)
{
bool bret = true;
return bret;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD DCM_Init(DWORD dwcontext)
{
g_pIOPregs = (volatile IOPreg *)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
if (g_pIOPregs == NULL)
{
RETAILMSG(1,(TEXT("For SPI_IOPregs : VirtualAlloc failed!\r\n")));
return 0;
}
else
{
if (!VirtualCopy((PVOID)g_pIOPregs, (PVOID)(IOP_BASE), sizeof(IOPreg), PAGE_READWRITE | PAGE_NOCACHE))
{
RETAILMSG(1,(TEXT("For SPI_IOPregs: VirtualCopy failed!\r\n")));
return 0;
}
}
g_pPWMreg=(PWMreg *)VirtualAlloc(0,sizeof(PWMreg),MEM_RESERVE, PAGE_NOACCESS);
if(!g_pPWMreg)
{
RETAILMSG(1,(TEXT("SPIDRV.DLL: PWMreg virualalloc failed\r\n")));
return 0;
}
if(!VirtualCopy((PVOID)g_pPWMreg,(PVOID)(PWM_BASE),sizeof(PWMreg),PAGE_READWRITE | PAGE_NOCACHE ))
{
RETAILMSG(1,(TEXT("SPIDRV.DLL:PWMreg virtualcopy failed! \r\n")));
return 0;
}
g_pPWMreg->rTCFG0 &= ~(0x00ff0000);
g_pPWMreg->rTCFG0 |= 2;
g_pPWMreg->rTCFG1 &= ~(0xF);
g_pPWMreg->rTCNTB0=16384;
g_pPWMreg->rTCMPB0=16384/2;
g_pPWMreg->rTCON &= ~(0xf);
g_pPWMreg->rTCON |= 0x2;
g_pPWMreg->rTCON &= ~(0xf);
g_pPWMreg->rTCON |= 0x19;
g_pIOPregs->rGPBCON &= ~0xF;
g_pIOPregs->rGPBCON |= 0xA;
return 1;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD DCM_IOControl(
DWORD Handle,
DWORD dwIoControlCode,
PBYTE pInBuf,
DWORD nInBufSize,
PBYTE pOutBuf,
DWORD nOutBufSize,
PDWORD pBytesReturned
)
{
switch(dwIoControlCode)
{
case DCMOTOR_IOCTRL_RUN:
RETAILMSG(1,(TEXT("DCMOTOR DLL IOCONTROL\r\n")));
g_pPWMreg->rTCMPB0 = DCM_TCNTB0/2 + (*((int *)pInBuf))*(DCM_TCNTB0/1024);
break;
case DCMOTOR_IOCTRL_STOP :
g_pPWMreg->rTCMPB0=DCM_TCNTB0/2+0;
break;
default :
return 0;
}
return 1;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD DCM_Open(DWORD hdevicecontext, DWORD accesscode, DWORD sharemode)
{
DWORD dwret = 0;
dwret = 1; // have to make non-zero for this call to succeed.
return dwret;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void DCM_Powerdown(DWORD hdevicecontext)
{
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void DCM_Powerup(DWORD hdevicecontext)
{
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD DCM_Read(DWORD hopencontext,LPVOID pbuffer, DWORD count)
{
DWORD dwret = 0;
return dwret;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD DCM_Seek(DWORD hopencontext, long amount, DWORD type)
{
DWORD dwret = 0;
return dwret;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
DWORD DCM_Write(DWORD hopencontext, LPVOID psourcebytes, DWORD numberofbytes)
{
DWORD dwret = 0;
return dwret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -