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

📄 rtcdrv.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 2 页
字号:
//=========================================================//  The module is used to drive RTC. //=========================================================#include "winav.h"#include "ctkav.h"#include "comdef.h"#include "hal.h"#include "comutl.h"#include "RTCdrv.h"/***************************************************************************    CONFIGURATION**************************************************************************///#define EMU_RTC              //Enable RTC Emulator, DO NOT continue going after turning off system power#define TIMER2#define ONEDIODE            //Set One Diode for RTC Charging#define DEFAULT_SEC    0#define DEFAULT_MIN    0#define DEFAULT_HR      0#define DEFAULT_DATE  1 #define DEFAULT_MON    1 //Jan#define DEFAULT_DAY    1 //Monday#define DEFAULT_YEAR  6 //2006/*  * RELOAD_VALUE_PON = 990671  * 1/(132750000/2) *67 * RELOAD_VALUE_PON = 1 sec  *  */#if defined(CT909P_IC_SYSTEM)||defined(CT909G_IC_SYSTEM)#if (CPU_SPEED == CPU_133M) //132.75MHz#define RELOAD_VALUE_PON  990671#define RELOAD_VALUE_POFF    964285#define CNT_RATIO_OFF_ON 1027#define CNT_RATIO_ON_OFF 973#endif#if (CPU_SPEED == CPU_146M) //146NHz#define RELOAD_VALUE_PON  999999#define RELOAD_VALUE_POFF 964285#define CNT_RATIO_OFF_ON 1037#define CNT_RATIO_ON_OFF 964#endif#endif#if defined(CT909R_IC_SYSTEM)#if (CPU_SPEED == CPU_133M) //133NHz#define RELOAD_VALUE_PON 992536#define RELOAD_VALUE_POFF   964285#define CNT_RATIO_OFF_ON 1029#define CNT_RATIO_ON_OFF 971#endif#if (CPU_SPEED == CPU_146M) //146NHz#define RELOAD_VALUE_PON 999999#define RELOAD_VALUE_POFF 964285#define CNT_RATIO_OFF_ON 1037#define CNT_RATIO_ON_OFF 964#endif#endif/**************************************************************************/#ifdef EMU_RTCULONGLONG  __u64LastTick; //Recorded the elapsed time in ticks;RTC_TM        __RTCEmu_TM;BYTE _bChkSleepLeakTimeStart;ULONGLONG __u64SystemTick2 = 0;#endif#ifndef EMU_RTC/**************************************************************************Function       :   RTC_InputByteAbstract       :   Input one byte to RTCArguments   :   Input valueReturn         :   none.Side Effect    :   none.Notes           :***************************************************************************/void RTC_InputByte ( BYTE bValue ){    BYTE bIndex;    for ( bIndex = 0; bIndex < 8; bIndex++ )    {        HAL_WriteGPIO(GRP_RTCSDA, PIN_RTCSDA, 0);                if ( bValue & 0x01 )        {            HAL_WriteGPIO(GRP_RTCSDA, PIN_RTCSDA, 1);        }        HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);        HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);        bValue = bValue >> 1;    }}/**************************************************************************Function       :   RTC_OutputByteAbstract       :   Get one byte from RTCArguments   :   none.Return         :   one byte from RTC.Side Effect    :   none.Notes           :***************************************************************************/BYTE RTC_OutputByte ( void ){    BYTE bIndex;    BYTE bResult;    bResult = 0;    for ( bIndex = 0; bIndex < 8; bIndex++ )    {        bResult >>= 1;        if ( HAL_ReadGPIO(GRP_RTCSDA, PIN_RTCSDA) )        {            bResult |= 0x80;        }        HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);        HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);            }    return bResult;}/**************************************************************************Function       :   RTC_W1302Abstract       :   write one byte to the addr of 1302 RTCArguments   :   bAddr : write register, bData : write valueReturn         :   none.Side Effect    :   none.Notes           :***************************************************************************/void RTC_W1302 ( BYTE bAddr, BYTE bData ){    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 1);    RTC_InputByte ( bAddr );    RTC_InputByte ( bData );    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);    }/**************************************************************************Function       :   RTC_W1302Abstract       :   Read one byte from the addr of 1302 RTCArguments   :   bAddr : write registerReturn         :   The read result.Side Effect    :   none.Notes           :***************************************************************************/BYTE RTC_R1302 ( BYTE bAddr ){    BYTE bResult;    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 1);    RTC_InputByte ( bAddr );    bResult = RTC_OutputByte ( );    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);        return bResult;}/**************************************************************************Function       :   RTC_BurstW1302TAbstract       :   Consecutively write first eight clock/calendar registersArguments   :   BYTE *bWClock : 7Byte clock data + 1Byte controlReturn         :   none.Side Effect    :   none.Notes           :***************************************************************************/void RTC_BurstW1302T(BYTE *bWClock){    BYTE bIndex;        //Disable write protection    RTC_W1302 ( RTC1302_CTRL_REG, 0x00 );     HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 1);    //Write clock burst address    RTC_InputByte ( RTC1302_CLOCKBURST_REG );    //8Byte = 7Byte clock data + 1Byte control    for ( bIndex = 8; bIndex > 0; bIndex--)    {        RTC_InputByte( *bWClock );        bWClock++;    }    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);   } /**************************************************************************Function       :   RTC_BurstR1302TAbstract       :   Consecutively read first eight clock/calendar registersArguments   :   Return         :   BYTE *bWClock : 7Byte clock data + 1Byte controlSide Effect    :   none.Notes           :***************************************************************************/void RTC_BurstR1302T(BYTE *bWClock){    BYTE bIndex;        HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 1);    //Write clock burst address    RTC_InputByte ( (RTC1302_CLOCKBURST_REG | RTC_READ_MODE) );    //8Byte = 7Byte clock data + 1Byte control    for ( bIndex = 8; bIndex > 0; bIndex--)    {        *bWClock = RTC_OutputByte( );        bWClock++;    }    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);   } void RTC_BurstW1302R(BYTE *bWReg){    BYTE bIndex;    //Disable write protection    RTC_W1302 ( RTC1302_CTRL_REG, 0x00 );         HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 1);        RTC_InputByte ( RTC1302_RAMBURST_REG );    for ( bIndex = 31; bIndex > 0; bIndex--)           {        RTC_InputByte(*bWReg);          bWReg++;    }    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);  } void RTC_BurstR1302R ( BYTE *bRReg ){    BYTE bIndex;    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 0);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 1);    RTC_InputByte( RTC1302_RAMBURST_REG | RTC_READ_MODE );    for ( bIndex = 31; bIndex > 0; bIndex--)    {        *bRReg = RTC_OutputByte ( );        bRReg++;    }    HAL_WriteGPIO(GRP_RTCCLK, PIN_RTCCLK, 1);    HAL_WriteGPIO(GRP_RTCRST, PIN_RTCRST, 0);  }void RTC_SetCharge ( void ){    RTC_W1302 ( RTC1302_CTRL_REG, 0x00 ); #ifdef ONEDIODE        RTC_W1302 ( RTC1302_TC_REG, 0xA5 );    // one diode#else    RTC_W1302 ( RTC1302_TC_REG, 0xA9 ); //Two diode only charge to 1.9V#endif    RTC_W1302 ( RTC1302_CTRL_REG, 0x80 );   }#endif/**************************************************************************Function       :   RTC_SetTimeAbstract       :   Set system time as 20YY/MM/DD/HH/MM/SSArguments   :   pointer of Time structReturn         :   Side Effect    :   none.Notes           :***************************************************************************/void RTC_SetTime ( PRTC_TM pRTC_TM) {#ifdef EMU_RTC    DWORD dwSaveInt;

⌨️ 快捷键说明

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