查看: 2165|回复: 0

[Wince技术] 看门狗流驱动源码

[复制链接]
  • TA的每日心情

    2014-4-10 13:56
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-1-23 09:07:10 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 forlinx2013 于 2014-1-24 09:17 编辑

    欢迎大家来到飞凌爱板网专区,对嵌入式技术感兴趣的朋友不妨多多关注一下,我们提供了公司所有开发板的所有资料,也会更新大量技术文章,欢迎大家一块学习提高!!!

    看门狗流驱动源码
    硬件平台:飞凌OK6410-A
    操作系统:飞凌光盘中的BSPWINCE6.0
    编译工具:VS2005 + WINCE6.0 + BSP
    如何添加流驱动,可以参考以前章节!
    源码:wdg.cpp

    ///----------------------------------------------------------------------------//
    //        NAME OF PROJECT: uniprOS                                                                                   Version: 1.0 (development) //
    //----------------------------------------------------------------------------//
    //        NAME OF SOURCE FILE: LED.cpp                                                                                                                                                                                   //
    //----------------------------------------------------------------------------//
    //                                                                                                                                                                                                                                                                                                          //
    //        Data of creation: 2010.02.15                                                                                                                                                                                  //
    //        Data of last modification: 2010.02.15                                                                                                                                                  //
    //                                                                                                                                                                                                                                                                                                          //
    //        CONTENTS:        unipro stream driver for led control                                                                                                          //
    //                                                                                                                                                                                                                                                                                                          //
    //----------------------------------------------------------------------------//
    //        NAME OF PROJECT FILE: LED.dll                                                                                                                                                                                  //
    //----------------------------------------------------------------------------//
    //        UTILIZING COMPILER: Microsoft Visual Studio 2005                                                                                                  //
    //----------------------------------------------------------------------------//
    //                                                        YUE Wei - Unipro                                                                                                                                                                                  //
    //----------------------------------------------------------------------------//



    #include "stdafx.h"
    #include <s3c6410.h>
    #include <DrvLib.h>
    #include <winuser.h>
    #include <windows.h>
    #include <ceddk.h>
    #include <oal.h>

    // Base Definitions
    #include "s3c6410_base_regs.h"
    #include "s3c6410_wdog.h"

    #include "wdg.h"
    #define WTCON_PRESCALE(x)        (((x)&0xff)<<8)    // bit 15:8, prescale value, 0 <= (x) <= 27
    #define WTCON_ENABLE            (1<<5)            // bit 5, enable watchdog timer
    #define WTCON_CLK_DIV16        (0<<3)
    #define WTCON_CLK_DIV32        (1<<3)
    #define WTCON_CLK_DIV64        (2<<3)
    #define WTCON_CLK_DIV128        (3<<3)
    #define WTCON_INT_ENABLE        (1<<2)
    #define WTCON_RESET            (1<<0)
    #define OALPAtoVA1(pa, c)    (VOID*)((c)?(pa)pa))  //jyh
    // WTCNT - watchdog counter register
    #define WTCNT_CNT(x)            ((x)&0xffff)

    // WTDAT - watchdog reload value register
    #define WTDAT_CNT(x)            ((x)&0xffff)

    // WTCLRINT - watchdog interrupt clear register
    #define WTCLRINT_CLEAR            (1<<0)

    // Watchdog Clock
    // PCLK : 25MHz
    // PCLK/PRESCALER : 25/25 = 1MHz
    // PCLK/PRESCALER/DIVIDER : 1MHz/128 = 7.812 KHz
    // MAX Counter = 0xffff = 65535
    // Period = 65535/7812 =~ 8.4 sec
    #define WD_PRESCALER            (25-1)

    #define WD_REFRESH_PERIOD        3000    // tell the OS to refresh watchdog every 3 second.
    // GPIO virtual address
    static volatile S3C6410_GPIO_REG  *v_pIOPregs  ;
    static volatile S3C6410_WATCHDOG_REG *v_pWDGregs;

    //----------------------------------------------------------------------------//
    //        DLL entry                                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    BOOL APIENTRY DllMain(HANDLE hModule,
                          DWORD  ul_reason_for_call,
                          LPVOID lpReserved) {
            switch (ul_reason_for_call) {
        case DLL_PROCESS_ATTACH:
          OutputDebugString(L"\nwdg - DLL_PROCESS_ATTACH\n");
              RETAILMSG(1,(TEXT("wdg - DLL_PROCESS_ATTACH\n")));
                       break;
        case DLL_PROCESS_DETACH:
               //RETAILMSG(1,(TEXT("LED - DLL_PROCESS_DETACH\n")));
              //OutputDebugString(L"LED - DLL_PROCESS_DETACH\n");
                            break;
        case DLL_THREAD_ATTACH:
               //RETAILMSG(1,(TEXT("LED - DLL_THREAD_ATTACH\n")));
          //OutputDebugString(L"LED - DLL_THREAD_ATTACH\n");
                            break;
        case DLL_THREAD_DETACH:
               //RETAILMSG(1,(TEXT("LED - DLL_THREAD_DETACH\n")));
          //OutputDebugString(L"LED - DLL_THREAD_DETACH\n");
                            break;
        default:
                            break;
      }

            return TRUE;
    }

    //----------------------------------------------------------------------------//
    //        wdg initial                                                                                                                                                                                                                                                                //
    //----------------------------------------------------------------------------//
    DWORD wdg_Init(LPCTSTR pContext, LPCVOID lpvBusContext) {
    //Virtual address mapping
            v_pIOPregs = (volatile S3C6410_GPIO_REG*)DrvLib_MapIoSpace(S3C6410_BASE_REG_PA_GPIO,
                                                                                      sizeof(S3C6410_GPIO_REG),
                                                                                                                            FALSE);
            v_pWDGregs = (volatile S3C6410_WATCHDOG_REG*)DrvLib_MapIoSpace(S3C6410_BASE_REG_PA_WATCHDOG,
                    sizeof(S3C6410_WATCHDOG_REG),
                    FALSE);
            OutputDebugString(L"wdg - wdg init sucseced\n");
            return 1;
    }

    //----------------------------------------------------------------------------//
    //        wdg deinit                                                                                                                                                                                                                                                                //
    //----------------------------------------------------------------------------//
    BOOL wdg_Deinit(DWORD hDeviceContext) {
            VirtualFree((PVOID)v_pIOPregs, 0, MEM_RELEASE);
            v_pIOPregs = NULL;
            return TRUE;
    }

    //----------------------------------------------------------------------------//
    //        wdg open                                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    DWORD wdg_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) {

            v_pWDGregs->WTCNT = 0x4000; //4s的倒计时,如果不喂狗,则重新启动
            v_pWDGregs->WTDAT=0xffff;
             v_pWDGregs->WTCON = WTCON_PRESCALE(WD_PRESCALER) | WTCON_ENABLE | WTCON_CLK_DIV128 | WTCON_RESET;
            v_pWDGregs->WTCON =0x8039;
            OutputDebugString(L"wdg - wdg Open\n");
            return 1;
    }
    //----------------------------------------------------------------------------//
    //        wdg close                                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    BOOL wdg_Close(DWORD hOpenContext) {
            OutputDebugString(L"wdg - wdg Close\n");
            return TRUE;
    }

    //----------------------------------------------------------------------------//
    //        wdg read                                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    DWORD wdg_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) {
            return 1;
    }

    //----------------------------------------------------------------------------//
    //        wdg write                                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    DWORD wdg_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count) {
            return 1;
    }

    //----------------------------------------------------------------------------//
    //        wdg power up                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    VOID wdg_PowerUp(DWORD hDeviceContext) {   
    }

    //----------------------------------------------------------------------------//
    //        wdg down                                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    VOID wdg_PowerDown(DWORD hDeviceContext) {   
    }  

    //----------------------------------------------------------------------------//
    //        wdg seek                                                                                                                                                                                                                                                                        //
    //----------------------------------------------------------------------------//
    DWORD wdg_Seek(DWORD hOpenContext, long Amount, DWORD Type) {   
      return 0;   
    }

    //----------------------------------------------------------------------------//                                                                                                                                                                                                                //
    //----------------------------------------------------------------------------//
    BOOL wdg_IOControl(DWORD Handle,
                                                                             DWORD dwIoControlCode,
                                                                             PBYTE pInBuf,
                                                                             DWORD nInBufSize,
                                                                             PBYTE pOutBuf,
                                                                             DWORD nOutBufSize,
                                                                             PDWORD pBytesReturned) {  
    switch (dwIoControlCode) {

        //case IOCTL_LED_LED1_OPEN:                                        //LED1 OPEN
                    //v_pIOPregs->GPMCON&=(~(0x0f<<4));
                    //v_pIOPregs->GPMCON|=0x1<<4;
                    //v_pIOPregs->GPMDAT|=(0x01<<1);

                    //break;
             case  IOCTL_wdg_wdg1_OPEN:
                     v_pWDGregs->WTCNT = WTCNT_CNT(0x4000);
                     break;

            }

      return TRUE;   
    }  



    源码: Wdg.h

    //----------------------------------------------------------------------------//
    //        NAME OF PROJECT: uniprOS                                                                                Version: 1.0 (development)          //
    //----------------------------------------------------------------------------//
    //        NAME OF SOURCE FILE: SPI.h                                                                                                                                                                                           //
    //----------------------------------------------------------------------------//
    //                                                                                                                                                                                                                                                                                                          //
    //        Data of creation: 2010.02.15                                                                                                                                                                                  //
    //        Data of last modification: 2010.02.15                                                                                                                                                  //
    //                                                                                                                                                                                                                                                                                                          //
    //        CONTENTS:        unipro CNC module.                                                                                                                                                                            //
    //                                                                                                                                                                                                                                                                                                          //
    //----------------------------------------------------------------------------//
    //        NAME OF PROJECT FILE: uniprOS.exe                                                                                                                                                                  //
    //----------------------------------------------------------------------------//
    //        UTILIZING COMPILER: Visual Studio 2005                                                                                                                                          //
    //----------------------------------------------------------------------------//
    //                                                        YUE Wei - Unipro                                                                                                                                                                                  //
    //----------------------------------------------------------------------------//

    #ifndef LCD_H
    #define LCD_H

    // constants define
    #define IOCTL_wdg_wdg1_OPEN                                  0x04002060
    #define IOCTL_wdg_wdg1_CLOSE                                0x04002061
    //#define IOCTL_LED_LED2_OPEN                                  0x04001070
    //#define IOCTL_LED_LED2_CLOSE                                0x04001071
    //#define IOCTL_LED_LED3_OPEN                                  0x04001080
    //#define IOCTL_LED_LED3_CLOSE                                0x04001081
    //#define IOCTL_LED_LED4_OPEN                                  0x04001090
    //#define IOCTL_LED_LED4_CLOSE                                0x04001091

    //#define IOCTL_LED_SET_OUTPUT                                                        0x04003060                                                
    //#define IOCTL_LED_SET_HIGH                                                                0x04003070
    //#define IOCTL_LED_SET_LOWER               0x04003080
    #endif


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-17 03:40 , Processed in 0.105157 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.