打印
[Kinetis]

读书笔记/学习心得 6.RTC时钟

[复制链接]
2142|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
motodefy|  楼主 | 2013-11-14 18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
考试终于完了···下个任务也要来了···要去玩ZigBee了···
赶紧剩下几天把手上的这块KE02Z好好用一下。:lol

今天研究RTC时钟,RTC时钟是一个很实用的模块,用于计时等等···
用的是官方的例程,表示这个ke02的库写的还是不错的啊,很清楚,一看就明白调用了那些量,值是多少,(不像NXP的库···表示看了很头大)
例程很简单,下载后,1s间隔向串口上传一次时间数据
然后来分析下
RTC_SetTime(&rtc_set_time);    //这个函数根据给定的时间结构设置RTC时间。
RTC_SetAlarm(&alarm_set_time);  //这个函数根据给定的时间结构设置闹钟RTC时间。发生匹配后立即报警。
RTC_SetupTimerCallback(RTC_Task);  //这个函数设置回调函数
RTC_Init(RTC_CLKSRC_1KHZ,0, RTC_CLK_PRESCALER_1000);
这几句完成了对RTC的初始化,和控制.
理解下,前两个应该是设置RTC时钟的模式,类似实时的时间,xx天xx小时xx分xx秒的进位之类的控制
而回调给我的感觉类似触发中断,切换到另一个任务执行,然后再回调到主任务。
下面就是RTC初始化了,看下程序
void RTC_Init(uint8 clkSrc,uint16 modulo, uint8 prescaler)
{
    SIM_SCGC |= SIM_SCGC_RTC_MASK;                     /*enable clock to RTC*/
    RTC_MOD= modulo;                                   /*NOTE: RTC_MOD must be written after RTC_SC*/
    RTC_SC =  0 | RTC_SC_RTIE_MASK | RTC_SC_RTCO_MASK ;      
    RTC_SC |= ((clkSrc & 0x3) << 14) | ((prescaler & 0x07)<<8);
    /*enable interrupt*/
    enable_irq(20);
}
这里应该是设置为1KHz的时钟频率,然后模式0,分频为1/1000,这样就有一个较为准确的1Hz的信号了,也就是1s
还有其他的分频配置,在寄存器RTC_SC中第8-10位
000 Off
001 If RTCLKS = x0, it is 1; if RTCLKS = x1, it is 128.  010 If RTCLKS = x0, it is 2; if RTCLKS = x1, it is 256.
011 If RTCLKS = x0, it is 4; if RTCLKS = x1, it is 512.  100 If RTCLKS = x0, it is 8; if RTCLKS = x1, it is 1024.
101 If RTCLKS = x0, it is 16; if RTCLKS = x1, it is 2048.  110 If RTCLKS = x0, it is 32; if RTCLKS = x1, it is 100.
111 If RTCLKS = x0, it is 64; if RTCLKS = x1, it is 1000.
当然还有时钟源的选择RTC_SC中第14-15位
00 External clock source.
01 Real-time clock source is 1 kHz.
10 Internal clock.
11 Bus clock.
然后···就产生了一个问题,为何要这样写  RTC_SC |= ((clkSrc & 0x3) << 14) | ((prescaler & 0x07)<<8);
而不是直接  RTC_SC |= (clkSrc << 14)|(prescaler<<8);
实际测试,也有一定的误差产生了···这是为何?不太清楚了,以前都是直接位移操作的,貌似也没影响啊,这是一个问题

继续看····
至于中断的产生,应该是这一句话 enable_irq(20);吧,是m0头文件里面的一个定义,用于初始化中断
还发现了个很有趣的函数···void RTC_ConfigADCTriggering (void),貌似是rtc触发adc的转换
试了下,确实如此,会回传AD采样的值,不过为啥回传的是8位的?恩···等会继续研究下ADC··
关于RTC的研究就这样了:loveliness:



相关帖子

