arduino_midi_player/Midi/music-box-nv32-master/nv32lib/drivers/rtc/rtc.c
2025-03-24 14:30:56 +08:00

138 lines
2.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************!
* 技术讨论QQ群 123763203
* 官网 www.navota.com
*
* @file rtc.c
* @brief rtc定时器函数库
* @author Navota
* @date 2018-3-1
***************************************************************************/
#include "common.h"
#include "rtc.h"
/*!
* @brief 存放中断回调入口
*
*/
RTC_CallbackType RTC_Callback[1] = {(RTC_CallbackType)NULL};
void RTC_Isr(void);
/******************************************************************************
* 定义RTC的接口函数
*******************************************************************************/
/*****************************************************************************//*!
*
* @brief 初始化RTC模块
*
* @param[in] pConfig 配置RTC模块的结构体
*
* @return none
*
*****************************************************************************/
void RTC_Init(RTC_ConfigType *pConfig)
{
uint16_t u16Clocksource, u16Prescler;
uint16_t u16ModVal;
u16Clocksource =0;
u16Prescler =0;
u16ModVal =0;
SIM->SCGC |= SIM_SCGC_RTC_MASK;
u16ModVal = pConfig->u16ModuloValue;
RTC_SetModulo(u16ModVal);
if (pConfig->bRTCOut)
{
RTC->SC= RTC_SC_RTCO_MASK;
}
if (pConfig->bInterruptEn)
{
NVIC_EnableIRQ(RTC_IRQn);
RTC_EnableInt();
}
else
{
NVIC_DisableIRQ(RTC_IRQn);
}
if (pConfig->bFlag)
{
RTC_ClrFlags();
}
u16Clocksource = pConfig->bClockSource;
u16Prescler = pConfig->bClockPresaler;
RTC_SetClock(u16Clocksource,u16Prescler );
}
/*****************************************************************************//*!
*
* @brief 设置RTC模块的中断回调函数
*
* @param[in] pfnCallback 回调函数的地址
*
* @return none
*
*****************************************************************************/
void RTC_SetCallback(RTC_CallbackType pfnCallback)
{
RTC_Callback[0] = pfnCallback;
}
/*****************************************************************************//*!
*
* @brief 复位RTC模块
*
* @param none
*
* @return none
*
*****************************************************************************/
void RTC_DeInit(void)
{
NVIC_DisableIRQ(RTC_IRQn);
RTC->MOD = 0;
while(RTC->MOD);
if(RTC_GetFlags())
{
RTC_ClrFlags();
}
RTC->SC = 0;
while(RTC->SC);
SIM->SCGC &= ~SIM_SCGC_RTC_MASK;
}
/*****************************************************************************//*!
*
* @brief RTC中断服务函数
*
* @param none
*
* @return none
*
*****************************************************************************/
void RTC_Isr(void)
{
RTC_ClrFlags(); //清除中断标志位
if (RTC_Callback[0])
{
RTC_Callback[0]();
}
}