亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtc.c

?? s3c2440 WINCE 5.00 官方bsp
?? C
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//------------------------------------------------------------------------------
//
//  Module: rtc.c
//
//  Real-time clock (RTC) routines for the Samsung S3C2440A processor
//
#include <windows.h>
#include <ceddk.h>
#include <nkintr.h>
#include <oal.h>
#include <s3c2440a.h>

//------------------------------------------------------------------------------
// Defines 

#define FROM_BCD(n)     ((((n) >> 4) * 10) + ((n) & 0xf))
#define TO_BCD(n)       ((((n) / 10) << 4) | ((n) % 10))
#define RTC_YEAR_DATUM  1980

//------------------------------------------------------------------------------
//
//  Function:  OALIoCtlHalInitRTC
//
//  This function is called by WinCE OS to initialize the time after boot.
//  Input buffer contains SYSTEMTIME structure with default time value.
//  If hardware has persistent real time clock it will ignore this value
//  (or all call).
//
BOOL OALIoCtlHalInitRTC(
    UINT32 code, VOID *pInpBuffer, UINT32 inpSize, VOID *pOutBuffer,
    UINT32 outSize, UINT32 *pOutSize
) {
    BOOL rc = FALSE;
    SYSTEMTIME *pTime = (SYSTEMTIME*)pInpBuffer;

    OALMSG(OAL_IOCTL&&OAL_FUNC, (L"+OALIoCtlHalInitRTC(...)\r\n"));

    // Validate inputs
    if (pInpBuffer == NULL || inpSize < sizeof(SYSTEMTIME)) {
        NKSetLastError(ERROR_INVALID_PARAMETER);
        OALMSG(OAL_ERROR, (
            L"ERROR: OALIoCtlHalInitRTC: Invalid parameter\r\n"
        ));
        goto cleanUp;
    }

    // Add static mapping for RTC alarm
    OALIntrStaticTranslate(SYSINTR_RTC_ALARM, IRQ_RTC);

    // Set time
    rc = OEMSetRealTime(pTime);
    
cleanUp:
    OALMSG(OAL_IOCTL&&OAL_FUNC, (L"-OALIoCtlHalInitRTC(rc = %d)\r\n", rc));
    return rc;
}



//------------------------------------------------------------------------------
//
//  Function:  OEMGetRealTime
//
//  Reads the current RTC value and returns a system time.
//
BOOL OEMGetRealTime(SYSTEMTIME *pTime)
{
    BOOL rc = FALSE;
    S3C2440A_RTC_REG *pRTCReg;
    UINT32 data;
    UINT16 seconds;


    OALMSG(OAL_RTC&&OAL_FUNC, (L"+OEMGetRealTime(pTime = 0x%x)\r\n", pTime));

    if (pTime == NULL) goto cleanUp;
    
    // Get uncached virtual address
    pRTCReg = OALPAtoVA(S3C2440A_BASE_REG_PA_RTC, FALSE);
    do {
        data = INPORT32(&pRTCReg->BCDSEC) & 0x7f;
        seconds = FROM_BCD(data);
        data = INPORT32(&pRTCReg->BCDYEAR);
        pTime->wYear = FROM_BCD(data) + RTC_YEAR_DATUM;
        data = INPORT32(&pRTCReg->BCDMON) & 0x1f;
        pTime->wMonth = FROM_BCD(data);
        data = INPORT32(&pRTCReg->BCDDAY) & 0x3f;
        pTime->wDay = FROM_BCD(data);
        pTime->wDayOfWeek = (WORD)INPORT32(&pRTCReg->BCDDATE) - 1;
        data = INPORT32(&pRTCReg->BCDHOUR) & 0x3f;
        pTime->wHour = FROM_BCD(data);
        data = INPORT32(&pRTCReg->BCDMIN) & 0x7f;
        pTime->wMinute = FROM_BCD(data);
        data = INPORT32(&pRTCReg->BCDSEC) & 0x7f;
        pTime->wSecond = FROM_BCD(data);
        pTime->wMilliseconds = 0;
    } while (pTime->wSecond != seconds);

    // Done
    rc = TRUE;

cleanUp:
    OALMSG(OAL_FUNC, (L"-OEMGetRealTime(rc = %d)\r\n", rc));
    return rc;
}


