mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
485 lines
12 KiB
C
485 lines
12 KiB
C
/********************************** (C) COPYRIGHT *******************************
|
||
* File Name : CH58x_clk.c
|
||
* Author : WCH
|
||
* Version : V1.2
|
||
* Date : 2021/11/17
|
||
* Description
|
||
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*******************************************************************************/
|
||
|
||
#include "CH58x_common.h"
|
||
|
||
/*********************************************************************
|
||
* @fn LClk32K_Select
|
||
*
|
||
* @brief 32K <20><>Ƶʱ<C6B5><CAB1><EFBFBD><EFBFBD>Դ
|
||
*
|
||
* @param hc - ѡ<><D1A1>32Kʹ<4B><CAB9><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ
|
||
*
|
||
* @return none
|
||
*/
|
||
void LClk32K_Select(LClk32KTypeDef hc)
|
||
{
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
if(hc == Clk32K_LSI)
|
||
{
|
||
R8_CK32K_CONFIG &= ~RB_CLK_OSC32K_XT;
|
||
}
|
||
else
|
||
{
|
||
R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT;
|
||
}
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn HSECFG_Current
|
||
*
|
||
* @brief HSE<53><45><EFBFBD><EFBFBD> ƫ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param c - 75%,100%,125%,150%
|
||
*
|
||
* @return none
|
||
*/
|
||
void HSECFG_Current(HSECurrentTypeDef c)
|
||
{
|
||
uint8_t x32M_c;
|
||
|
||
x32M_c = R8_XT32M_TUNE;
|
||
x32M_c = (x32M_c & 0xfc) | (c & 0x03);
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_XT32M_TUNE = x32M_c;
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn HSECFG_Capacitance
|
||
*
|
||
* @brief HSE<53><45><EFBFBD><EFBFBD> <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param c - refer to HSECapTypeDef
|
||
*
|
||
* @return none
|
||
*/
|
||
void HSECFG_Capacitance(HSECapTypeDef c)
|
||
{
|
||
uint8_t x32M_c;
|
||
|
||
x32M_c = R8_XT32M_TUNE;
|
||
x32M_c = (x32M_c & 0x8f) | (c << 4);
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_XT32M_TUNE = x32M_c;
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn LSECFG_Current
|
||
*
|
||
* @brief LSE<53><45><EFBFBD><EFBFBD> ƫ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param c - 70%,100%,140%,200%
|
||
*
|
||
* @return none
|
||
*/
|
||
void LSECFG_Current(LSECurrentTypeDef c)
|
||
{
|
||
uint8_t x32K_c;
|
||
|
||
x32K_c = R8_XT32K_TUNE;
|
||
x32K_c = (x32K_c & 0xfc) | (c & 0x03);
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_XT32K_TUNE = x32K_c;
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn LSECFG_Capacitance
|
||
*
|
||
* @brief LSE<53><45><EFBFBD><EFBFBD> <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param c - refer to LSECapTypeDef
|
||
*
|
||
* @return none
|
||
*/
|
||
void LSECFG_Capacitance(LSECapTypeDef c)
|
||
{
|
||
uint8_t x32K_c;
|
||
|
||
x32K_c = R8_XT32K_TUNE;
|
||
x32K_c = (x32K_c & 0x0f) | (c << 4);
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_XT32K_TUNE = x32K_c;
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn Calibration_LSI
|
||
*
|
||
* @brief У<D0A3>ڲ<EFBFBD>32Kʱ<4B><CAB1>
|
||
*
|
||
* @param cali_Lv - У<D0A3>ȼ<EFBFBD>ѡ<EFBFBD><D1A1> Level_32 - <20><>ʱ 1.2ms 1000ppm (32M <20><>Ƶ) 1100ppm (64M <20><>Ƶ)
|
||
* Level_64 - <20><>ʱ 2.2ms 800ppm (32M <20><>Ƶ) 1000ppm (64M <20><>Ƶ)
|
||
* Level_128 - <20><>ʱ 4.2ms 600ppm (32M <20><>Ƶ) 800ppm (64M <20><>Ƶ)
|
||
*
|
||
* @return none
|
||
*/
|
||
void Calibration_LSI(Cali_LevelTypeDef cali_Lv)
|
||
{
|
||
UINT32 i;
|
||
INT32 cnt_offset;
|
||
UINT8 retry = 0;
|
||
INT32 freq_sys;
|
||
|
||
freq_sys = GetSysClock();
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_CK32K_CONFIG |= RB_CLK_OSC32K_FILT;
|
||
R8_CK32K_CONFIG &= ~RB_CLK_OSC32K_FILT;
|
||
R8_XT32K_TUNE &= ~3;
|
||
R8_XT32K_TUNE |= 1;
|
||
|
||
// <20>ֵ<EFBFBD>
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_OSC_CAL_CTRL &= ~RB_OSC_CNT_TOTAL;
|
||
R8_OSC_CAL_CTRL |= 1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_OSC_CAL_CTRL |= RB_OSC_CNT_EN;
|
||
R16_OSC_CAL_CNT |= RB_OSC_CAL_OV_CLR;
|
||
while(1)
|
||
{
|
||
while(!(R8_OSC_CAL_CTRL & RB_OSC_CNT_HALT));
|
||
i = R16_OSC_CAL_CNT; // <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>
|
||
while(R8_OSC_CAL_CTRL & RB_OSC_CNT_HALT);
|
||
R16_OSC_CAL_CNT |= RB_OSC_CAL_OV_CLR;
|
||
while(!(R8_OSC_CAL_CTRL & RB_OSC_CNT_HALT));
|
||
i = R16_OSC_CAL_CNT; // ʵʱУ<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||
cnt_offset = (i & 0x3FFF) + R8_OSC_CAL_OV_CNT * 0x3FFF - 2000 * (freq_sys / 1000) / CAB_LSIFQ;
|
||
if(((cnt_offset > -37 * (freq_sys / 1000) / CAB_LSIFQ) && (cnt_offset < 37 * (freq_sys / 1000) / CAB_LSIFQ)) || retry > 2)
|
||
break;
|
||
retry++;
|
||
cnt_offset = (cnt_offset > 0) ? (((cnt_offset * 2) / (37 * (freq_sys / 1000) / CAB_LSIFQ)) + 1) / 2 : (((cnt_offset * 2) / (37 * (freq_sys / 1000) / CAB_LSIFQ)) - 1) / 2;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R16_INT32K_TUNE += cnt_offset;
|
||
}
|
||
|
||
// ϸ<><CFB8>
|
||
// <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3ACB6><EFBFBD>2<EFBFBD>β<EFBFBD><CEB2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>
|
||
while(!(R8_OSC_CAL_CTRL & RB_OSC_CNT_HALT));
|
||
i = R16_OSC_CAL_CNT; // <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>
|
||
R16_OSC_CAL_CNT |= RB_OSC_CAL_OV_CLR;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_OSC_CAL_CTRL &= ~RB_OSC_CNT_TOTAL;
|
||
R8_OSC_CAL_CTRL |= cali_Lv;
|
||
while(R8_OSC_CAL_CTRL & RB_OSC_CNT_HALT);
|
||
while(!(R8_OSC_CAL_CTRL & RB_OSC_CNT_HALT));
|
||
i = R16_OSC_CAL_CNT; // ʵʱУ<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||
cnt_offset = (i & 0x3FFF) + R8_OSC_CAL_OV_CNT * 0x3FFF - 4000 * (1 << cali_Lv) * (freq_sys / 1000000) / CAB_LSIFQ * 1000;
|
||
cnt_offset = (cnt_offset > 0) ? ((((cnt_offset * (3200 / (1 << cali_Lv))) / (1366 * (freq_sys / 1000) / CAB_LSIFQ)) + 1) / 2) << 5 : ((((cnt_offset * (3200 / (1 << cali_Lv))) / (1366 * (freq_sys / 1000) / CAB_LSIFQ)) - 1) / 2) << 5;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R16_INT32K_TUNE += cnt_offset;
|
||
R8_OSC_CAL_CTRL &= ~RB_OSC_CNT_EN;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTCInitTime
|
||
*
|
||
* @brief RTCʱ<43>ӳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰʱ<C7B0><CAB1>
|
||
*
|
||
* @param y - <20><><EFBFBD><EFBFBD><EFBFBD>꣬MAX_Y = BEGYEAR + 44
|
||
* @param mon - <20><><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>MAX_MON = 12
|
||
* @param d - <20><><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>MAX_D = 31
|
||
* @param h - <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>MAX_H = 23
|
||
* @param m - <20><><EFBFBD>÷<EFBFBD><C3B7>ӣ<EFBFBD>MAX_M = 59
|
||
* @param s - <20><><EFBFBD><EFBFBD><EFBFBD>룬MAX_S = 59
|
||
*
|
||
* @return none
|
||
*/
|
||
void RTC_InitTime(uint16_t y, uint16_t mon, uint16_t d, uint16_t h, uint16_t m, uint16_t s)
|
||
{
|
||
uint32_t t;
|
||
uint16_t year, month, day, sec2, t32k;
|
||
volatile uint8_t clk_pin;
|
||
|
||
year = y;
|
||
month = mon;
|
||
day = 0;
|
||
while(year > BEGYEAR)
|
||
{
|
||
day += YearLength(year - 1);
|
||
year--;
|
||
}
|
||
while(month > 1)
|
||
{
|
||
day += monthLength(IsLeapYear(y), month - 2);
|
||
month--;
|
||
}
|
||
|
||
day += d - 1;
|
||
sec2 = (h % 24) * 1800 + m * 30 + s / 2;
|
||
t32k = (s & 1) ? (0x8000) : (0);
|
||
t = sec2;
|
||
t = t << 16 | t32k;
|
||
|
||
do
|
||
{
|
||
clk_pin = (R8_CK32K_CONFIG & RB_32K_CLK_PIN);
|
||
} while(clk_pin != (R8_CK32K_CONFIG & RB_32K_CLK_PIN));
|
||
if(!clk_pin)
|
||
{
|
||
while(!clk_pin)
|
||
{
|
||
do
|
||
{
|
||
clk_pin = (R8_CK32K_CONFIG & RB_32K_CLK_PIN);
|
||
} while(clk_pin != (R8_CK32K_CONFIG & RB_32K_CLK_PIN));
|
||
}
|
||
}
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R32_RTC_TRIG = day;
|
||
R8_RTC_MODE_CTRL |= RB_RTC_LOAD_HI;
|
||
while((R32_RTC_TRIG & 0x3FFF) != (R32_RTC_CNT_DAY & 0x3FFF));
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R32_RTC_TRIG = t;
|
||
R8_RTC_MODE_CTRL |= RB_RTC_LOAD_LO;
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_GetTime
|
||
*
|
||
* @brief <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
|
||
*
|
||
* @param py - <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>꣬MAX_Y = BEGYEAR + 44
|
||
* @param pmon - <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>MAX_MON = 12
|
||
* @param pd - <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>MAX_D = 31
|
||
* @param ph - <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>MAX_H = 23
|
||
* @param pm - <20><>ȡ<EFBFBD><C8A1><EFBFBD>ķ<EFBFBD><C4B7>ӣ<EFBFBD>MAX_M = 59
|
||
* @param ps - <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>룬MAX_S = 59
|
||
*
|
||
* @return none
|
||
*/
|
||
void RTC_GetTime(uint16_t *py, uint16_t *pmon, uint16_t *pd, uint16_t *ph, uint16_t *pm, uint16_t *ps)
|
||
{
|
||
uint32_t t;
|
||
uint16_t day, sec2, t32k;
|
||
|
||
day = R32_RTC_CNT_DAY & 0x3FFF;
|
||
sec2 = R16_RTC_CNT_2S;
|
||
t32k = R16_RTC_CNT_32K;
|
||
|
||
t = sec2 * 2 + ((t32k < 0x8000) ? 0 : 1);
|
||
|
||
*py = BEGYEAR;
|
||
while(day >= YearLength(*py))
|
||
{
|
||
day -= YearLength(*py);
|
||
(*py)++;
|
||
}
|
||
|
||
*pmon = 0;
|
||
while(day >= monthLength(IsLeapYear(*py), *pmon))
|
||
{
|
||
day -= monthLength(IsLeapYear(*py), *pmon);
|
||
(*pmon)++;
|
||
}
|
||
(*pmon)++;
|
||
*pd = day + 1;
|
||
*ph = t / 3600;
|
||
*pm = t % 3600 / 60;
|
||
*ps = t % 60;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_SetCycle32k
|
||
*
|
||
* @brief <20><><EFBFBD><EFBFBD>LSE/LSIʱ<49>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD>õ<EFBFBD>ǰRTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param cyc - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>MAX_CYC = 0xA8BFFFFF = 2831155199
|
||
*
|
||
* @return none
|
||
*/
|
||
void RTC_SetCycle32k(uint32_t cyc)
|
||
{
|
||
volatile uint8_t clk_pin;
|
||
|
||
do
|
||
{
|
||
clk_pin = (R8_CK32K_CONFIG & RB_32K_CLK_PIN);
|
||
} while((clk_pin != (R8_CK32K_CONFIG & RB_32K_CLK_PIN)) || (!clk_pin));
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R32_RTC_TRIG = cyc;
|
||
R8_RTC_MODE_CTRL |= RB_RTC_LOAD_LO;
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_GetCycle32k
|
||
*
|
||
* @brief <20><><EFBFBD><EFBFBD>LSE/LSIʱ<49>ӣ<EFBFBD><D3A3><EFBFBD>ȡ<EFBFBD><C8A1>ǰRTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param none
|
||
*
|
||
* @return <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAX_CYC = 0xA8BFFFFF = 2831155199
|
||
*/
|
||
uint32_t RTC_GetCycle32k(void)
|
||
{
|
||
volatile uint32_t i;
|
||
|
||
do
|
||
{
|
||
i = R32_RTC_CNT_32K;
|
||
} while(i != R32_RTC_CNT_32K);
|
||
|
||
return (i);
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_TMRFunCfg
|
||
*
|
||
* @brief RTC<54><43>ʱģʽ<C4A3><CABD><EFBFBD>ã<EFBFBD>ע<EFBFBD>ⶨʱ<E2B6A8><CAB1><EFBFBD>̶<EFBFBD>Ϊ32768Hz<48><7A>
|
||
*
|
||
* @param t - refer to RTC_TMRCycTypeDef
|
||
*
|
||
* @return none
|
||
*/
|
||
void RTC_TMRFunCfg(RTC_TMRCycTypeDef t)
|
||
{
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_RTC_MODE_CTRL &= ~(RB_RTC_TMR_EN | RB_RTC_TMR_MODE);
|
||
R8_RTC_MODE_CTRL |= RB_RTC_TMR_EN | (t);
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_TRIGFunCfg
|
||
*
|
||
* @brief RTCʱ<43>䴥<EFBFBD><E4B4A5>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
|
||
*
|
||
* @param cyc - <20><><EFBFBD>Ե<EFBFBD>ǰʱ<C7B0><CAB1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>LSE/LSIʱ<49><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
*
|
||
* @return none
|
||
*/
|
||
void RTC_TRIGFunCfg(uint32_t cyc)
|
||
{
|
||
uint32_t t;
|
||
|
||
t = RTC_GetCycle32k() + cyc;
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R32_RTC_TRIG = t;
|
||
R8_RTC_MODE_CTRL |= RB_RTC_TRIG_EN;
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_ModeFunDisable
|
||
*
|
||
* @brief RTC ģʽ<C4A3><CABD><EFBFBD>ܹر<DCB9>
|
||
*
|
||
* @param m - <20><>Ҫ<EFBFBD>رյĵ<D5B5>ǰģʽ
|
||
*
|
||
* @return none
|
||
*/
|
||
void RTC_ModeFunDisable(RTC_MODETypeDef m)
|
||
{
|
||
uint8_t i = 0;
|
||
|
||
if(m == RTC_TRIG_MODE)
|
||
{
|
||
i |= RB_RTC_TRIG_EN;
|
||
}
|
||
else if(m == RTC_TMR_MODE)
|
||
{
|
||
i |= RB_RTC_TMR_EN;
|
||
}
|
||
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
|
||
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
|
||
SAFEOPERATE;
|
||
R8_RTC_MODE_CTRL &= ~(i);
|
||
R8_SAFE_ACCESS_SIG = 0;
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_GetITFlag
|
||
*
|
||
* @brief <20><>ȡRTC<54>жϱ<D0B6>־
|
||
*
|
||
* @param f - refer to RTC_EVENTTypeDef
|
||
*
|
||
* @return <20>жϱ<D0B6>־״̬
|
||
*/
|
||
uint8_t RTC_GetITFlag(RTC_EVENTTypeDef f)
|
||
{
|
||
if(f == RTC_TRIG_EVENT)
|
||
{
|
||
return (R8_RTC_FLAG_CTRL & RB_RTC_TRIG_FLAG);
|
||
}
|
||
else
|
||
{
|
||
return (R8_RTC_FLAG_CTRL & RB_RTC_TMR_FLAG);
|
||
}
|
||
}
|
||
|
||
/*********************************************************************
|
||
* @fn RTC_ClearITFlag
|
||
*
|
||
* @brief <20><><EFBFBD><EFBFBD>RTC<54>жϱ<D0B6>־
|
||
*
|
||
* @param f - refer to RTC_EVENTTypeDef
|
||
*
|
||
* @return none
|
||
*/
|
||
void RTC_ClearITFlag(RTC_EVENTTypeDef f)
|
||
{
|
||
switch(f)
|
||
{
|
||
case RTC_TRIG_EVENT:
|
||
R8_RTC_FLAG_CTRL = RB_RTC_TRIG_CLR;
|
||
break;
|
||
case RTC_TMR_EVENT:
|
||
R8_RTC_FLAG_CTRL = RB_RTC_TMR_CLR;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|