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

📄 mdd.c

📁 本驱动程序是基于WinCE系统的s3c2410的SPI驱动源码
💻 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 + -