//------------------------------------------------------------------------------
//
//  Function:  OEMSetRealTime
//
//  Updates the RTC with the specified system time.
//
BOOL OEMSetRealTime(LPSYSTEMTIME pTime) 
{
    BOOL rc = FALSE;
    S3C2440A_RTC_REG *pRTCReg;

    OALMSG(OAL_RTC&&OAL_FUNC, (
        L"+OEMSetRealTime(%d/%d/%d %d:%d:%d.%03d)\r\n", 
        pTime->wYear, pTime->wMonth, pTime->wDay, pTime->wHour, pTime->wMinute,
        pTime->wSecond, pTime->wMilliseconds
    ));

    if (pTime == NULL) goto cleanUp;
    
    // The RTC will only support a BCD year value of 0 - 99.  The year datum is
    // 1980, so any dates greater than 2079 will fail unless the datum is
    // adjusted.
    if (pTime->wYear < RTC_YEAR_DATUM || (pTime->wYear - RTC_YEAR_DATUM) > 99) {
        OALMSG(OAL_ERROR, (L"ERROR: OEMSetRealTime: "
            L"RTC cannot support a year greater than %d or less than %d "
            L"(value %d)\r\n", (RTC_YEAR_DATUM + 99), RTC_YEAR_DATUM, 
            pTime->wYear
        ));
        goto cleanUp;
    }

    // Get uncached virtual address
    pRTCReg = OALPAtoVA(S3C2440A_BASE_REG_PA_RTC, FALSE);

    // Enable RTC control.
    SETREG32(&pRTCReg->RTCCON, 1);

    OUTPORT32(&pRTCReg->BCDSEC,  TO_BCD(pTime->wSecond));
    OUTPORT32(&pRTCReg->BCDMIN,  TO_BCD(pTime->wMinute));
    OUTPORT32(&pRTCReg->BCDHOUR, TO_BCD(pTime->wHour));
    OUTPORT32(&pRTCReg->BCDDATE, pTime->wDayOfWeek + 1);
    OUTPORT32(&pRTCReg->BCDDAY,  TO_BCD(pTime->wDay));
    OUTPORT32(&pRTCReg->BCDMON,  TO_BCD(pTime->wMonth));
    OUTPORT32(&pRTCReg->BCDYEAR, TO_BCD(pTime->wYear - RTC_YEAR_DATUM));

    // Disable RTC control.
    CLRREG32(&pRTCReg->RTCCON, 1);

    // Done
    rc = TRUE;

cleanUp:
    OALMSG(OAL_RTC&&OAL_FUNC, (L"-OEMSetRealTime(rc = %d)\r\n", rc));
    return rc;
}


//------------------------------------------------------------------------------
//
//  Function:  OEMSetAlarmTime
//
//  Set the RTC alarm time.
//
BOOL OEMSetAlarmTime(SYSTEMTIME *pTime)
{
    BOOL rc = FALSE;
    S3C2440A_RTC_REG *pRTCReg;
    UINT32 irq;

    OALMSG(OAL_RTC&&OAL_FUNC, (
        L"+OEMSetAlarmTime(%d/%d/%d %d:%d:%d.%03d)\r\n", 
        pTime->wMonth, pTime->wDay, pTime->wYear, pTime->wHour, pTime->wMinute,
        pTime->wSecond, pTime->wMilliseconds
    ));

    if (pTime == NULL) goto cleanUp;
    
    // Get uncached virtual address
    pRTCReg = OALPAtoVA(S3C2440A_BASE_REG_PA_RTC, FALSE);
    
    // Enable RTC control
    SETREG32(&pRTCReg->RTCCON, 1);

    OUTPORT32(&pRTCReg->ALMSEC,  TO_BCD(pTime->wSecond));
    OUTPORT32(&pRTCReg->ALMMIN,  TO_BCD(pTime->wMinute));
    OUTPORT32(&pRTCReg->ALMHOUR, TO_BCD(pTime->wHour));
    OUTPORT32(&pRTCReg->ALMDATE, TO_BCD(pTime->wDay));
    OUTPORT32(&pRTCReg->ALMMON,  TO_BCD(pTime->wMonth));
    OUTPORT32(&pRTCReg->ALMYEAR, TO_BCD(pTime->wYear - RTC_YEAR_DATUM));
   
    // Enable the RTC alarm interrupt
    OUTPORT32(&pRTCReg->RTCALM, 0x7F);
 
    // Disable RTC control.
    CLRREG32(&pRTCReg->RTCCON, 1);

    // Enable/clear RTC interrupt
    irq = IRQ_RTC;
    OALIntrDoneIrqs(1, &irq);

    // Done
    rc = TRUE;
    
cleanUp:
    OALMSG(OAL_RTC&&OAL_FUNC, (L"-OEMSetAlarmTime(rc = %d)\r\n", rc));
    return rc;
}

