📄 time2test.cpp
字号:
// Time2Test.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "Time2Test.h"
#include <windows.h>
#include <types.h>
#include <ceddk.h>
#include <memory.h>
#include <nkintr.h>
#include "D:\\WINCE420\\PLATFORM\\SMDK2410\\INC\\oalintr.h"
#include "D:\\WINCE420\\PLATFORM\\SMDK2410\\INC\\drv_glob.h"
#include "D:\\WINCE420\\PLATFORM\\SMDK2410\\INC\\s2410.h"
HWND g_hwnd;
volatile PWMreg *v_pPWMregs;
volatile INTreg *v_pINTregs;
HANDLE g_hevInterrupt=NULL;
HANDLE g_hThread=NULL;
BOOL g_Run=false;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// This is an example of an exported variable
TIME2TEST_API int nTime2Test=0;
// This is an example of an exported function.
TIME2TEST_API int fnTime2Test(void)
{
return 42;
}
// This is the constructor of a class that has been exported.
// see Time2Test.h for the class definition
CTime2Test::CTime2Test()
{
return;
}
////////////////////////////
// pwm,int的初始化
extern "C" TIME2TEST_API void Time1_Init(void)
{
v_pPWMregs->rTCFG0 &= ~0xff; //clear
v_pPWMregs->rTCFG0 |= 0x40; //prescaler value = 64+1
v_pPWMregs->rTCFG1 &= ~0x0f; //1/2
// 50750000/64+1/1/2=390385;390385/5=78076;一秒产生5次中断
v_pPWMregs->rTCNTB1=390385;
v_pPWMregs->rTCMPB1=0;
// v_pPWMRegs->rTCON=0x50000a;
v_pPWMregs->rTCON &= ~0x000f00; //clear time1 TCON
v_pPWMregs->rTCON = 0x500a00; //1010
// v_pPWMregs->rTCON &= ~0x000200; //clear update bit
// v_pPWMregs->rTCON |= 0x500100; // no operation 1001
v_pPWMregs->rTCON = 0x500900;
if(v_pINTregs->rINTPND &BIT_TIMER1)
{
v_pINTregs->rSRCPND = BIT_TIMER1;
}
v_pINTregs->rINTMSK &= (~(1<<11)); //INT_TIME1 enable
RETAILMSG(1,(TEXT("pwm,int Init")));
}
extern "C" TIME2TEST_API int ProfessInit(HWND hwnd)
{
g_hwnd=hwnd; //传窗口句柄
if(v_pPWMregs == NULL)
{
v_pPWMregs = (volatile PWMreg *)VirtualAlloc(0,sizeof(PWMreg),MEM_RESERVE, PAGE_NOACCESS);
if(v_pPWMregs == NULL)
{
RETAILMSG(1,(TEXT("For PWMreg: VirtualAlloc failed!\r\n")));
return 0;
}
else
{
if(!VirtualCopy((PVOID)v_pPWMregs,(PVOID)(PWM_BASE),sizeof(PWMreg),PAGE_READWRITE | PAGE_NOCACHE ))
{
RETAILMSG(1,(TEXT("For PWMreg: VirtualCopy failed!\r\n")));
return 0;
}
}
}
if(v_pINTregs == NULL)
{
v_pINTregs = (volatile INTreg *) VirtualAlloc(0,sizeof(INTreg),MEM_RESERVE, PAGE_NOACCESS);
if(v_pINTregs == NULL)
{
RETAILMSG(1,(TEXT("For INTreg: VirtualAlloc failed!\r\n")));
return 0;
}
else
{
if(!VirtualCopy((PVOID)v_pINTregs,(PVOID)(INT_BASE),sizeof(INTreg),PAGE_READWRITE | PAGE_NOCACHE ))
{
RETAILMSG(1,(TEXT("For INTreg: VirtualCopy failed!\r\n")));
return 0;
}
}
}
Time1_Init();
//create event sing
g_hevInterrupt = CreateEvent( NULL,FALSE,FALSE,NULL);
if(g_hevInterrupt == NULL)
{
RETAILMSG(1, (TEXT("DEMO: Event creation failed!!!")));
return 0;
}
RETAILMSG(1, (TEXT("create event sing ")));
//创建等待信号的线程
DWORD dwThreadID;
g_hThread=CreateThread(NULL,0,ThreadIST,NULL,CREATE_SUSPENDED,&dwThreadID);
if(g_hThread == NULL)
{
RETAILMSG(1, (TEXT("DEMO: Thread creation failed!!!")));
return 0;
}
else
{
//设置线程优先级
CeSetThreadPriority(g_hThread,1);
RETAILMSG(1, (TEXT("set Thread Priority!!!")));
}
InterruptDisable(SYSINTR_TIMER1);
//注册中断和事件
if (!InterruptInitialize(SYSINTR_TIMER1, g_hevInterrupt, NULL,0))
{
RETAILMSG(1, (TEXT("SYSINTR_TIMER1: InterruptInitialize failed\r\n")));
return 0;
}
RETAILMSG(1, (TEXT("zhu ce shi jian!!!")));
//启动线程
g_Run=true;
ResumeThread(g_hThread);
RETAILMSG(1, (TEXT("qi dong xian cheng")));
return 1;
}
DWORD ThreadIST(LPVOID)
{
DWORD dwStatus;
// while(g_Run)
// {
dwStatus=WaitForSingleObject(g_hevInterrupt,INFINITE);
if(dwStatus==WAIT_OBJECT_0)
{
RETAILMSG(1, (TEXT("yun xing xiang cheng")));
SendMessage(g_hwnd,WM_MyNotify,0,0);
InterruptDone(SYSINTR_TIMER1);
// v_pINTregs->rSRCPND &= ~BIT_TIMER1;
// v_pINTregs->rINTPND =BIT_TIMER1;
// v_pINTregs->rINTMSK &= (~(1<<11));
}
// }
return 1;
}
extern "C" TIME2TEST_API void ProfessDeInit()
{
v_pPWMregs->rTCON=0x500000;
g_Run=false;
if(v_pINTregs)
{
VirtualFree((void*)v_pINTregs, sizeof(INTreg), MEM_RELEASE);
v_pINTregs=NULL;
}
if(v_pPWMregs)
{
VirtualFree((void*)v_pPWMregs, sizeof(PWMreg), MEM_RELEASE);
v_pPWMregs=NULL;
}
RETAILMSG(1, (TEXT("end !!!")));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -