123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- /******************************************************************************
- * Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved.
- *
- * This software is owned and published by:
- * Huada Semiconductor Co.,Ltd ("HDSC").
- *
- * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
- * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
- *
- * This software contains source code for use with HDSC
- * components. This software is licensed by HDSC to be adapted only
- * for use in systems utilizing HDSC components. HDSC shall not be
- * responsible for misuse or illegal use of this software for devices not
- * supported herein. HDSC is providing this software "AS IS" and will
- * not be responsible for issues arising from incorrect user implementation
- * of the software.
- *
- * Disclaimer:
- * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
- * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
- * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
- * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
- * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
- * WARRANTY OF NONINFRINGEMENT.
- * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
- * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
- * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
- * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
- * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
- * SAVINGS OR PROFITS,
- * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
- * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
- * FROM, THE SOFTWARE.
- *
- * This software may be replicated in part or whole for the licensed use,
- * with the restriction that this Disclaimer and Copyright notice must be
- * included with each copy of this software, whether used in part or whole,
- * at all times.
- */
- /*****************************************************************************/
- /** \file rtc.h
- **
- ** Headerfile for RTC functions
- **
- **
- ** History:
- ** - 2017-05-10 Cathy First Version
- **
- *****************************************************************************/
- #ifndef __RTC_H__
- #define __RTC_H__
- /*****************************************************************************
- * Include files
- *****************************************************************************/
- #include "ddl.h"
- #include "interrupts_hc32l136.h"
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /**
- ******************************************************************************
- ** \defgroup RtcGroup Real Time Clock (RTC)
- **
- ******************************************************************************/
- //@{
- /******************************************************************************/
- /* Global pre-processor symbols/macros ('#define') */
- /******************************************************************************/
- /******************************************************************************
- * Global type definitions
- ******************************************************************************/
- /**
- ******************************************************************************
- ** \brief rtc时钟源选择
- *****************************************************************************/
- typedef enum en_rtc_clk
- {
- RtcClk32768 = 0u, ///<外部32.768k
- RtcClk32768_1 = 1u, ///<外部32.768k
- RtcClk32 = 2u, ///<内部RC32
- RtcClk32_1 = 3u, ///<内部RC32
- RtcClkHxt128 = 4u, ///<外部晶振4M
- RtcClkHxt256 = 5u, ///<外部晶振8M
- RtcClkHxt512 = 6u, ///<外部晶振16M
- RtcClkHxt1024 = 7u, ///<外部晶振32M
- }en_rtc_clk_t;
- /**
- ******************************************************************************
- ** \brief rtc周期中断方式选择
- *****************************************************************************/
- typedef enum en_rtc_cyc
- {
- RtcPrads = 0u, ///<月、天、时分秒
- RtcPradx = 1u, ///<step 0.5s
- }en_rtc_cyc_t;
- /**
- ******************************************************************************
- ** \brief rtc 12h制或24h制方式选择
- *****************************************************************************/
- typedef enum en_rtc_ampm
- {
- Rtc12h = 0u, ///<12h
- Rtc24h = 1u, ///<24h
- }en_rtc_ampm_t;
- /**
- ******************************************************************************
- ** \brief prds中断周期
- *****************************************************************************/
- typedef enum en_rtc_cycprds
- {
- Rtc_None = 0u, ///<无周期中断
- Rtc_05S = 1u, ///<0.5S中断
- Rtc_1S = 2u, ///<1s
- Rtc_1Min = 3u, ///<1min
- Rtc_1H = 4u, ///<1h
- Rtc_1Day = 5u, ///<1d
- Rtc_1Mon = 6u, ///<1月
- Rtc_1Mon_1 = 7u, ///<1月
- }en_rtc_cycprds_t;
- /**
- ******************************************************************************
- ** \brief rtc周期中断总配置
- *****************************************************************************/
- typedef struct stc_rtc_cyc_sel
- {
- en_rtc_cyc_t enCyc_sel; ///<周期类型配置
- en_rtc_cycprds_t enPrds_sel;///<周期配置
- uint8_t u8Prdx;
- }stc_rtc_cyc_sel_t;
- /**
- ******************************************************************************
- ** \brief 闹钟源配置
- *****************************************************************************/
- typedef struct stc_rtc_alarmset
- {
- uint8_t u8Minute; ///<闹钟分钟
- uint8_t u8Hour; ///<闹钟小时
- uint8_t u8Week; ///<闹钟周
- }stc_rtc_alarmset_t;
- /**
- ******************************************************************************
- ** \brief 闹钟中断使能设置
- *****************************************************************************/
- typedef enum en_rtc_alarmirq
- {
- Rtc_AlarmInt_Disable = 0u,///<闹钟中断禁止
- Rtc_AlarmInt_Enable = 1u,///<闹钟中断使能
- }en_rtc_alarmirq_t;
- /**
- ******************************************************************************
- ** \brief rtc 1hz补偿功能开启设置
- *****************************************************************************/
- typedef enum en_rtc_compen_en
- {
- Rtc_Comp_Disable = 0u,///<时钟补偿禁止
- Rtc_Comp_Enable = 1u,///<时钟补偿使能
- }en_rtc_compen_en_t;
- /**
- ******************************************************************************
- ** \brief rtc计数功能使能设置
- *****************************************************************************/
- typedef enum en_rtc_count_en
- {
- Rtc_Count_Disable = 0u,///<计数禁止
- Rtc_Count_Enable = 1u,///<计数使能
- }en_rtc_count_en_t;
- /**
- ******************************************************************************
- ** \brief rtc计数模式还是读写模式状态
- *****************************************************************************/
- typedef enum en_rtc_status
- {
- RtcRunStatus = 0u, ///<计数状态
- RtcRdWStatus = 1u, ///<读写状态
- }en_rtc_status_t;
- /**
- ******************************************************************************
- ** \brief rtc 中断请求标志
- *****************************************************************************/
- typedef enum en_rtc_status_irq
- {
- RtcAlmf = 0u, ///<闹钟中断请求
- RtcPrdf = 1u, ///<周期中断请求
- }en_rtc_status_irq_t;
- /**
- ******************************************************************************
- ** \brief rtc时钟年、月、日、时、分、秒读写结构
- *****************************************************************************/
- typedef struct stc_rtc_time
- {
- uint8_t u8Second; ///<秒
- uint8_t u8Minute; ///<分
- uint8_t u8Hour; ///<时
- uint8_t u8DayOfWeek; ///<周
- uint8_t u8Day; ///<日
- uint8_t u8Month; ///<月
- uint8_t u8Year; ///<年
- } stc_rtc_time_t;
- /**
- ******************************************************************************
- ** \brief rtc功能描述
- ******************************************************************************/
- typedef enum en_rtc_func
- {
- RtcCount = 0u, ///< RTC计数使能
- RtcAlarmEn = 1u, ///< RTC闹钟使能
- Rtc_ComenEn = 2u, ///<RTC补偿使能
- Rtc1HzOutEn = 3u, ///<使能1hz输出
- }en_rtc_func_t;
- /**
- ******************************************************************************
- ** \brief rtc 闹钟及周期中断处理函数
- *****************************************************************************/
- typedef struct stc_rtc_irq_cb
- {
- func_ptr_t pfnAlarmIrqCb; ///<闹钟中断服务函数
- func_ptr_t pfnTimerIrqCb; ///<周期中断服务函数
- }stc_rtc_irq_cb_t, stc_rtc_intern_cb_t;
- /**
- ******************************************************************************
- ** \brief rtc 总体配置结构体
- *****************************************************************************/
- typedef struct stc_rtc_config
- {
- en_rtc_clk_t enClkSel; ///<时钟源配置
- en_rtc_ampm_t enAmpmSel; ///<时制配置
- stc_rtc_cyc_sel_t* pstcCycSel; ///<周期配置
- stc_rtc_time_t* pstcTimeDate; ///<时间日期初值配置
- stc_rtc_irq_cb_t* pstcIrqCb; ///<中断服务函数
- boolean_t bTouchNvic; ///<NVIC中断配置
- } stc_rtc_config_t;
- //rtc 计数时钟源选择
- en_result_t Rtc_SelClk(en_rtc_clk_t enClk);
- //rtc 计数周期设置
- en_result_t Rtc_SetCyc(stc_rtc_cyc_sel_t* pstcCyc);
- //rtc ampm模式设置
- en_result_t Rtc_SetAmPm(en_rtc_ampm_t enMode);
- //rtc时制模式获取
- boolean_t Rtc_GetHourMode(void);
- //rtc 闹钟相关配置
- en_result_t Rtc_SetAlarmTime(stc_rtc_alarmset_t* pstcAlarmTime);
- en_result_t Rtc_GetAlarmTime(stc_rtc_alarmset_t* pstcAlarmTime);
- //1hz 输出模式及补偿值设置
- en_result_t Rtc_Set1HzMode(boolean_t bMode);
- en_result_t Rtc_SetCompCr(uint16_t u16Cr);
- //周计算
- uint8_t Rtc_CalWeek(uint8_t* pu8Date);
- //判断是否闰年
- uint8_t Rtc_CheckLeapYear(uint8_t u8year);
- //12时制上午或下午读取
- boolean_t Rtc_RDAmPm(void);
- //rtc 读写时间计数器
- en_result_t Rtc_WriteDateTime(stc_rtc_time_t* pstcTimeDate,boolean_t bUpdateTime,
- boolean_t bUpdateDate);
- en_result_t Rtc_ReadDateTime(stc_rtc_time_t* pstcTimeDate);
- //格式转换函数
- uint8_t Change_DateTimeFormat(uint8_t u8sr);
- //时间格式检查函数
- en_result_t Rtc_CheckDateTimeFormat(uint8_t* pu8TimeDate,uint8_t u8Mode);
- //数据大小判断函数
- en_result_t Check_BCD_Format(uint8_t u8data, uint8_t u8limit_min, uint8_t u8limit_max);
- //获取某年某月最大天数
- uint8_t Get_Month_Max_Day(uint8_t u8month, uint8_t u8year);
- //rtc 读取当前状态(读写状态或计数状态),中断请求状态、中断清除状态
- en_result_t Rtc_EnAlarmIrq(en_rtc_alarmirq_t enIrqEn);
- boolean_t Rtc_RDStatus(void);
- boolean_t Rtc_GetIrqStatus(en_rtc_status_irq_t enIrqSel);
- en_result_t Rtc_ClrIrqStatus(en_rtc_status_irq_t enIrqSel);
- //rtc功能使能禁止函数
- en_result_t Rtc_EnableFunc(en_rtc_func_t enFunc);
- en_result_t Rtc_DisableFunc(en_rtc_func_t enFunc);
- //rtc初始化、禁止函数
- en_result_t Rtc_Init(stc_rtc_config_t* pstcRtcConfig);
- en_result_t Rtc_DeInit(void);
- //@} // RtcGroup
- #ifdef __cplusplus
- #endif
- #endif /* __RTC_H__ */
- /******************************************************************************
- * EOF (not truncated)
- *****************************************************************************/
|