Example #1
0
static bool_t __Rtc_SetTime(s64 time)
{
    bool_t result = false;
    struct tm dtm;
    s64 time_s;
    u32 dtime,timout = 1500*mS;

    time_s = time/1000000;
    Tm_LocalTime_r(&time_s,&dtm);

    if((dtm.tm_year > 2000) && (dtm.tm_year < 2099))
    {
        RTC->RTC_CR |= RTC_CR_UPDTIM | RTC_CR_UPDCAL;

        while((RTC->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD)
        {
            Djy_EventDelay(100*mS);
            timout -= 100*mS;
            if(timout <= 0)
            {
                RTC->RTC_CR &= ~(RTC_CR_UPDCAL | RTC_CR_UPDTIM) ;
                RTC->RTC_SCCR |= RTC_SCCR_SECCLR; /* clear SECENV in SCCR */
                return false;
            }
        }
//      while ((RTC->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD) ;
        RTC->RTC_SCCR = RTC_SCCR_ACKCLR ;

        dtime = (HexToBcd(dtm.tm_hour) << RTC_TIMR_HOUR_Pos) |
                (HexToBcd(dtm.tm_min) << RTC_TIMR_MIN_Pos) |
                (HexToBcd(dtm.tm_sec) << RTC_TIMR_SEC_Pos);

        RTC->RTC_TIMR = dtime;
        if(dtm.tm_wday == 0)
            dtm.tm_wday = 7;
        dtime = (HexToBcd(dtm.tm_year - 2000) << RTC_CALR_YEAR_Pos) |
                (HexToBcd(dtm.tm_mon) << RTC_CALR_MONTH_Pos) |
                (HexToBcd(dtm.tm_mday) << RTC_CALR_DATE_Pos) |
                (HexToBcd(dtm.tm_wday) << RTC_CALR_DAY_Pos)|
                (HexToBcd(20) << RTC_CALR_CENT_Pos);

        RTC->RTC_CALR = dtime;

        RTC->RTC_CR &= ~(RTC_CR_UPDCAL | RTC_CR_UPDTIM) ;
        RTC->RTC_SCCR |= RTC_SCCR_SECCLR; /* clear SECENV in SCCR */
        result = !((RTC->RTC_VER & RTC_VER_NVTIM)
                | (RTC->RTC_VER & RTC_VER_NVCAL)) ;
    }

    return result;
}
Example #2
0
// =============================================================================
// 功能:RTC时钟更新,将系统时间更新到RTC模块,由于时钟模块的年存储的最大值为99,因此
//       本RTC模块设计从2000为起始值,如2014,则RTC模块的rBCDYEAR存储的是14
// 参数:dtm,更新时间
// 返回:true,成功;false,失败
// =============================================================================
bool_t RTC_TimeUpdate(s64 time)
{
    bool_t result = false;
    struct tm dtm;
    s64 time_s;

    time_s = time/1000000;
    Tm_LocalTime_r(&time_s,&dtm);

    if((dtm.tm_year > 2000) && (dtm.tm_year < 2099))
    {
        rRTCCON = 1 ;       //RTC read and write enable
        rBCDYEAR = HexToBcd(dtm.tm_year - 2000);
        rBCDMON  = HexToBcd(dtm.tm_mon);
        rBCDDATE = HexToBcd(dtm.tm_mday);
        rBCDHOUR = HexToBcd(dtm.tm_hour);
        rBCDMIN  = HexToBcd(dtm.tm_min);
        rBCDSEC  = HexToBcd(dtm.tm_sec);
        rRTCCON &= ~1 ;     //RTC read and write disable
        result = true;
    }
    return result;
}
Example #3
0
File: main.c Project: Mars-Wu/djyos
// ÔÚÏÔʾÆ÷µ×¶ËÏÔʾʱ¼ä
void dis_wnd_bottom_text(struct tagGkWinRsc *parent)
{
    static char text_time[]="2012Äê07ÔÂ06ÈÕ  23:59:59";
    static s64 last_nowtime = 0;
    struct tagRectangle rect;
    char text_buf[32];
    struct tm dtm;
    s64 nowtime;

    rect.left = 0;
    rect.top = 5;
    rect.right = 24*8+15;
    rect.bottom = 16+5;

    // ¸üÐÂʱ¼ä
    nowtime = TM_Time(NULL);
    if ((nowtime - last_nowtime) > 0)
    {
        Tm_LocalTime_r(&nowtime,&dtm);
        text_time[0] = '\0';
        // Äê
        itoa(dtm.tm_year, text_buf, 10);
        strcat(text_buf, (const char*)"Äê");
        strcat(text_time, text_buf);
        // ÔÂ
        if (dtm.tm_mon<10)
        {
            strcat(text_time, "0");
        }
        itoa(dtm.tm_mon, text_buf, 10);
        strcat(text_buf, "ÔÂ");
        strcat(text_time, text_buf);
        // ÈÕ
        if (dtm.tm_mday<10)
        {
            strcat(text_time, "0");
        }
        itoa(dtm.tm_mday, text_buf, 10);
        strcat(text_buf, "ÈÕ ");
        strcat(text_time, text_buf);
        // ʱ
        if (dtm.tm_hour<10)
        {
            strcat(text_time, "0");
        }
        itoa(dtm.tm_hour, text_buf, 10);
        strcat(text_buf, ":");
        strcat(text_time, text_buf);
        // ·Ö
        if (dtm.tm_min<10)
        {
            strcat(text_time, "0");
        }
        itoa(dtm.tm_min, text_buf, 10);
        strcat(text_buf, ":");
        strcat(text_time, text_buf);
        // Ãë
        if (dtm.tm_sec<10)
        {
            strcat(text_time, "0");
        }
        itoa(dtm.tm_sec, text_buf, 10);
        strcat(text_time, text_buf);

        GK_ApiFillRect(parent, &rect, CN_COLOR_GREEN,0,CN_FILLRECT_MODE_N,0);
        GK_ApiDrawText(parent,NULL,NULL, 5, 5, text_time, strnlen(text_time, 100),
                            CN_COLOR_WHITE, CN_R2_COPYPEN,CN_TIMEOUT_FOREVER);
    }
}