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

📄 pwmdirver.cpp

📁 pwmdirver
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>
#include <tchar.h>
#include <nkintr.h>
#include <oalintr.h>
#include <ceddk.h>
#include <windev.h>
#include <devload.h>
#include <notify.h>
#include <Pkfuncs.h>
#include<Winbase.h>
#ifdef __cplusplus
extern "C"
{
#endif
BOOL VirtualCopy( LPVOID, LPVOID, DWORD, DWORD );

#ifdef __cplusplus
}
#endif

#define IOP_BASE      0xB1600000 // 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
unsigned int  rGSTATUS3;  // B8
unsigned int  rGSTATUS4;*/  // BC
}IOPreg;  

#define CLKPWR_BASE    0xB0C00000 // 0x4C000000
typedef struct {
    unsigned long       rLOCKTIME;//00
    unsigned long       rMPLLCON;//04
    unsigned long       rUPLLCON;//08
    unsigned long       rCLKCON;//0C
    unsigned long       rCLKSLOW;//10
    unsigned long       rCLKDIVN;//14
}CLKPWRreg;

#define PWM_BASE      0xB1100000 // 0x51000000
typedef struct  {
    unsigned int  rTCFG0;//00
    unsigned int  rTCFG1;//04
    unsigned int  rTCON;//08
    unsigned int  rTCNTB0;//0C
    unsigned int  rTCMPB0;//10
    unsigned int  rTCNTO0;//14
  //  unsigned int  rTCNTB1;
   // unsigned int  rTCMPB1;
  //  unsigned int  rTCNTO1;
  //  unsigned int  rTCNTB2;
   /// unsigned int  rTCMPB2;
   // unsigned int  rTCNTO2;
  //  unsigned int  rTCNTB3;
   // unsigned int  rTCMPB3;
   // unsigned int  rTCNTO3;
  //  unsigned int  rTCNTB4;
  //  unsigned int  rTCNTO4;
}PWMreg ;

//#define UART0_BASE      0xB1000000 // 0x50000000
//#define UART1_BASE      0xB1004000
//#define UART2_BASE      0xB1008000
#define INT_BASE      0xB0A00000 // 0x4A000000
typedef struct  {
    unsigned int  rSRCPND;
    unsigned int  rINTMOD;
    unsigned int  rINTMSK;
    unsigned int  rPRIORITY;
    unsigned int  rINTPND;
    unsigned int  rINTOFFSET;
    unsigned int  rSUBSRCPND;
    unsigned int  rINTSUBMSK;
}INTreg; 

//BOOL WINAPI DllEntryPoint(HANDLE hinstDLL,DWORD dwReason,LPVOID lpvReserved);
DWORD PWM_Init (LPCTSTR pContext,LPCVOID lpvBusContext);
BOOL  PWM_Deinit (DWORD hDeviceContext);
DWORD PWM_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode);
BOOL PWM_Close(DWORD hOpenContext);
BOOL PWM_IOControl(DWORD hOpenContext,DWORD dwCode,PBYTE pBufIn,DWORD 
dwLenIn,PBYTE pBufOut,DWORD dwLenOut,PDWORD pdwActualOut);
void PWM_PowerUp(DWORD hDeviceContext);
void PWM_PowerDown(DWORD hDeviceContext);
DWORD PWM_Read(DWORD hOpenContext, LPVOID  pBuffer, DWORD Count);
DWORD PWM_Write(DWORD hOpenContext, LPVOID  pBuffer, DWORD Count);
DWORD PWM_Seek(DWORD hOpenContext,long Amount,WORD Type);
DWORD WINAPI ThreadIST(LPVOID a);
//void  SetupInterrupt(void); 
//DWORD WINAPI ThreadIST( LPVOID lpvParam );
//#include<s2410.h>
#include<CEDDK.h>
//链接ceddk.lib
#pragma comment(lib, "CEDDK.lib")
#pragma comment(lib, "corelibc.lib")
#pragma comment(lib, "LIBCD.lib")

//HANDLE g_hevInterrupt;
HANDLE g_htIST;
DWORD g_dwSysInt;
//HANDLE PWMIST;
//#define SYSINTR_DEVICES     8
//#define SYSINTR_FIRMWARE    (SYSINTR_DEVICES+8)
//#define SYSINTR_TIMER0 (SYSINTR_FIRMWARE+19)
DWORD   SysInt=SYSINTR_TIMER0; 
LPDWORD dwThreadID;
HANDLE Interruptevent;

