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

📄 rtc.c

📁 嵌入式系统
💻 C
📖 第 1 页 / 共 2 页
字号:
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: Enable the 32.768 KHz clock input as clock source to RTC
@@
@@ [Note]	:
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCEnableClkInput(APD_VOID)
{
	*APD_RTCCHECK |= APD_RTCCHECK_CLKEN;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCDisableClkInput
@@
@@ [Summary]	: This function disables the clock input.
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: Disable the 32.768kHz clock input as source for RTC
@@
@@ [Note]       :
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCDisableClkInput(APD_VOID)
{
	*APD_RTCCHECK &= ~APD_RTCCHECK_CLKEN;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCSelectCrystalClk
@@
@@ [Summary]	: This function selects the crystal clock as clock source
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: Select the internal 32.768kHz crystal oscillator as the RTC clock source
@@
@@ [Note]	:
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCSelectCrystalClk(APD_VOID)
{
	*APD_RTCCHECK &= ~APD_RTCCHECK_CLKSEL;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCSelectExtClk
@@
@@ [Summary]	: This function selects the external RTC clock as clock source
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: Select the external 32.768kHz clock as the RTC clock source
@@
@@ [Note]	:
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCSelectExtClk(APD_VOID)
{
	*APD_RTCCHECK |= APD_RTCCHECK_CLKSEL;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCEnableAlarm
@@
@@ [Summary]	: This function enable the alarm
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: Enable the alarm
@@
@@ [Note]	:
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCEnableAlarm(APD_VOID)
{
	*APD_RTCRCSR = *APD_RTCRCSR | APD_RTCRCSR_EALM;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCDisableAlarm
@@
@@ [Summary]	: This function disable the alarm
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: Disable the alarm. It is used to turn off an alerting alarm too.
@@
@@ [Note]	:
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCDisableAlarm(APD_VOID)
{
	*APD_RTCRCSR = *APD_RTCRCSR & ~APD_RTCRCSR_EALM;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCEnterModifyMode
@@
@@ [Summary]	: This function causes RTC to enter modify mode
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: RTC enters the modify mode within 60us.
@@
@@ [Note]	: In the modify mode,
@@		  (1) the internal clock divider will be reset
@@		  (2) auto-calendar function is stopped
@@		  (3) all timekeeping is stopped
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCEnterModifyMode(APD_VOID)
{
	*APD_RTCRCSR = *APD_RTCRCSR | APD_RTCRCSR_MOD;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCExitModifyMode
@@
@@ [Summary]	: This function causes RTC to exit the modify mode.
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: RTC exits the modify mode. RTC restarts counting.
@@
@@ [Note]	:
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCExitModifyMode(APD_VOID)
{
	*APD_RTCRCSR = *APD_RTCRCSR & ~APD_RTCRCSR_MOD;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCEnterHoldMode
@@
@@ [Summary]	: This function causes RTC to enter hold mode
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: RTC enters hold mode within 60us
@@
@@ [Note]	: In the hold mode,
@@		  (1) the internal clock divider still active
@@		  (2) freeze auto-calendar function
@@		  (3) any incoming clock will be captured and released upon exit hold mode
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCEnterHoldMode(APD_VOID)
{
	*APD_RTCRCSR = *APD_RTCRCSR | APD_RTCRCSR_CHLD;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCExitHoldMode
@@
@@ [Summary]	: This function causes RTC to exit hold mode.
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: RTC exits hold mode. Any clocks captured in hold mode are relaesed.
@@
@@ [Note]	:
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCExitHoldMode(APD_VOID)
{
	*APD_RTCRCSR = *APD_RTCRCSR & ~APD_RTCRCSR_CHLD;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCEnterAdjMode
@@
@@ [Summary]	: This function causes RTC to enter adjust mode
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: RTC enters adjust mode.
@@
@@ [Note]	: In the adjust mode,
@@		  (1) the internal clock divider will be reset
@@		  (2) all timekeeping is stopped
@@
@@		  When entering the adjust mode, if the value of second regiter is equal or
@@		  greater than 30, the second register is reset to 0 and the minute advances
@@		  by 1. Otherwise, the second regsiter is reset to 0 only.
@@
@@ [History]	: 20/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCEnterAdjMode(APD_VOID)
{
	*APD_RTCRCSR = *APD_RTCRCSR | APD_RTCRCSR_ADJ;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCIsAlarmOn
@@
@@ [Summary]	: This function checks if the alarm is alerting
@@
@@ [Argument]	: None
@@
@@ [Return]	: TRUE if alarm is alerting
@@		  FALSE is alarm is not alerting
@@
@@ [Desc]	: Check if alarm is currently alerting
@@
@@ [Note]	:
@@
@@ [History]	: 17/04/2001	KW Kam		Version 1.3 New function
@@
@@ [END]
******************************************************************************/

APD_BOOLEAN apd_RTCIsAlarmOn(APD_VOID)
{
	APD_BOOLEAN result = FALSE;

	if ((*APD_RTCRCSR & APD_RTCRCSR_ALM) != 0)
		result = TRUE;

	return (result);
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCIsAlarmSet
@@
@@ [Summary]	: This function checks if the alarm is set
@@
@@ [Argument]	: None
@@
@@ [Return]	: TRUE if alarm is set
@@		  FALSE is alarm is not set
@@
@@ [Desc]	: Check if alarm is set or not.
@@
@@ [Note]	:
@@
@@ [History]	: 21/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_BOOLEAN apd_RTCIsAlarmSet(APD_VOID)
{
	APD_BOOLEAN result = FALSE;

	if ((*APD_RTCRCSR & APD_RTCRCSR_EALM) != 0)
		result = TRUE;

	return (result);
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCSetIRQFOutFreq
@@
@@ [Summary]	: This function sets the frequency of the IRQF output signal
@@
@@ [Argument]	: sirq: specify the frequency setting to the IRQF output signal
@@		  APD_RTC_NO_PULSE for no pulse
@@		  APD_RTC_1MIN for period of IRQF = 1 min
@@		  APD_RTC_1SEC for period of IRQF = 1 sec
@@		  APD_RTC_1D16SEC for period of IRQF = 1/16 sec
@@
@@ [Return]	: None
@@
@@ [Desc]	: Sets the frequency of the IRQF output signal
@@
@@ [Note]	:
@@
@@ [History]	: 21/11/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCSetIRQFOutFreq(APD_RTC_IRQF_FREQ_TYPE sirq)
{
	*APD_RTCRCSR = *APD_RTCRCSR & APD_RTCRCSR_IRQFMASK;
	*APD_RTCRCSR = *APD_RTCRCSR | sirq;
}

/******************************************************************************
@@
@@ [Name]	: apd_RTCInit
@@
@@ [Summary]	: This function initialise the RTC
@@
@@ [Argument]	: None
@@
@@ [Return]	: None
@@
@@ [Desc]	: Initialize the real time clock to no pulse.
@@
@@ [Note]	:
@@
@@ [History]	: 11/12/2000	Teo Li Li		Version 1.0
@@
@@ [END]
******************************************************************************/

APD_VOID apd_RTCInit(APD_VOID)
{
	apd_RTCSetIRQFOutFreq(APD_RTC_NO_PULSE);
	apd_RTCDisableAlarm();
}

⌨️ 快捷键说明

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