zoukankan      html  css  js  c++  java
  • WINCE 定时器0控制LED驱动源码

    1 /******************************************************
    2 *作 者:温子祺
    3 *联系方式:wenziqi@hotmail.com
    4 *创建时间:2010-09-06
    5 *说 明:定时器闪烁LED
    6 -----------------------------------------------------
    7 *修改时间:2010-09-13
    8 *说 明:添加临界区和FCLK、HCLK、PCLK的说明
    9 ******************************************************/
    10 #include <windows.h>
    11 #include <nkintr.h>
    12
    13 #include <winreg.h>
    14 #include <winioctl.h>
    15 #include <ceddk.h>
    16 #include <devload.h>
    17 #include <S3C2440A.h>//S3C2440包含了自身硬件资源的所有头文件
    18  //包括寄存器、逻辑中断号
    19  #include "pmplatform.h"
    20 #include "Pkfuncs.h"
    21 #include "TIMER.h"
    22
    23
    24  //这些值可以从startup.s中的MPLLCON、CLKDIVN的配置中知道
    25 #define FCLK 400000000
    26 #define HCLK FCLK/4
    27 #define PCLK FCLK/8
    28 /*
    29 ===================================================================
    30
    31 普通宏定义
    32
    33 ===================================================================
    34 */
    35
    36 #define LED1_POS 5
    37 #define LED2_POS 6
    38 #define LED3_POS 7
    39 #define LED4_POS 8
    40
    41 #define IOCTL_START_TIMER 1
    42 #define IOCTL_STOP_TIMER 2
    43
    44
    45 /*
    46 ===================================================================
    47
    48 基本函数接口
    49
    50 ===================================================================
    51 */
    52
    53 static BOOL LEDInit (PTMR_CONTEXT pTMR);
    54 static BOOL LEDCtrlOn (PTMR_CONTEXT pTMR,UINT32 unCtrlCode);
    55 static BOOL LEDCtrlOff (PTMR_CONTEXT pTMR,UINT32 unCtrlCode);
    56
    57 static PVOID HalRegisterAlloc (PVOID pvRegisterAddress,
    58 INT32 nSizeOfReg);
    59
    60 static BOOL TIMERInitAll (PTMR_CONTEXT pTMR);
    61 static BOOL TIMERDeinitAll (PTMR_CONTEXT pTMR);
    62
    63 static void Led1Flash (PTMR_CONTEXT pTMR);
    64 static void Led2Flash (PTMR_CONTEXT pTMR);
    65 static void Led3Flash (PTMR_CONTEXT pTMR);
    66 static void Led4Flash (PTMR_CONTEXT pTMR);
    67
    68 static void TIMEREnable (PTMR_CONTEXT pTMR);
    69 static void TIMERDisable (PTMR_CONTEXT pTMR);
    70
    71 static DWORD TIMERIST (LPVOID lpContext);
    72
    73 /******************************************************
    74 *文件名称:TIMEREnable
    75 *输 入:pTMR TIMER设备上下文
    76 *输 出:无
    77 *功能说明:TIMER 使能
    78 *******************************************************/
    79 static void TIMEREnable(PTMR_CONTEXT pTMR)
    80 {
    81 pTMR->pPWMReg->TCFG1 &= ~0x0F;//使用定时器0
    82 pTMR->pPWMReg->TCFG1 |= 2;
    83 pTMR->pPWMReg->TCNTB0 =(PCLK)/8/1000; //1MS
    84 pTMR->pPWMReg->TCON &= ~0x0F;
    85 pTMR->pPWMReg->TCON |= (1<<3)|(1<<1)|(1<<0);
    86
    87 UINT32 i=100;
    88 while(i--);
    89
    90 pTMR->pPWMReg->TCON &= ~(1<<1);
    91
    92 }
    93 /******************************************************
    94 *文件名称:TIMERDisable
    95 *输 入:pTMR TIMER设备上下文
    96 *输 出:无
    97 *功能说明:TIMER 禁止
    98 *******************************************************/
    99 static void TIMERDisable(PTMR_CONTEXT pTMR)
    100 {
    101 pTMR->pPWMReg->TCON &= ~(1<<0);
    102 }
    103 /******************************************************
    104 *文件名称:LEDInit
    105 *输 入:pTMR TIMER设备上下文
    106 *输 出:TRUE/FALSE
    107 *功能说明:LED 初始化
    108 *******************************************************/
    109 static BOOL LEDInit(PTMR_CONTEXT pTMR)
    110 {
    111 if (pTMR == NULL)
    112 {
    113 return FALSE;
    114 }
    115
    116 pTMR->pIOPortReg->GPBCON|=1<<(LED1_POS*2)|1<<(LED2_POS*2)|\
    117 1<<(LED3_POS*2)|1<<(LED4_POS*2);
    118
    119 pTMR->pIOPortReg->GPBUP |=1<<LED1_POS|1<<LED2_POS|\
    120 1<<LED3_POS|1<<LED4_POS ;
    121
    122 pTMR->pIOPortReg->GPBDAT|=1<<LED1_POS|1<<LED2_POS|\
    123 1<<LED3_POS|1<<LED4_POS ;
    124
    125 return TRUE;
    126 }
    127
    128 /******************************************************
    129 *文件名称:LEDCtrlOn
    130 *输 入:unCtrlCode 控制码
    131 *输 出:TRUE/FALSE
    132 *功能说明:LED亮
    133 *******************************************************/
    134 static BOOL LEDCtrlOn(PTMR_CONTEXT pTMR,UINT32 unCtrlCode)
    135 {
    136 if (pTMR == NULL)
    137 {
    138 return FALSE;
    139 }
    140
    141 pTMR->pIOPortReg->GPBDAT&=~(unCtrlCode);
    142
    143 return TRUE;
    144 }
    145 /******************************************************
    146 *文件名称:LEDCtrlOff
    147 *输 入:pTMR 设备上下文
    148 unCtrlCode 控制码
    149 *输 出:TRUE/FALSE
    150 *功能说明:LED灭
    151 *******************************************************/
    152 static BOOL LEDCtrlOff(PTMR_CONTEXT pTMR,UINT32 unCtrlCode)
    153 {
    154 if (pTMR == NULL)
    155 {
    156 return FALSE;
    157 }
    158
    159 pTMR->pIOPortReg->GPBDAT|=unCtrlCode;
    160
    161 return TRUE;
    162 }
    163 /******************************************************
    164 *文件名称:Led1Flash
    165 *输 入:pTMR 设备上下文
    166 *输 出:无
    167 *功能说明:LED1 闪烁
    168 *******************************************************/
    169 static void Led1Flash(PTMR_CONTEXT pTMR)
    170 {
    171 static UINT32 b=0;
    172
    173 b^=0x01;
    174
    175 if(b)
    176 {
    177 LEDCtrlOn(pTMR,1<<LED1_POS);
    178 }
    179 else
    180 {
    181 LEDCtrlOff(pTMR,1<<LED1_POS);
    182 }
    183
    184
    185 }
    186 /******************************************************
    187 *文件名称:Led2Flash
    188 *输 入:pTMR 设备上下文
    189 *输 出:无
    190 *功能说明:LED2 闪烁
    191 *******************************************************/
    192 static void Led2Flash(PTMR_CONTEXT pTMR)
    193 {
    194 static UINT32 b=0;
    195
    196 b^=0x01;
    197
    198 if(b)
    199 {
    200 LEDCtrlOn(pTMR,1<<LED2_POS);
    201 }
    202 else
    203 {
    204 LEDCtrlOff(pTMR,1<<LED2_POS);
    205 }
    206
    207 }
    208 /******************************************************
    209 *文件名称:Led3Flash
    210 *输 入:pTMR 设备上下文
    211 *输 出:无
    212 *功能说明:LED3 闪烁
    213 *******************************************************/
    214 static void Led3Flash(PTMR_CONTEXT pTMR)
    215 {
    216 static UINT32 b=0;
    217
    218 b^=0x01;
    219
    220 if(b)
    221 {
    222 LEDCtrlOn(pTMR,1<<LED3_POS);
    223 }
    224 else
    225 {
    226 LEDCtrlOff(pTMR,1<<LED3_POS);
    227 }
    228 }
    229 /******************************************************
    230 *文件名称:Led4Flash
    231 *输 入:pTMR 设备上下文
    232 *输 出:无
    233 *功能说明:LED4 闪烁
    234 *******************************************************/
    235 static void Led4Flash(PTMR_CONTEXT pTMR)
    236 {
    237 static UINT32 b=0;
    238
    239 b^=0x01;
    240
    241 if(b)
    242 {
    243 LEDCtrlOn(pTMR,1<<LED4_POS);
    244 }
    245 else
    246 {
    247 LEDCtrlOff(pTMR,1<<LED4_POS);
    248 }
    249
    250 }
    251 /******************************************************
    252 *文件名称:HalRegisterAlloc
    253 *输 入:pvRegisterAddress 寄存器地址
    254 nSizeOfReg 寄存器占用空闲大小
    255 *输 出:分配好的内存指针
    256 *功能说明:分配内存
    257 *******************************************************/
    258 static PVOID HalRegisterAlloc(PVOID pvRegisterAddress,
    259 INT32 nSizeOfReg)
    260 {
    261 PVOID pReg;
    262
    263 pReg=(PVOID)VirtualAlloc(0,nSizeOfReg,MEM_RESERVE,PAGE_NOACCESS);
    264
    265 if (pReg)
    266 {
    267 if(!(VirtualCopy(pReg,
    268 (PVOID)((UINT32)pvRegisterAddress>>8),
    269 nSizeOfReg,
    270 PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE
    271 )))
    272 {
    273 VirtualFree(pReg,0,MEM_RELEASE);
    274
    275 pReg=NULL;
    276 }
    277
    278 }
    279
    280 return pReg;
    281 }
    282 /******************************************************
    283 *文件名称:TIMERInitAll
    284 *输 入:pTMR TIMER设备上下文
    285 *输 出:TRUE/FALSE
    286 *功能说明:TIMER 初始化所有
    287 如事件、线程、中断初始化
    288 *******************************************************/
    289 static BOOL TIMERInitAll(PTMR_CONTEXT pTMR)
    290 {
    291
    292 if (pTMR == NULL)
    293 {
    294 return FALSE;
    295 }
    296
    297 if ((pTMR->hISTEvent=CreateEvent(NULL,FALSE,FALSE,NULL))==NULL)
    298 {
    299 TMRMSG(TMRDBG,(TEXT("TIMERInitAll[ERROR]:CreateEvent for ist fail\n")));
    300
    301 goto init_error;
    302 }
    303
    304 UINT32 unIRQ = IRQ_TIMER0;
    305
    306 if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,
    307 &unIRQ,
    308 sizeof(UINT32),
    309 &pTMR->unTIMERLogicNum,
    310 sizeof(UINT32),
    311 NULL))
    312 {
    313 TMRMSG(TMRDBG,(TEXT("TIMERInitAll[ERROR]:get logic number fail\n")));
    314
    315 goto init_error;
    316 }
    317
    318 if (!InterruptInitialize(pTMR->unTIMERLogicNum,pTMR->hISTEvent,NULL,0))
    319 {
    320 TMRMSG(TMRDBG,(TEXT("TIMERInitAll[ERROR]:init logic number and event fail\n")));
    321
    322 goto init_error;
    323 }
    324
    325 pTMR->bIsI2CThreadValid=TRUE;
    326
    327 if ((pTMR->hISTThread=CreateThread(NULL,
    328 0,
    329 TIMERIST,
    330 (LPVOID)pTMR,
    331 0,
    332 NULL
    333 ))==NULL)
    334 {
    335 TMRMSG(TMRDBG,(TEXT("TIMERInitAll[ERROR]:CreateThread for timer fail\n")));
    336
    337 goto init_error;
    338 }
    339
    340 InterruptDone(pTMR->unTIMERLogicNum);
    341
    342 if (!CeSetThreadPriority(pTMR->hISTThread,88))
    343 {
    344 TMRMSG(TMRDBG,(TEXT("TIMERInitAll[ERROR]:CeSetThreadPriority for timer fail\n")));
    345
    346 return FALSE;
    347 }
    348
    349
    350 InitializeCriticalSection(&pTMR->RegCS);
    351
    352
    353 TMRMSG(TMRDBG,(TEXT("TIMERInitAll[MSG]:TIMERInitAll Success\n")));
    354
    355 return TRUE;
    356
    357 init_error:
    358
    359 TIMERDeinitAll(pTMR);
    360
    361 return FALSE;
    362
    363
    364 }
    365 /******************************************************
    366 *文件名称:TIMERDeinitAll
    367 *输 入:pTMR TIMER设备上下文
    368 *输 出:TRUE/FALSE
    369 *功能说明:TIMER 初始化所有
    370 如事件、线程、中断初始化
    371 *******************************************************/
    372 static BOOL TIMERDeinitAll(PTMR_CONTEXT pTMR)
    373 {
    374 if (NULL == pTMR)
    375 {
    376 TMRMSG(TMRDBG,(TEXT("TIMERDeinitAll[ERROR]:TIMERDeinitAll fail because of pTMR\n")));
    377
    378 return FALSE;
    379 }
    380
    381 DeleteCriticalSection(&pTMR->RegCS);
    382
    383 InterruptDisable(pTMR->unTIMERLogicNum);
    384
    385 CloseHandle(pTMR->hISTEvent);
    386 CloseHandle(pTMR->hISTThread);
    387
    388 TIMERDisable(pTMR);
    389
    390 Sleep(1);
    391
    392
    393
    394 VirtualFree((LPVOID)pTMR->pPWMReg, sizeof(S3C2440A_PWM_REG),MEM_RELEASE);
    395 VirtualFree((LPVOID)pTMR->pIOPortReg,sizeof(S3C2440A_IOPORT_REG),MEM_RELEASE);
    396 VirtualFree((LPVOID)pTMR->pIntrReg, sizeof(S3C2440A_INTR_REG),MEM_RELEASE);
    397 VirtualFree((LPVOID)pTMR->pCLKPWRReg,sizeof(S3C2440A_CLKPWR_REG),MEM_RELEASE);
    398
    399 Sleep(10);
    400
    401 LocalFree(pTMR);
    402
    403
    404 return TRUE;
    405 }
    406 /******************************************************
    407 *文件名称:TIMERIST
    408 *输 入:lpContext 设备上下文
    409 *输 出:0/1
    410 *功能说明:TIMER 中断服务线程
    411 *******************************************************/
    412 static DWORD TIMERIST(LPVOID lpContext)
    413 {
    414 static UINT32 unCnt=0;
    415
    416
    417 PTMR_CONTEXT pTMR = (PTMR_CONTEXT)lpContext;
    418
    419 Sleep(10);
    420
    421 TMRMSG(7,(TEXT("[DLL]TIMERIST[MSG]:TIMERIST Running...\n")));
    422 TMRMSG(7,(TEXT("[DLL]TIMERIST[MSG]:pTMR->bIsI2CThreadValid is %d\n"),pTMR->bIsI2CThreadValid));
    423
    424 while (pTMR->bIsI2CThreadValid)
    425 {
    426 WaitForSingleObject(pTMR->hISTEvent,INFINITE);
    427 ResetEvent(pTMR->hISTEvent);
    428 //TMRMSG(7,(TEXT("[DLL]TIMERIST[MSG]:TIMERIST event...\n")));
    429
    430 EnterCriticalSection(&pTMR->RegCS);
    431
    432 unCnt++;
    433
    434 if (unCnt==1000)Led1Flash(pTMR);
    435 if (unCnt==2000)Led2Flash(pTMR);
    436 if (unCnt==3000)Led3Flash(pTMR);
    437 if (unCnt==4000)Led4Flash(pTMR);
    438
    439 if (unCnt>=4000)unCnt=0;
    440
    441 InterruptDone(pTMR->unTIMERLogicNum);
    442
    443 LeaveCriticalSection(&pTMR->RegCS);
    444 }
    445
    446 TMRMSG(7,(TEXT("[DLL]TIMERIST[MSG]:TIMERIST Exit...\n")));
    447
    448 return 1;
    449 }
    450 /*
    451 ===================================================================
    452
    453 DLL 流接口函数
    454
    455 ===================================================================
    456 */
    457
    458 /******************************************************
    459 *文件名称:TMR_Init
    460 *输 入:Context 注册枚举路径
    461 *输 出:0/1
    462 *功能说明:TIMER 初始化
    463 *******************************************************/
    464 PTMR_CONTEXT TMR_Init (PVOID Context)
    465 {
    466 LPTSTR ActivePath = (LPTSTR)Context; //HKLM\Drivers\Active\xx
    467
    468 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_INIT[MSG]:(%s)\n"),ActivePath));//打印注册路径
    469
    470 PTMR_CONTEXT pTMR;
    471
    472 pTMR=(PTMR_CONTEXT)LocalAlloc(LPTR,sizeof(TMR_CONTEXT));
    473
    474 if (NULL == pTMR)
    475 {
    476 return NULL;
    477 }
    478
    479 pTMR->pIOPortReg=(volatile S3C2440A_IOPORT_REG *)HalRegisterAlloc((PVOID)S3C2440A_BASE_REG_PA_IOPORT,
    480 sizeof(S3C2440A_IOPORT_REG));
    481 if (pTMR->pIOPortReg == NULL)
    482 {
    483 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Init[ERROR]:Unable to alloc for ioport reg\n")));
    484
    485 goto init_error;
    486 }
    487
    488 pTMR->pIntrReg=(volatile S3C2440A_INTR_REG *)HalRegisterAlloc((PVOID)S3C2440A_BASE_REG_PA_INTR,
    489 sizeof(S3C2440A_INTR_REG));
    490
    491 if (pTMR->pIntrReg == NULL)
    492 {
    493 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Init[ERROR]Unable to alloc for intrrrupt reg\n")));
    494
    495 goto init_error;
    496 }
    497
    498 pTMR->pPWMReg=(volatile S3C2440A_PWM_REG *)HalRegisterAlloc((PVOID)S3C2440A_BASE_REG_PA_PWM,
    499 sizeof(S3C2440A_PWM_REG));
    500
    501 if (pTMR->pPWMReg == NULL)
    502 {
    503 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Init[ERROR]Unable to alloc for pwm reg\n")));
    504
    505 goto init_error;
    506 }
    507
    508 pTMR->pCLKPWRReg=(volatile S3C2440A_CLKPWR_REG *)HalRegisterAlloc((PVOID)S3C2440A_BASE_REG_PA_CLOCK_POWER,
    509 sizeof(S3C2440A_CLKPWR_REG));
    510
    511 if (pTMR->pCLKPWRReg == NULL)
    512 {
    513 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Init[ERROR]Unable to alloc for clkpwr reg\n")));
    514
    515 goto init_error;
    516 }
    517
    518
    519 LEDInit(pTMR);
    520 LEDCtrlOn(pTMR,1<<LED2_POS|1<<LED4_POS);
    521
    522 TIMERInitAll(pTMR);
    523
    524 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_INIT[MSG]:TMR_INIT Success\n")));
    525
    526 return pTMR; //正确返回pTMR
    527
    528 init_error:
    529
    530 LocalFree(pTMR);
    531
    532 pTMR=NULL;
    533
    534 return NULL; //错误返回NULL
    535 }
    536 /******************************************************
    537 *文件名称:TMR_Deinit
    538 *输 入:pTMR TIMER设备上下文
    539 *输 出:TRUE/FALSE
    540 *功能说明:TIMER 卸载
    541 *******************************************************/
    542 BOOL TMR_Deinit (PTMR_CONTEXT pTMR)
    543 {
    544
    545
    546 TIMERDeinitAll(pTMR);
    547
    548 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Deinit[MSG]:TMR_Deinit Success\n")));
    549
    550 return TRUE;
    551 }
    552 /******************************************************
    553 *文件名称:TMR_Open
    554 *输 入:pTMR TIMER 设备上下文
    555 AccessCode 访问代码
    556 ShareMode 共享模式
    557 *输 出:设备上下文指针
    558 *功能说明:TIMER 打开
    559 *******************************************************/
    560 PTMR_CONTEXT TMR_Open (PTMR_CONTEXT pTMR,DWORD AccessCode,DWORD ShareMode)
    561 {
    562 if (NULL == pTMR)
    563 {
    564 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Open[ERROR]:Context is invalid\n")));
    565
    566 return NULL;
    567 }
    568
    569 UNREFERENCED_PARAMETER(ShareMode);
    570 UNREFERENCED_PARAMETER(AccessCode);
    571
    572 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Open[MSG]:TMR_Open Success\n")));
    573
    574 return pTMR;
    575 }
    576 /******************************************************
    577 *文件名称:TMR_Close
    578 *输 入:pTMR TIMER 设备上下文
    579 *输 出:TRUE/FALSE
    580 *功能说明:TIMER 关闭
    581 *******************************************************/
    582 BOOL TMR_Close (PTMR_CONTEXT pTMR)
    583 {
    584
    585 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Close[MSG]:TMR_Close Success\n")));
    586
    587 return TRUE;
    588 }
    589 /******************************************************
    590 *文件名称:TMR_Read
    591 *输 入:pTMR TIMER 设备上下文
    592 lpOutputBuf 数据输出缓冲区
    593 dwNumOfBytes 数据输出字节数
    594 *输 出:-1
    595 *功能说明:TIMER 读取
    596 *******************************************************/
    597 DWORD TMR_Read (PTMR_CONTEXT pTMR,LPVOID lpOutputBuf,DWORD dwNumOfBytes)
    598 {
    599 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Read[ERROR]:Unable support read\n")));
    600
    601 return (DWORD)-1;
    602 }
    603 /******************************************************
    604 *文件名称:TMR_Seek
    605 *输 入:pTMR TIMER 设备上下文
    606 lpOutputBuf 数据输出缓冲区
    607 dwNumOfBytes 数据输出字节数
    608 *输 出:-1
    609 *功能说明:TIMER 对设备指针进行操作时调用
    610 *******************************************************/
    611 DWORD TMR_Seek (PTMR_CONTEXT pTMR,long lAmount,DWORD dwType)
    612 {
    613 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Seek[ERROR]:Unable support seek\n")));
    614
    615 return (DWORD)-1;
    616 }
    617 /******************************************************
    618 *文件名称:TMR_Write
    619 *输 入:pTMR TIMER 设备上下文
    620 lpInPutBuf 数据输入缓冲区
    621 dwNumOfBytes 数据输入字节数
    622 *输 出:-1
    623 *功能说明:TIMER 写入
    624 *******************************************************/
    625 DWORD TMR_Write (PTMR_CONTEXT pTMR,LPVOID lpInPutBuf,DWORD dwNumOfBytes)
    626 {
    627 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_Write[ERROR]:Unable support write\n")));
    628
    629 return (DWORD)-1;
    630 }
    631 /******************************************************
    632 *文件名称:TMR_IOControl
    633 *输 入:pTMR TIMER 设备上下文
    634 dwCode 控制码
    635 pBufIn 数据输入缓冲区
    636 dwLenIn 数据输入字节数
    637 pBufOut 数据输出缓冲区
    638 dwLenOut 数据输处字节数
    639 pdwActualOut 实际数据输出字节数
    640 *输 出:TRUE/FALSE
    641 *功能说明:TIMER 输入输出口控制
    642 *******************************************************/
    643 BOOL TMR_IOControl (PTMR_CONTEXT pTMR,
    644 DWORD dwCode,
    645 PBYTE pBufIn,
    646 DWORD dwLenIn,
    647 PBYTE pBufOut,
    648 DWORD dwLenOut,
    649 PDWORD pdwActualOut)
    650 {
    651
    652 if (pTMR == NULL)
    653 {
    654 return FALSE;
    655 }
    656
    657 switch(dwCode)
    658 {
    659 case IOCTL_START_TIMER:
    660 {
    661 TIMEREnable(pTMR);
    662 }break;
    663
    664 case IOCTL_STOP_TIMER:
    665 {
    666 TIMERDisable(pTMR);
    667
    668 }break;
    669 }
    670
    671 return TRUE;
    672 }
    673 /******************************************************
    674 *文件名称:TMR_PowerUp
    675 *输 入:Context 设备上下文
    676 *输 出:TRUE
    677 *功能说明:TIMER 上电电操作
    678 *******************************************************/
    679 BOOL TMR_PowerUp (PVOID Context)
    680 {
    681 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_PowerUp[ERROR]:TMR_PowerUp Success\n")));
    682
    683 return TRUE;
    684 }
    685 /******************************************************
    686 *文件名称:TMR_PowerDown
    687 *输 入:Context 设备上下文
    688 *输 出:TRUE
    689 *功能说明:TIMER 掉电操作
    690 *******************************************************/
    691 BOOL TMR_PowerDown (PVOID Context)
    692 {
    693 TMRMSG(TMRDBG,(TEXT("[DLL]TMR_PowerDown[ERROR]:TMR_PowerDown Success\n")));
    694
    695 return TRUE;
    696 }
    697 /*
    698 =======================================================
    699
    700 加载DLL
    701
    702 =======================================================
    703
    704 */
    705 BOOL WINAPI DllEntry(HANDLE hinstDLL,
    706 DWORD dwReason,
    707 LPVOID /* lpvReserved */)
    708 {
    709 switch (dwReason)
    710 {
    711 case DLL_PROCESS_ATTACH:
    712 DEBUGREGISTER((HINSTANCE)hinstDLL);
    713 return TRUE;
    714 case DLL_THREAD_ATTACH:
    715 break;
    716 case DLL_THREAD_DETACH:
    717 break;
    718 case DLL_PROCESS_DETACH:
    719 break;
    720 #ifdef UNDER_CE
    721 case DLL_PROCESS_EXITING:
    722 break;
    723 case DLL_SYSTEM_STARTED:
    724 break;
    725 #endif
    726 }
    727
    728 return TRUE;
    729 }

    转载请注明出处,谢谢!

  • 相关阅读:
    android studio 提示翻译
    mysql-You can’t specify target table for update in FROM clause错误
    echarts-案例
    maven-过滤不打入包的文件
    neo4j关闭和开启密码访问权限
    linux-crontab定时任务
    neo4j-备份、恢复
    windows和linux执行class
    mvn-打jar运行包(含环境变量配置)
    mysql-netstat
  • 原文地址:https://www.cnblogs.com/wenziqi/p/1823403.html
Copyright © 2011-2022 走看看