//#define CLKPWR1   (*(volatile unsigned long *)PWM_CLKDIVN)
//#define CLKPWR2   (*(volatile unsigned long *)PWM_MPLLCON)
//#define IOP1      (*(volatile unsigned long *)PWM_GPBCON)
//#define IOP2      (*(volatile unsigned long *)PWM_GPBUP)
//#define PWM1      (*(volatile unsigned long *)PWM_TCFG0)
//#define PWM2      (*(volatile unsigned long *)PWM_TCFG1)
//#define PWM3      (*(volatile unsigned long *)PWM_TCNTB0)
//#define PWM4      (*(volatile unsigned long *)PWM_TCMPB0)
//#define PWM5      (*(volatile unsigned long *)PWM_TCON)
volatile IOPreg *v_pIOPRegs;
volatile CLKPWRreg *v_pCLKPWRegs;
volatile INTreg *v_pINTRegs;
volatile PWMreg *v_pPWMRegs;

//unsigned long     PWM_CLKDIVN;
//unsigned long     PWM_MPLLCON;
//unsigned long     PWM_GPBCON;
//unsigned long     PWM_GPBUP;
//unsigned long     PWM_TCFG0;
//unsigned long     PWM_TCFG1;
//unsigned long     PWM_TCNTB0;
//unsigned long     PWM_TCMPB0;
//unsigned long     PWM_TCON;
//PHYSICAL_ADDRESS CLKDIVN={0x4C000014,0};
//PHYSICAL_ADDRESS MPLLCON={0x4C000004,0};
//PHYSICAL_ADDRESS GPBCON = {0x56000010,0};
//PHYSICAL_ADDRESS GPBUP={0x56000018,0};
//PHYSICAL_ADDRESS TCFG0={0x51000000,0};
//PHYSICAL_ADDRESS TCFG1={0x51000004,0};
//PHYSICAL_ADDRESS TCNTB0={0x5100000C,0};
//PHYSICAL_ADDRESS TCMPB0={0x4C000010,0};
//PHYSICAL_ADDRESS TCON={0x4C000008,0};

BOOL WINAPI DllEntry(HANDLE hinstDLL,DWORD dwReason,LPVOID lpvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
RETAILMSG(1,(TEXT("STRINGS:PWM DLL_PROCESS_ATTACH\n")));
return TRUE; 

case DLL_THREAD_ATTACH:
RETAILMSG(1,(TEXT("STRINGS:PWM DLL_ THREAD _ATTACH\n")));
return TRUE;

case DLL_THREAD_DETACH:
RETAILMSG(1,(TEXT("STRINGS: PWM DLL_THREAD_DETACH \n")));
return TRUE;

case DLL_PROCESS_DETACH:
RETAILMSG(1,(TEXT("STRINGS: PWM DLL_ PROCESS _DETACH \n")));
return TRUE;

#ifdef UNDER_CE
  case DLL_PROCESS_EXITING:
RETAILMSG(1,(TEXT("STRINGS: PWM DLL_ PROCESS _ EXITING \n")));
break;
 case DLL_SYSTEM_STARTED:
RETAILMSG(1,(TEXT("STRINGS: PWM DLL_ SYSTEM _STARTED \n")));
break;
#endif
}
return TRUE;
}

//在PWM_Init函数中,首先声明一个事件,于PWM中断联系起来,这样,一旦TCNTBN
//为0时就会收到硬件发来的中断,在PWM_Init函数中的事件就会被触发
DWORD PWM_Init(LPCTSTR,LPCVOID lpvBusContext)
{
	   RETAILMSG (1,(TEXT("enter PWM_Init!\n\r")));
     DWORD dwRet=0;
    dwRet=1;
v_pIOPRegs = (volatile IOPreg*)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
     RETAILMSG (1,(TEXT("PWM_Init:11111!\n\r")));
if (v_pIOPRegs == NULL) 
{
     RETAILMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r")));
      return dwRet;
}
if (!VirtualCopy((PVOID)v_pIOPRegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE)) 
{
RETAILMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r")));
return dwRet;
}
RETAILMSG (1,(TEXT("v_pIOPRegs is mapped to %x\n\r"), v_pIOPRegs));




v_pCLKPWRegs = (volatile CLKPWRreg*)VirtualAlloc(0, sizeof(CLKPWRreg), MEM_RESERVE, PAGE_NOACCESS);
RETAILMSG (1,(TEXT("PWM_Init:22222!\n\r")));
if (v_pCLKPWRegs == NULL) 
{
     RETAILMSG (1,(TEXT("v_pCLKPWRegs is not allocated\n\r")));
      return dwRet;
}
if (!VirtualCopy((PVOID)v_pCLKPWRegs, (PVOID)CLKPWR_BASE, sizeof(CLKPWRreg), PAGE_READWRITE|PAGE_NOCACHE)) 
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -