⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc.c

📁 hreadx实时嵌入式操作系统源代码,ARM移植. threadx是一个很好的多任务实时嵌入式操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*********************************************************************************************************
  此函数可以设置闹铃时间, 但不能使能相关的唤醒操作, 需要调用其他使能类的函数.
*********************************************************************************************************/
void  rtcSetAlarmTime (RTC_TIME  *prtctimeAlarm)
{
    int     iHigh;                                                      /*  BCD 码高位                  */
    int     iLow;                                                       /*  BCD 码低位                  */
    int     iYear;                                                      /*  年                          */
    
    if (!prtctimeAlarm) {
        return;
    }
    if (__rtcTimeCheck(prtctimeAlarm)) {                                /*  检查时间有效性              */
        return;
    }
    
    iYear   = prtctimeAlarm->usYear - 2000;
    
    iHigh   = prtctimeAlarm->ucSecond / 10;
    iLow    = prtctimeAlarm->ucSecond % 10;
    rALMSEC = (unsigned char)(iHigh << 4 + iLow);                       /*  秒闹钟寄存器                */
    
    iHigh   = prtctimeAlarm->ucMinute / 10;
    iLow    = prtctimeAlarm->ucMinute % 10;
    rALMMIN = (unsigned char)(iHigh << 4 + iLow);                       /*  分闹钟寄存器                */
    
    iHigh    = prtctimeAlarm->ucHour / 10;
    iLow     = prtctimeAlarm->ucHour % 10;
    rALMHOUR = (unsigned char)(iHigh << 4 + iLow);                      /*  小时闹钟寄存器              */
    
    iHigh    = prtctimeAlarm->ucDate / 10;
    iLow     = prtctimeAlarm->ucDate % 10;
    rALMDATE = (unsigned char)(iHigh << 4 + iLow);                      /*  日期闹钟寄存器              */
    
    iHigh    = prtctimeAlarm->ucMonth / 10;
    iLow     = prtctimeAlarm->ucMonth % 10;
    rALMMON  = (unsigned char)(iHigh << 4 + iLow);                      /*  月份闹钟寄存器              */
    
    iHigh    = prtctimeAlarm->usYear / 10;
    iLow     = prtctimeAlarm->usYear % 10;
    rALMYEAR = (unsigned char)(iHigh << 4 + iLow);                      /*  年闹钟寄存器                */
}
/*********************************************************************************************************
** Function name:           rtcGetAlarmTime
** Descriptions:            获取闹钟唤醒时间
** input parameters:        NONE
** output parameters:       prtctimeAlarm       闹铃时间
** Returned value:          NONE
** Created by:              Hanhui
** Created Date:            2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void  rtcGetAlarmTime (RTC_TIME  *prtctimeAlarm)
{
    int     iHigh;                                                      /*  BCD 码高位                  */
    int     iLow;                                                       /*  BCD 码低位                  */
    
    if (!prtctimeAlarm) {
        return;
    }
    
    iHigh = ((rALMSEC & 0xF0) >> 4);
    iLow  =  (rALMSEC & 0x0F);
    prtctimeAlarm->ucSecond = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rALMMIN & 0xF0) >> 4);
    iLow  =  (rALMMIN & 0x0F);
    prtctimeAlarm->ucMinute = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rALMHOUR & 0xF0) >> 4);
    iLow  =  (rALMHOUR & 0x0F);
    prtctimeAlarm->ucHour   = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rALMDATE & 0xF0) >> 4);
    iLow  =  (rALMDATE & 0x0F);
    prtctimeAlarm->ucDate   = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rALMMON & 0xF0) >> 4);
    iLow  =  (rALMMON & 0x0F);
    prtctimeAlarm->ucMonth  = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rALMYEAR & 0xF0) >> 4);
    iLow  =  (rALMYEAR & 0x0F);
    prtctimeAlarm->usYear   = (unsigned short)(iHigh * 10 + iLow + 2000);
}
/*********************************************************************************************************
** Function name:           rtcSetTime
** Descriptions:            设置 RTC 时间
** input parameters:        prtctimeNow       当前时间
** output parameters:       NONE
** Returned value:          NONE
** Created by:              Hanhui
** Created Date:            2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void  rtcSetTime (RTC_TIME  *prtctimeNow)
{
    int     iHigh;                                                      /*  BCD 码高位                  */
    int     iLow;                                                       /*  BCD 码低位                  */
    int     iYear;                                                      /*  年                          */
    
    if (!prtctimeNow) {
        return;
    }
    if (__rtcTimeCheck(prtctimeNow)) {                                 /*  检查时间有效性               */
        return;
    }
    
    iYear   = prtctimeNow->usYear - 2000;
    
    iHigh   = prtctimeNow->ucSecond / 10;
    iLow    = prtctimeNow->ucSecond % 10;
    rBCDSEC = (unsigned char)(iHigh << 4 + iLow);                       /*  秒寄存器                    */
    
    iHigh   = prtctimeNow->ucMinute / 10;
    iLow    = prtctimeNow->ucMinute % 10;
    rBCDMIN = (unsigned char)(iHigh << 4 + iLow);                       /*  分寄存器                    */
    
    iHigh    = prtctimeNow->ucHour / 10;
    iLow     = prtctimeNow->ucHour % 10;
    rBCDHOUR = (unsigned char)(iHigh << 4 + iLow);                      /*  小时寄存器                  */
    
    iHigh    = prtctimeNow->ucDate / 10;
    iLow     = prtctimeNow->ucDate % 10;
    rBCDDATE = (unsigned char)(iHigh << 4 + iLow);                      /*  日期寄存器                  */
    
    iHigh    = prtctimeNow->ucMonth / 10;
    iLow     = prtctimeNow->ucMonth % 10;
    rBCDMON  = (unsigned char)(iHigh << 4 + iLow);                      /*  月份寄存器                  */
    
    iHigh    = prtctimeNow->usYear / 10;
    iLow     = prtctimeNow->usYear % 10;
    rBCDYEAR = (unsigned char)(iHigh << 4 + iLow);                      /*  年寄存器                    */

    rBCDDAY  = prtctimeNow->ucDay;                                      /*  星期寄存器                  */
}
/*********************************************************************************************************
** Function name:           rtcGetTime
** Descriptions:            获取 RTC 时间
** input parameters:        NONE
** output parameters:       prtctimeNow       当前时间
** Returned value:          NONE
** Created by:              Hanhui
** Created Date:            2007/12/20
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void  rtcGetTime (RTC_TIME  *prtctimeNow)
{
    int     iHigh;                                                      /*  BCD 码高位                  */
    int     iLow;                                                       /*  BCD 码低位                  */
    
    if (!prtctimeNow) {
        return;
    }
    
    iHigh = ((rBCDSEC & 0xF0) >> 4);
    iLow  =  (rBCDSEC & 0x0F);
    prtctimeNow->ucSecond = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rBCDMIN & 0xF0) >> 4);
    iLow  =  (rBCDMIN & 0x0F);
    prtctimeNow->ucMinute = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rBCDHOUR & 0xF0) >> 4);
    iLow  =  (rBCDHOUR & 0x0F);
    prtctimeNow->ucHour   = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rBCDDATE & 0xF0) >> 4);
    iLow  =  (rBCDDATE & 0x0F);
    prtctimeNow->ucDate   = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rBCDMON & 0xF0) >> 4);
    iLow  =  (rBCDMON & 0x0F);
    prtctimeNow->ucMonth  = (unsigned char)(iHigh * 10 + iLow);
    
    iHigh = ((rBCDYEAR & 0xF0) >> 4);
    iLow  =  (rBCDYEAR & 0x0F);
    prtctimeNow->usYear   = (unsigned short)(iHigh * 10 + iLow + 2000);
    
    prtctimeNow->ucDay    = rBCDDAY;
}
/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -