ls1x-master-v0.4/public/ls1x_rtc.c
2024-11-27 15:39:05 +08:00

82 lines
2.0 KiB
C
Executable File

#include"ls1x.h"
#include"ls1x_rtc.h"
/***********************************************************************
function: 读取rtc时间
@param : Rtime rtc读取的时间
@other : 无
@return : void
@auther : 朱晓宇
@time : 2020年4月9日
***********************************************************************/
void Rtc_Read(tsRtcTime *Rtime)
{
INT32U Rtc_time1 = 0;
INT32U Rtc_time2 = 0;
Rtc_time1 = RTC_RTC1;
Rtc_time2 = RTC_RTC0;
Rtime->year = (Rtc_time1 & 0xFE00) >> 9;
Rtime->mon = (Rtc_time1 & 0x1E0) >> 5;
Rtime->day = (Rtc_time1 & 0x1F);
Rtime->hour = (Rtc_time2 & 0x1F0000) >> 16;
Rtime->min = (Rtc_time2 & 0xFC00) >> 10;
Rtime->sec = (Rtc_time2 & 0x3F0) >> 4;
}
/***********************************************************************
function: 写入rtc时间
@param : Wtime rtc写入的时间
@other : 无
@return : void
@auther : 朱晓宇
@time : 2020年4月9日
***********************************************************************/
void Rtc_Write(tsRtcTime *Wtime)
{
if(((Wtime->mon) > 12) || ((Wtime->mon) <= 0))
Wtime->mon = 1;
if(((Wtime->day) > 31) || ((Wtime->day) <= 0))
Wtime->day = 1;
RTC_FREQ = (0x800 << 16) ; // 32768Hz -> 16Hz
RTC_RTC0 = (((Wtime->hour) % 24) << 16) | (((Wtime->min) % 60) << 10) | (((Wtime->sec) % 60) << 4) | (((Wtime->week) % 100) << 0); // 设置初始时间时、分、秒
RTC_RTC1 = ((Wtime->year) << 9) | (((Wtime->mon) % 13) << 5) | (((Wtime->day) % 32) << 0); // 设置初始时间年、月、日
RTC_CFG = 0x80000000;
}
/***********************************************************************
function: 更新RTC
@param : direction 判断是读取RTC,还是写RTC
time 存储日期时间
@other : 无
@return : void
@auther : 朱晓宇
@time : 2020年4月9日
***********************************************************************/
void RtcUpdateData(INT8U direction, tsRtcTime *time)
{
INT32U ret;
if(direction) //读
{
Rtc_Read(time);
}
else //写
{
Rtc_Write(time);
}
}