[demo程序] NV32f100 RTC 相关API

[复制链接]
592|32
 楼主 | 2018-12-27 10:30 | 显示全部楼层 |阅读模式
本帖最后由 aizaixiyuanqian 于 2018-12-27 10:34 编辑

voidRTC_Init(RTC_ConfigType*pConfig);
RTC模块的初始化配置(时钟、分频、模值、使能中断等)
voidRTC_DeInit(void);
 楼主 | 2018-12-27 10:31 | 显示全部楼层
void RTC_DeInit(void);
复位 RTC 模块

使用特权

评论回复
 楼主 | 2018-12-27 10:32 | 显示全部楼层
void RTC_SetClock(uint16_t u16Clock_Number, uint16_t u16Presalcer);
RTC 模块时钟选择及分频系数设置

使用特权

评论回复
 楼主 | 2018-12-27 10:32 | 显示全部楼层
void RTC_ClrFlags(void);
清除 RTC 模块中断标志位 RTIF

使用特权

评论回复
 楼主 | 2018-12-27 10:33 | 显示全部楼层
uint8_t RTC_GetFlags(void);
获取 RTC 模块中断标志位 RTIF

使用特权

评论回复
 楼主 | 2018-12-27 10:34 | 显示全部楼层
void RTC_DisableInt(void);
禁止 RTC 中断, 使用轮询

使用特权

评论回复
 楼主 | 2018-12-27 10:35 | 显示全部楼层
void RTC_EnableInt(void);
使能 RTC 中断

使用特权

评论回复
 楼主 | 2018-12-27 10:36 | 显示全部楼层
void RTC_Isr(void);
中断服务程序

使用特权

评论回复
 楼主 | 2018-12-27 10:36 | 显示全部楼层
void RTC_SetCallback(RTC_CallbackType pfnCallback);
设置 RTC 中断回调函数

使用特权

评论回复
 楼主 | 2018-12-27 10:39 | 显示全部楼层
本帖最后由 aizaixiyuanqian 于 2018-12-27 12:10 编辑

述 以配置结构体 pConfig 来初始化 RTC
输入参数 配置结构体 RTC_ConfigType
输出参数 无
返回值 无
先决条件 无
函数使用实例 先设置配置结构体, RTC_Init(&RTC_Config)
/*****************************************************************************//*!
* *
@初始化 RTC 模块.
* *
@输入 pConfig 指向配置结构体
* *
@无返回
* *
****************************************************************************/
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; //选通 RTC 模块时钟
u16ModVal = pConfig->u16ModuloValue;//设置 RTC 模数
RTC_SetModulo(u16ModVal);
if (pConfig->bRTCOut)
{
RTC->SC= RTC_SC_RTCO_MASK; //实时计数器输出使能
} if
(pConfig->bInterruptEn)
{
NVIC_EnableIRQ(RTC_IRQn);//使能 RTC 的 IRQ 中断
RTC_EnableInt();
}else
{
NVIC_DisableIRQ(RTC_IRQn);//禁止 RTC 的 IRQ 中断
}
if (pConfig->bFlag)
{
RTC_ClrFlags();//实时中断标志置位, RTC 计数器已达到模数寄存器中的值
} u16Clocksource = pConfig->bClockSource;
u16Prescler = pConfig->bClockPresaler;
RTC_SetClock(u16Clocksource,u16Prescler );//实时时钟源及预分频器选择
}  


使用特权

评论回复
| 2018-12-27 10:52 | 显示全部楼层
禁止 RTC 中断, 使用轮询?有例程吗?是在主函数中循环读取吗?

使用特权

评论回复
 楼主 | 2018-12-27 12:10 | 显示全部楼层
