Exemplo n.º 1
0
uint8 TIME_AddMon(uint8 *pDate, uint8 mon) //月增量
{
    uint8 temp, temp1, temp2;
    temp = BcdToHex(pDate[1]) + mon;
    temp1 = temp % 12;
    temp2 = temp / 12;
    pDate[4] = HexToBcd(temp1);
    if (temp2 != 0)  pDate[5] = HexToBcd(BcdToHex(pDate[5]) + temp2);
    return 0;
}
Exemplo n.º 2
0
uint8 TIME_AddHour(uint8 *pDate, uint8 hour) //小时增量
{
    uint8 temp, temp1, temp2;
    temp = BcdToHex(pDate[2]) + hour;
    temp1 = temp % 24;
    temp2 = temp / 24;
    pDate[2] = HexToBcd(temp1);
    if (temp2 != 0)  TIME_AddDate(pDate, temp2);
    return 0;
}
Exemplo n.º 3
0
uint8 TIME_AddSec(uint8 *pDate, uint8 sec) //秒增量
{
    uint8 temp, temp1, temp2;
    temp = BcdToHex(pDate[0]) + sec;
    temp1 = temp % 60;
    temp2 = temp / 60;
    pDate[0] = HexToBcd(temp1);
    if (temp2 != 0)  TIME_AddMin(pDate, temp2);
    return 0;

}
Exemplo n.º 4
0
uint8 TIME_AddMin(uint8 *pDate, uint8 min) //分钟增量
{
    uint8 temp, temp1, temp2;
    temp = BcdToHex(pDate[1]) + min;
    temp1 = temp % 60;
    temp2 = temp / 60;
    pDate[1] = HexToBcd(temp1);
    if (temp2 != 0)  TIME_AddHour(pDate, temp2);
    return 0;

}
Exemplo n.º 5
0
// =============================================================================
// 功能:从RTC设备中读取RTC时间,单位微秒,取从1970年1月1日0:0:0到现在的时间差
// 参数:time, 时间值,需把日历时间转换成1970年1月1日0:0:0到现在的时间差
// 返回:true,正常操作,否则出错
// =============================================================================
bool_t Rtc_GetTime(s64 *time)
{
    struct tm dtm;
    u32 rtc_timr,rtc_calr;
    u32 year,month,date,hour,min,sec;

    rtc_timr = RTC->RTC_TIMR;
    rtc_calr = RTC->RTC_CALR;

    year = (rtc_calr & RTC_CALR_YEAR_Msk) >> RTC_CALR_YEAR_Pos;
    month = (rtc_calr & RTC_CALR_MONTH_Msk) >> RTC_CALR_MONTH_Pos;
    date = (rtc_calr & RTC_CALR_DATE_Msk) >> RTC_CALR_DATE_Pos;

    hour = (rtc_timr & RTC_TIMR_HOUR_Msk) >> RTC_TIMR_HOUR_Pos;
    min = (rtc_timr & RTC_TIMR_MIN_Msk) >> RTC_TIMR_MIN_Pos;
    sec = (rtc_timr & RTC_TIMR_SEC_Msk) >> RTC_TIMR_SEC_Pos;

    dtm.tm_year = BcdToHex(year) + 2000;
    dtm.tm_mon  = BcdToHex(month);
    dtm.tm_mday = BcdToHex(date);
    dtm.tm_hour = BcdToHex(hour);
    dtm.tm_min  = BcdToHex(min);
    dtm.tm_sec  = BcdToHex(sec);

    *time = 1000000 * Tm_MkTime(&dtm);
    return true;
}
Exemplo n.º 6
0
uint8 TIME_SubHour(uint8 *pDate, uint8 hour) //小时减法
{
    uint8 temp, temp1;
    temp = BcdToHex(pDate[1]);
    if (temp > hour) temp1 = temp - hour;
    else
    {
        temp1 = temp + 24 - hour;
        SubDate(pDate);
    }
    pDate[2] = HexToBcd(temp1);
    return 0;
}
Exemplo n.º 7
0
uint8 TIME_SubMin(uint8 *pDate, uint8 min) //分钟减法
{
    uint8 temp, temp1;
    temp = BcdToHex(pDate[1]);
    if (temp >= min) temp1 = temp - min;
    else
    {
        temp1 = temp + 60 - min;
        TIME_SubHour(pDate, 1);
    }
    pDate[1] = HexToBcd(temp1);
    return 0;

}
Exemplo n.º 8
0
// =============================================================================
// 功能:RTC中断,使用RTC模块的TICK计数器,配置为每一秒中断一次,并在中断中读取RTC
//       时钟,并配置系统时钟
// 参数:中断线号
// 返回:0
// =============================================================================
u32 RTC_ISR(ufast_t rtc_int_line)
{
    struct tm dtm;

    rRTCCON = 1 ;       //RTC read and write enable
    dtm.tm_year = BcdToHex(rBCDYEAR) + 2000;
    dtm.tm_mon  = BcdToHex(rBCDMON);
    dtm.tm_mday = BcdToHex(rBCDDATE);
    dtm.tm_hour = BcdToHex(rBCDHOUR);
    dtm.tm_min  = BcdToHex(rBCDMIN);
    dtm.tm_sec  = BcdToHex(rBCDSEC);
    rRTCCON &= ~1 ;     //RTC read and write disable

    Tm_SetDateTime(&dtm); // 向OS的Clock模块传递新的时间值
    return 0;
}
Exemplo n.º 9
0
// =============================================================================
// 功能:获取RTC时钟,读取RTC模块的时间,由于时钟模块的年存储的最大值为99,因此需将读
//       到的年份加基数年2000,如,读RTC模块的rBCDYEAR为14,则为2014年
// 参数:dtm,更新时间
// 返回:true
// =============================================================================
bool_t RTC_TimeGet(s64 *time)
{
    struct tm dtm;

    rRTCCON = 1 ;       //RTC read and write enable
    dtm.tm_year = BcdToHex(rBCDYEAR) + 2000;
    dtm.tm_mon  = BcdToHex(rBCDMON);
    dtm.tm_mday = BcdToHex(rBCDDATE);
    dtm.tm_hour = BcdToHex(rBCDHOUR);
    dtm.tm_min  = BcdToHex(rBCDMIN);
    dtm.tm_sec  = BcdToHex(rBCDSEC);
    rRTCCON &= ~1 ;     //RTC read and write disable

    *time = 1000000 * Tm_MkTime(&dtm);
    return true;
}
Exemplo n.º 10
0
//-----更新RTC时钟---------------------------------------------------------------
//功能:将年月日时分秒写入到RTC时钟,更新RTC,由于RTC芯片存放的时间信息是基于BCD
//      编码格式,所以在写入时间前,需要将时间信息转化为相应的BCD格式
//参数:DateTime,rtc_tm结构类型的变量,里面存放着需更新RTC的时间信息
//返回:无
//-----------------------------------------------------------------------------
uint32_t rtc_time_get(struct rtc_tm *DateTime)
{
    uint32_t sec, min, hour, mday, wday, mon, year;

    //判断是否需要初始化SPI,以防module_init_rtc未被调用
    if(!rtc_spi_Config)
    {
        rtc_spi_Config = &pg_spi_Config;
        rtc_spi_Config->freq=CFG_RTC_SPI_SPEED;
        Spi_Init(CFG_RTC_SPI_BUS,rtc_spi_Config);
    }

    //从RTC读时间
    sec  = __rtc_read (RTC_CMD_SECONDS);
    min  = __rtc_read (RTC_CMD_MINUTES);
    hour = __rtc_read (RTC_CMD_HOURS);
    mday = __rtc_read (RTC_CMD_DATE_OF_MONTH);
    wday = __rtc_read (RTC_CMD_DAY_OF_WEEK);
    mon  = __rtc_read (RTC_CMD_MONTH);
    year = __rtc_read (RTC_CMD_YEAR);

    //将BCD格式转化为正常模式
    DateTime->tm_sec    = BcdToHex(sec & 0x7F);
    DateTime->tm_min    = BcdToHex(min & 0x7F);
    DateTime->tm_hour   = BcdToHex(hour);
    DateTime->tm_mday   = BcdToHex(mday & 0x3F);
    DateTime->tm_wday   = BcdToHex(wday & 0x07) - 1;
    DateTime->tm_mon    = BcdToHex(mon & 0x1F);
    DateTime->tm_year   = BcdToHex(year) + 2000;

/*---------------------test use only----------------------*/
    printf("Get RTC year: %04d mon: %02d mday: %02d wday: %02d "
           "hr: %02d min: %02d sec: %02d\r\n",
           DateTime->tm_year, DateTime->tm_mon, DateTime->tm_mday,
           DateTime->tm_wday, DateTime->tm_hour, DateTime->tm_min,
           DateTime->tm_sec);
/*---------------------test use only----------------------*/

    return 0;
}
Exemplo n.º 11
0
/*
AT+CMGL=4

+CMGL: 1,0,,24
0891683108200845F7240D91683183185600F2210811509131918123044F60597D
0891683108200845F8240D91683183185600F221001150917145542302C618

OK
*/
BYTE Handle_PduSms(void)
{
    static BYTE i,k,len;
    i = GetSignLoc(0x0A,2);
    if (i == 0xFF)
    {
        return FALSE;
    }
    
    if ((Sms_Buffer[i+1] != '0') || (Sms_Buffer[i+2] != '8'))
    {
        printf("--Err1\r\n");
        return FALSE;
    }

    //短信中心号码
    mcpy(CenterNumber,&Sms_Buffer[i+7],12);
    
    
    //27 来电号码
    mcpy(SmsNumber,&Sms_Buffer[i+27],12);
    
    //41 
    if ((Sms_Buffer[i+41] != '0') || (Sms_Buffer[i+42] != '0'))  
    {
        printf("--Err2\r\n");
       
        return FALSE;  // 非文本短信返回
    }

    //43 时间
    //年
    SysTime[0] = (Sms_Buffer[i+44]-0x30)*16 + (Sms_Buffer[i+43]-0x30);
    //月
    SysTime[2] = (Sms_Buffer[i+46]-0x30)*16 + (Sms_Buffer[i+45]-0x30);
    //日
    SysTime[3] = (Sms_Buffer[i+48]-0x30)*16 + (Sms_Buffer[i+47]-0x30);
    //时
    SysTime[4] = (Sms_Buffer[i+50]-0x30)*16 + (Sms_Buffer[i+49]-0x30);
    //分
    SysTime[5] = (Sms_Buffer[i+52]-0x30)*16 + (Sms_Buffer[i+51]-0x30);
    //秒
    SysTime[6] = (Sms_Buffer[i+54]-0x30)*16 + (Sms_Buffer[i+53]-0x30);

    // 57 len
    len = BcdToHex(Sms_Buffer[i+57],Sms_Buffer[i+58]);

    //59 内容
    for (k=0;k<len;k++)
    {
        SmsContent2[k] = BcdToHex(Sms_Buffer[i+59+k*2],Sms_Buffer[i+60+k*2]);
    }

    SmsLength = Decode7bit(SmsContent2,SmsContent,len);
    SmsLength = len;    

    printf((char *)SmsContent);

//    SetSysTime();

    return TRUE;
    
}
Exemplo n.º 12
0
uint8 TIME_AddDate(uint8 *pDate, uint8 date) //日增量
{
    uint8 year1;
    uint8 month1;
    uint8 day1;
    uint8 days[13];


    year1 = BcdToHex(pDate[5]);
    month1 = BcdToHex(pDate[4]);
    day1 = BcdToHex(pDate[3]);

    days[0] = 0;
    days[1] = 31;
    days[2] = 28;
    days[3] = 31;
    days[4] = 30;
    days[5] = 31;
    days[6] = 30;
    days[7] = 31;
    days[8] = 31;
    days[9] = 30;
    days[10] = 31;
    days[11] = 30;
    days[12] = 31;

    if( (!IsLeap(year1) || month1 != 2))
    {
        if ((day1 + date) <= days[month1] )
        {
            pDate[3] = HexToBcd(day1 + date);
            pDate[4] = HexToBcd(month1);
            pDate[5] = HexToBcd(year1);
        }
        else
        {
            pDate[3] = HexToBcd(day1 + date - days[month1]);
            if (month1 == 12)
            {
                pDate[5] = HexToBcd(year1 + 1);
                pDate[4] = 1;
            }
            else
            {
                pDate[5] = HexToBcd(year1);
                pDate[4] = HexToBcd(month1 + 1);
            }
        }

    }
    else
    {
        if ((day1 + date) < 29)
        {
            pDate[3] = HexToBcd(day1 + date);
            pDate[4] = 2;
            pDate[5] = HexToBcd(year1);
        }
        else
        {
            pDate[3] = HexToBcd(day1 + date - 29);
            pDate[4] = 3;
            pDate[5] = HexToBcd(year1);
        }
    }
    return 0;
}