- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.7.3 RTC基本操作 实时时钟可用来进行定时报警、日期及时分秒计时等等。RTC不具备独立时钟源,其计数时钟由Fpclk进行分频得到,它的基准时钟分频器允许任何频率高于65.536kHz的外设时钟源产生一个32.768kHZ的基准时钟,实现准确计时操作。 图6.22 RTC寄存器功能框图 如图6.22所示,实时时钟的时钟源是由pclk通过基准时钟分频器(PREINT、PREFRAC),调整出32 786Hz的频率,然后供给CTC计数器。CTC是一个15位的计数器,它位于秒计数器之前,CTC每秒计数32 786个时钟。当有CTC秒进位时,完整时间CTME0~CTME2、RTC时间寄存器(如SEC、MIN等)将会更新。RTC中断有两种,一种是增量中断,由CIIR进行控制;另一种为报警中断,由AMR寄存器和各报警时间寄存器控制,如ALSEC、ALMIN等。报警位置寄存器ILR用来产生相应的中段标志。RTC时钟控制寄存器CCR用于使能实时时钟、CTC复位控制等。 知识要点提示: 日期寄存器(表示“日”)有两个,分别为DOY和DOM,DOY表示为一年中的第几日,值为1~365(闰年为366);DOM则为一月中的第几日,值为1~28/29/30/31,一般日期计数使用DOM即可。 RTC基本操作方法: ① 设置RTC基准时钟分频器(PREINT、PREFRAC); ② 初始化RTC时钟值,如YEAR、MONTH、DOM等; ③ 报警中断设置,如CIIR、AMR等; ④ 启动RTC,即CCR的CLKEN位置位; ⑤ 读取完整时间寄存器值或等待中断。 6.7.4 应用实例 【实例6-10】利用RTC的增量功能进行1S的定时,当定时时间到,取反LED控制。 分析:利用NXP公司的LPC2214的P0.10管脚控制发光二极管LED1,使其间隔1S循环亮灭。 1.电路连接 如图6.23所示,LED1与P0.10相连,通过P0.10引脚的高低电平来控制发光二极管的灭与亮。当引脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。 图6.23 电路原理图 2.程序的编写 利用ARM开发工具RealView MDK建立“RTC1.Uv2”工程,并添加代码,编译并链接工程,生成RTC1.HEX文件。核心代码如下: (1)相关的定义 #include config.h #define LED1CON 0 //P0.10口为LED1控制器 #define FPCLK 3686250L //定义Fpclk值,用于设置串口波特率 (2)初始化实时时钟:设置基准时钟分频器,然后初始化时钟值,再启动RTC。 void RTCIni(void) { PREINT=FPCLK/32768-1; //设置预分频器 PREFRAC=FPCLK-(FPCLK/32768)*32768; YEAR=2010; //初始化年 MONTH=1; //初始化月 DOM=10; //初始化日 CIIR=0x01; //设置秒值的增量产生一次中断 CCR=0x01; //启动RTC } (3)主程序:使用RTC的秒增量中断功能控制LED亮灭。 int main(void) { PINSEL0=0 //引脚连接设置 PINSEL1=0 IODIR=LED1CON; RTCIni(); //初始化RTC while(1) { IOSET=LED1CON; //熄灭LED1 while(0==(ILR0x01)); //等待RTC增量中断标志 ILR=0x01; //清除中断标志 IOCLR
文档评论(0)