设置函数回调
函数名 RTC_SetCallback
函数原形 RTC_SetCallback(RTC_CallbackType pfnCallback)
功能描述 设置 RTC 中断回调函数的入口
输入参数 中断回调函数地址
输出参数 无
返回值 无
先决条件 无
函数使用实例 RTC_SetCallback(RTC_Task)
/*****************************************************************************//*!
* *
@设置 RTC 模块的函数回调
* *
@输入 pfnCallback 指向回调函数地址
* *
@无返回
* *
****************************************************************************/
void RTC_SetCallback(RTC_CallbackType pfnCallback)
{
RTC_Callback[0] = pfnCallback;
}

使用特权

评论回复
 楼主 | 2018-12-27 12:12 | 显示全部楼层
/*****************************************************************************//*!
* *
@复位 RTC 模块到默认状态
* *
@无返回
* *
****************************************************************************/
void RTC_DeInit(void)
{
NVIC_DisableIRQ(RTC_IRQn);//禁止 RTC 中断
RTC->MOD = 0;//装载模数值为 0
while(RTC->MOD);//确保模数器中值为 0
if(RTC_GetFlags())
{
RTC_ClrFlags();//写入 1 清零该位并清楚实时中断请求
} /*
禁用 RTC */
RTC->SC = 0;
while(RTC->SC);
SIM->SCGC &= ~SIM_SCGC_RTC_MASK;//禁用 RTC 的时钟
}

使用特权

评论回复
 楼主 | 2018-12-27 12:14 | 显示全部楼层
/*****************************************************************************//*!
* *
@为 RTC 模块提供中断服务程序 ISR
* *
@无返回
* *
****************************************************************************/
void RTC_Isr(void)
{
RTC_ClrFlags();
if (RTC_Callback[0])
{
RTC_Callback[0]();
}

使用特权

评论回复
 楼主 | 2018-12-27 12:15 | 显示全部楼层
RTC 状态和控制寄存器(RTC_SC):
31-16
保留
此字段为保留字段。
此只读字段为保留字段且值始终为 0。





使用特权

评论回复
 楼主 | 2018-12-27 12:19 | 显示全部楼层
15-14
RTCLKS
实时时钟源选择
该读/写字段选择 RTC 预分频器的时钟源输入。 更改时钟源会将预分频器和 RTCCNT 计数器
清零。 复位会将 RTCLKS 清除为 00。
00 外部时钟源
01 实时时钟源为 1kHz(LPOCLK)。
10 内部参考时钟(ICSIRCLK)。
11 总线时钟。

使用特权

评论回复
 楼主 | 2018-12-27 12:19 | 显示全部楼层
13-11
保留
此字段为保留字段。
此只读字段为保留字段且值始终为 0。

使用特权

评论回复
 楼主 | 2018-12-27 12:23 | 显示全部楼层
10-8
RTCPS
实时时钟预分频器选择
该读/写字段为时钟源选择基于二进制或基于十进制的分频值。 更改预分频器值会将预分频

使用特权

评论回复
 楼主 | 2018-12-27 12:24 | 显示全部楼层
001 如果 RTCLKS=x0,它为 1;如果 RTCLKS=x1,它为 128。
010 如果 RTCLKS=x0,它为 2;如果 RTCLKS=x1,它为 256。
011 如果 RTCLKS=x0,它为 4;如果 RTCLKS=x1,它为 512。
100 如果 RTCLKS=x0,它为 8;如果 RTCLKS=x1,它为 1024。
101 如果 RTCLKS=x0,它为 16;如果 RTCLKS=x1,它为 2048。
110 如果 RTCLKS=x0,它为 32;如果 RTCLKS=x1,它为 100。
111 如果 RTCLKS=x0,它为 64;如果 RTCLKS=x1,它为 1000。

使用特权

评论回复
 楼主 | 2018-12-27 12:24 | 显示全部楼层
7
RTIF
实时中断标志
该状态位指示 RTC 计数器寄存器已达到 RTC 模数寄存器中的值。 写入逻辑 0 无效。 写入逻
辑 1 会将该位清零并清除实时中断请求。 复位会将 RTIF 清除为 0。
0 RTC 计数器未达到 RTC 模数寄存器中的值。
1 RTC 计数器已达到 RTC 模数寄存器中的值。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表