沙发
黄小俊| | 2013-11-14 19:13 | 只看该作者
不错,楼主有实物,玩起来就带劲啊。

使用特权

评论回复
板凳
springvirus| | 2013-11-15 08:22 | 只看该作者
**n1131 发表于 2013-11-14 19:13
不错,楼主有实物,玩起来就带劲啊。

是啊,我还在啃参考手册~~

使用特权

评论回复
地板
motodefy|  楼主 | 2013-11-15 08:43 | 只看该作者
**n1131 发表于 2013-11-14 19:13
不错,楼主有实物,玩起来就带劲啊。

:lol努力学习。分享心得···你也能搞到的

使用特权

评论回复
5
motodefy|  楼主 | 2013-11-15 08:43 | 只看该作者
springvirus 发表于 2013-11-15 08:22
是啊,我还在啃参考手册~~

光啃手册太累了···;P

使用特权

评论回复
6
FSL_TICS_Jeremy| | 2013-11-15 10:20 | 只看该作者
motodefy 发表于 2013-11-15 08:43
光啃手册太累了···

对大家啃书的痛苦表示理解,活动已过半,**就是胜利啊,

使用特权

评论回复
7
motodefy|  楼主 | 2013-11-15 16:19 | 只看该作者
FSL_TICS_Jeremy 发表于 2013-11-15 10:20
对大家啃书的痛苦表示理解,活动已过半,**就是胜利啊,

:lol求解答下我那个问题么···为啥我那种写**造成一定的误差··

使用特权

评论回复
8
FSL_TICS_ZJJ| | 2013-11-15 16:39 | 只看该作者
motodefy 发表于 2013-11-15 16:19
求解答下我那个问题么···为啥我那种写**造成一定的误差··

你指的是,你使用
  RTC_SC |= ((clkSrc ) << 14) | ((prescaler )<<8);
这句有误差,
然后,使用
RTC_SC |= ((clkSrc & 0x3) << 14) | ((prescaler & 0x07)<<8);
这句无误差?

使用特权

评论回复
9
motodefy|  楼主 | 2013-11-15 16:41 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-15 16:39
你指的是,你使用
  RTC_SC |= ((clkSrc )

恩·····是的

使用特权

评论回复
10
FSL_TICS_ZJJ| | 2013-11-15 16:50 | 只看该作者
motodefy 发表于 2013-11-15 16:41
恩·····是的

你的时间差异体现在什么地方?可不可以截个图出来呢?

使用特权

评论回复
11
motodefy|  楼主 | 2013-11-15 16:56 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-15 16:50
你的时间差异体现在什么地方?可不可以截个图出来呢?

我是对着电脑上的钟看的,按官方那种写法是比较准的1s上传一次数据,按我那种就会略快一点,不到1s就穿数据过来了,时间长了就会产生很大的误差

使用特权

评论回复
12
FSL_TICS_ZJJ| | 2013-11-15 17:36 | 只看该作者
motodefy 发表于 2013-11-15 16:56
我是对着电脑上的钟看的,按官方那种写法是比较准的1s上传一次数据,按我那种就会略快一点,不到1s就穿数 ...

我刚刚测试了,看了这两句话的值都是一样的,所以,是不是眼睛看有些误差。我看这两句的效果都差不多。

使用特权

评论回复
13
motodefy|  楼主 | 2013-11-15 18:03 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-15 17:36
我刚刚测试了,看了这两句话的值都是一样的,所以,是不是眼睛看有些误差。我看这两句的效果都差不多。 ...

我也觉得是一样的啊···或许真是我感觉问题吧

使用特权

评论回复
14
FSL_TICS_ZJJ| | 2013-11-15 19:32 | 只看该作者
motodefy 发表于 2013-11-15 18:03
我也觉得是一样的啊···或许真是我感觉问题吧

呵呵,目测肯定是不准的,其实你只要看两个变量的值在debug的时候,放到watch里面看看,是不是一样就可以了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

475

帖子

3

粉丝