//------------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品少妇一区二区三区在线播放 | 久久国产精品免费| 亚洲私人黄色宅男| 国产精品精品国产色婷婷| 国产日韩精品一区二区浪潮av| 精品国产免费久久| 久久久精品免费观看| 精品美女一区二区三区| 精品国产91乱码一区二区三区 | 久久不见久久见中文字幕免费| 国产一区二区成人久久免费影院| 亚洲精品视频免费看| 亚洲综合免费观看高清完整版| 亚洲成人免费看| 蜜乳av一区二区| 国产毛片精品国产一区二区三区| 国产一区二区三区免费在线观看| 国产精品亚洲成人| 国产激情91久久精品导航| 99国产欧美另类久久久精品| 欧美亚洲禁片免费| 欧美一区二区三区色| 国产午夜精品理论片a级大结局| 欧美国产日韩一二三区| 一区二区三区在线视频播放| 一本大道久久a久久综合婷婷| 亚洲精品国产精华液| 性做久久久久久免费观看| 成人中文字幕合集| 日本午夜一区二区| 国产麻豆9l精品三级站| 国产精品亚洲а∨天堂免在线| 国产成人av电影在线观看| 色综合激情久久| 欧美高清视频一二三区| 欧美极品少妇xxxxⅹ高跟鞋 | 中文字幕一区二区三区四区| 亚洲一区二区在线视频| 乱一区二区av| 欧美综合视频在线观看| 日韩午夜中文字幕| 亚洲精品国产无天堂网2021| 日韩国产成人精品| aa级大片欧美| 欧美sm美女调教| 一区二区三区免费看视频| 国产综合成人久久大片91| 欧美亚洲一区二区三区四区| 日韩欧美成人一区| 亚洲欧洲综合另类在线| 极品少妇xxxx精品少妇| 欧美在线观看视频一区二区三区 | 亚洲欧洲av一区二区三区久久| 婷婷国产在线综合| 色一情一乱一乱一91av| 日本视频免费一区| 日本韩国一区二区三区视频| 亚洲国产精品国自产拍av| 亚洲va欧美va国产va天堂影院| 亚洲激情第一区| 国产精品一区在线观看你懂的| 欧美剧情片在线观看| 夜夜爽夜夜爽精品视频| 99在线热播精品免费| 国产欧美日韩中文久久| 狠狠色丁香九九婷婷综合五月| 91精品中文字幕一区二区三区| 亚洲精品成a人| 色婷婷综合久久久中文一区二区| 欧美国产综合一区二区| 国产成人午夜精品5599| 久久这里只有精品6| 韩国av一区二区三区四区 | 国产在线视频一区二区| 欧美xxxxx裸体时装秀| 久久精品久久综合| 精品入口麻豆88视频| 久久爱另类一区二区小说| 日韩欧美在线网站| 激情文学综合网| 国产三级欧美三级日产三级99 | 日韩精品影音先锋| 日本中文字幕一区二区有限公司| 日本黄色一区二区| 一区二区高清视频在线观看| 日本道精品一区二区三区| 一片黄亚洲嫩模| 99国产精品久久久久久久久久| 亚洲日韩欧美一区二区在线| 91久久精品一区二区三| 日韩经典中文字幕一区| 精品久久久久久综合日本欧美| 九色综合狠狠综合久久| 国产精品视频看| 欧洲精品一区二区三区在线观看| 亚洲bt欧美bt精品| 久久日一线二线三线suv| 成人小视频免费在线观看| 亚洲欧美一区二区三区极速播放 | 久久综合视频网| 不卡一区二区在线| 亚洲高清三级视频| 日韩网站在线看片你懂的| 成人午夜看片网址| 天天亚洲美女在线视频| 久久久午夜精品| 91浏览器在线视频| 麻豆精品视频在线观看免费| 久久久夜色精品亚洲| 99久久er热在这里只有精品66| 亚洲五月六月丁香激情| 欧美揉bbbbb揉bbbbb| 韩国欧美国产一区| 亚洲美腿欧美偷拍| 欧美一级夜夜爽| 在线精品视频一区二区| 国产一区二区三区精品欧美日韩一区二区三区| 欧美国产精品一区二区| 91精品啪在线观看国产60岁| 成人国产精品免费观看| 久久国产尿小便嘘嘘尿| 亚洲精品免费在线观看| 久久精品亚洲乱码伦伦中文| 欧美日韩精品一区二区在线播放| 精品在线观看免费| 亚洲va欧美va天堂v国产综合| 国产精品美女久久久久久久网站| 97精品视频在线观看自产线路二| 老司机免费视频一区二区三区| 亚洲精品日韩一| 国产精品你懂的| 精品国产乱码久久久久久图片| 欧美日韩精品欧美日韩精品| 99re亚洲国产精品| 丁香激情综合国产| 国产一区二区在线电影| 蜜桃视频一区二区| 三级成人在线视频| 午夜精品久久久久久久蜜桃app| ●精品国产综合乱码久久久久| 国产欧美精品一区| 久久精品视频在线免费观看| 日韩欧美三级在线| 91精品国产色综合久久ai换脸| 欧美艳星brazzers| 欧美亚洲综合在线| 欧美三级日韩三级国产三级| 91国在线观看| 在线免费不卡电影| 欧美视频在线播放| 欧美日韩国产欧美日美国产精品| 91国偷自产一区二区三区成为亚洲经典 | 久久只精品国产| 久久婷婷久久一区二区三区| 日韩精品中文字幕一区二区三区| 69av一区二区三区| 日韩免费在线观看| 精品国产99国产精品| 久久久久久久网| 欧美国产97人人爽人人喊| 国产精品免费久久| 亚洲精品中文字幕乱码三区| 一区二区三区在线观看欧美| 亚洲国产精品人人做人人爽| 偷拍自拍另类欧美| 激情综合网天天干| 成人福利电影精品一区二区在线观看| 丰满岳乱妇一区二区三区| eeuss鲁片一区二区三区在线看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 久久精品一区二区三区不卡牛牛| 精品少妇一区二区三区在线视频 | 色综合天天做天天爱| 在线观看精品一区| 91精品国产91久久久久久一区二区 | 国产精品色婷婷| 亚洲一区av在线| 久久激情综合网| 99久久精品免费精品国产| 欧美三级视频在线观看| 久久人人爽人人爽| 一区二区三区四区在线播放| 美脚の诱脚舐め脚责91| 成人久久视频在线观看| 欧美日韩精品一区视频| 国产肉丝袜一区二区| 亚洲一区av在线| 国产aⅴ综合色| 欧美乱妇一区二区三区不卡视频| 久久久天堂av| 午夜成人免费视频| 成人18视频在线播放| 日韩午夜激情av| 亚洲精品第1页| 岛国精品一区二区| 日韩一区二区精品在线观看| ...中文天堂在线一区| 久久精品国产秦先生| 在线一区二区三区做爰视频网站| www久久精品|