?? mdd.c
字號:
//======================================================================
// Name : mdd.c
// Date : 2007/03/12
// Author :
// Comment:
// Version:
// History: 2007/03/12 Create
//======================================================================
#include <windows.h>
#include <types.h>
#include <tchar.h>
#include <cardserv.h>
#include <cardapi.h>
#include <tuple.h>
#include <devload.h>
#include <diskio.h>
#include <nkintr.h>
#include <oalintr.h>
#include <windev.h>
#include "s2410.h"
//#include "SPI.h"
#define PUBLIC
HANDLE g_hInstance;
extern volatile IOPreg * v_pIOPregs;
extern volatile SSPreg *v_pSSPregs;
extern BOOL SPI_InitAddrIO(VOID);
extern BOOL SPI_InitAddrSPI(VOID);
extern void InitSPI(void);
BOOL WINAPI
DllEntry(HANDLE hInstDLL,
DWORD dwReason,
LPVOID lpvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
g_hInstance = hInstDLL;
// RETAILMSG(1,(TEXT("PMSINGS: test=========ATTACH\n")));
DisableThreadLibraryCalls((HMODULE) hInstDLL);
return TRUE;
case DLL_THREAD_ATTACH:
// RETAILMSG(1,(TEXT("PMSINGS: DLL_THREAD_ATTACH\n")));
break;
case DLL_THREAD_DETACH:
// RETAILMSG(1,(TEXT("PMSINGS: DLL_THREAD_DETACH\n")));
break;
case DLL_PROCESS_DETACH:
// RETAILMSG(1,(TEXT("PMSINGS: DLL_PROCESS_DETACH\n")));
break;
#ifdef UNDER_CE
case DLL_PROCESS_EXITING:
// RETAILMSG(1,(TEXT("PMSINGS: DLL_PROCESS_EXITING\n")));
break;
case DLL_SYSTEM_STARTED:
// RETAILMSG(1,(TEXT("PMSINGS: DLL_SYSTEM_STARTED\n")));
break;
#endif
}
return TRUE;
}
DWORD
SPI_Init(DWORD dwContext)
{
// RETAILMSG(1,(TEXT("PMSINGS: SPI_ INIT\n")));
SPI_InitAddrIO();
SPI_InitAddrSPI();
InitSPI();
return 0x01;
}
DWORD
SPI_Close(DWORD Handle)
{
return TRUE;
}
//
// Device deinit - devices are expected to close down.
// The device manager does not check the return code.
//
DWORD SPI_Deinit(
DWORD dwContext // future: pointer to the per disk structure
)
{
return TRUE;
}
//
// Returns handle value for the open instance.
//
DWORD SPI_Open(
DWORD dwData,
DWORD dwAccess,
DWORD dwShareMode
)
{
return 1;
}
DWORD SPI_IOControl(
DWORD Handle,
DWORD dwIoControlCode,
PBYTE pInBuf,
DWORD nInBufSize,
PBYTE pOutBuf,
DWORD nOutBufSize,
PDWORD pBytesReturned
)
{
return FALSE;
}
DWORD SPI_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
return 0;
}
DWORD SPI_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{
// Add SPI write to MCP41010
PUCHAR temp = (PUCHAR)pBuffer;
// Set CS to low to activate MCP41010
v_pIOPregs->rGPGDAT &= ~(0x1 << 3);
// Check the status of Transfer Ready flag(READY=1) ,and then write data to SPTDAT0
while( (v_pSSPregs->rSPSTA0 & 0x01) != 1 );
v_pSSPregs->rSPTDAT0 = 0x11; // Write MCP41010 write command
while( (v_pSSPregs->rSPSTA0 & 0x01) != 1 );
v_pSSPregs->rSPTDAT0 = *temp; // Write Potentiometer value
// Wait to complete write data
while( (v_pSSPregs->rSPSTA0 & 0x01) != 1 );
// Set CS to high to deactivate MCP41010
v_pIOPregs->rGPGDAT |= (0x1 << 3);
return 1;
}
DWORD SPI_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
return 0;
}
void SPI_PowerUp(void)
{
return;
}
void SPI_PowerDown(void)
{
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -