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

📄 rtc.c

📁 周立功2103开发板CD资料
💻 C
字号:
/*********************************************************************************************************
**文件名称: RTC.c
**功能说明: RTC操作软件包
**使用说明: 
********************************************************************************************************/

#include "config.h"
#include "RTC.h"


/*********************************************************************************************************
**函数名称:void RTCInit(uint8 clksrc)
**函数功能:RTC初始化操作
**入口参数:clksrc        RTC时钟源选择。 0 :时钟源为VBP    >0 : 时钟源为外部晶振
**出口参数:无
**说明:
********************************************************************************************************/
void RTCInit(uint8 clksrc)
{
    PREINT = Fpclk / 32768 - 1;	// 设置基准时钟分频器
	PREFRAC = Fpclk - (Fpclk / 32768) * 32768;

    ILR = 0x03;   //清除RTC增量和报警中断标志
    CCR = 0x02;	  //清零CTC,禁止RTC
    if(clksrc > 0)
    {
        CCR = 0x01|0x10;  //时钟源为外部晶振
    }
    else
    {
        CCR = 0x01;//时钟源为VBP
    }
    
 
}


/*********************************************************************************************************
**函数名称:uint8 SetRTCtime(RTCtime time)
**函数功能:设置RTC的时间
**入口参数:time        时间值结构体
**出口参数:0 :参数错误
**          1 :操作成功 
**说明:
********************************************************************************************************/
uint8 SetRTCtime(RTCtime time)
{
    if(time.sec > 59) return 0;
    if(time.min > 59) return 0;
    if(time.hour > 23) return 0;
    if(time.day > 31) return 0;
    if(time.week > 6) return 0;
    if(time.month > 12) return 0;
    if(time.year > 4095) return 0;
    
    SEC =  time.sec;
    MIN = time.min;
    HOUR = time.hour;
    DOM = time.day;
    DOW = time.week;
    MONTH = time.month;
    YEAR = time.year;             
    return 1;  
}


/*********************************************************************************************************
**函数名称:void GetRTCtime(RTCtime *ptime)
**函数功能:获取RTC的时间
**入口参数:*ptime        时间值结构体指针
**出口参数:无 
**说明:
********************************************************************************************************/
void GetRTCtime(RTCtime *ptime)
{
    uint32 tmp0,tmp1;
    
    tmp0 = CTIME0;
    tmp1 = CTIME1;
    
    ptime->sec = tmp0 & 0x000000FF;
    ptime->min = (tmp0 >> 8) & 0x000000FF;
    ptime->hour = (tmp0 >>16) & 0x000000FF;
    ptime->week =(tmp0 >>24)& 0x000000FF;
    
    ptime->day = tmp1 & 0x000000FF;
    ptime->month = (tmp1>>8) & 0x000000FF;
    ptime->year = (tmp1>>16) & 0x0000FFFF; 
     
}



/*********************************************************************************************************
**函数名称:void SetAMR(uint8 val)
**函数功能:设置报警屏蔽
**入口参数:val   报警屏蔽控制字节,按位操作
                                    bit0   1---屏蔽秒值	          0---不屏蔽秒值
                                    bit1   1---屏蔽分值			  0---不屏蔽分值
                                    bit2   1---屏蔽小时值		  0---不屏蔽小时值
                                    bit3   1---屏蔽日期(月)值	  0---不屏蔽日期(月)值
                                    bit4   1---屏蔽星期值		  0---不屏蔽星期值
                                    bit5   1---屏蔽日期(年)值	  0---不屏蔽日期(年)值
                                    bit6   1---屏蔽月值           0---不屏蔽月值
                                    bit7   1---屏蔽年值           0---不屏蔽年值 
**出口参数:无 
**说明:
********************************************************************************************************/
void SetAMR(uint8 val)
{
    AMR = val;        
}


/*********************************************************************************************************
**函数名称:uint8 SetAlarmTime(uint8 type, uint32 time)
**函数功能:设置报警时间值
**入口参数:type    时间类型。取值如下:0:秒    
                                        1:分  
                                        2:时                                        
                                        3:日期(月)
                                        4:星期
                                        5:日期(年)
                                        6:月
                                        7:年
                                        
            time    时间值。根据类型不同,时间值的范围也不同。
**出口参数:0 :参数错误
**          1 :操作成功  
**说明:
********************************************************************************************************/
uint8 SetAlarmTime(uint8 type, uint32 time)
{
    switch(type)
    {
    case 0:	  //秒
        if(time > 59) return 0;
        ALSEC = time;
        break;
    case 1:	  //分
        if(time > 59) return 0;
        ALMIN = time;
        break;
    case 2:	  //时
        if(time > 23) return 0;
        ALHOUR = time;
        break;
    case 3:	   //日期(月)
        if(time > 31) return 0;
        ALDOM = time;
        break;
    case 4:	   // 星期
        if(time > 6) return 0;
        ALDOW = time;
        break;
    case 5:    //日期(年)
        if(time > 366) return 0;
        ALDOY = time;
        break;
    case 6:    //月
        if(time > 12) return 0;
        ALMON = time;
        break;
    case 7:
        if(time > 4095) return 0;
        ALYEAR = time;
        break;
    default :
        return 0;  //参数错误                                            
    }
    
    return 1;      
}


/*********************************************************************************************************
**函数名称:uint8 SetCIIR(uint8 type)
**函数功能:设置计数增量中断类型
**入口参数:type    增量中断类型。按位操作:
                    bit0:1 使能秒增量中断    	    0  禁止
                    bit1:1 使能分增量中断  	    0  禁止
                    bit2:1 使能时增量中断          0  禁止                                
                    bit3:1 使能日期(月)增量中断  0  禁止
                    bit4:1 使能星期增量中断	    0  禁止
                    bit5:1 使能日期(年)增量中断  0  禁止
                    bit6:1 使能月增量中断		    0  禁止
                    bit7:1 使能年增量中断          0  禁止
**出口参数:0 :参数错误
**          1 :操作成功  
**说明:
********************************************************************************************************/
uint8 SetCIIR(uint8 type)
{
    CIIR = type;
    return 1;
}


/*********************************************************************************************************
**函数名称:uint8 IsIncInt(void)
**函数功能:判断是否增量中断产生
**入口参数:无
**出口参数:0 :无增量中断产生
**          1 :有增量中断产生  
**说明:
********************************************************************************************************/
uint8 IsIncInt(void)
{
    return (ILR & 0x01); 
}


/*********************************************************************************************************
**函数名称:void CleanIncInt(void)
**函数功能:清零增量中断标志
**入口参数:无
**出口参数:无  
**说明:
********************************************************************************************************/
void CleanIncInt(void)
{
    ILR = 0x01;        
}


/*********************************************************************************************************
**函数名称:uint8 IsAlarmInt(void)
**函数功能:判断是否报警中断产生
**入口参数:无
**出口参数:0 :无报警中断产生
**          1 :有报警中断产生  
**说明:
********************************************************************************************************/
uint8 IsAlarmInt(void)
{
    return ((ILR & 0x02)>>1);    
}


/*********************************************************************************************************
**函数名称:void CleanAlarmInt(void)
**函数功能:清零报警中断标志
**入口参数:无
**出口参数:无  
**说明:
********************************************************************************************************/
void CleanAlarmInt(void)
{
    ILR = 0x02;
}

⌨️ 快捷键说明

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