ARM学习笔记--RTC编程(二)

发布者:Joyful888Life最新更新时间:2016-07-19 来源: eefocus关键字:ARM  RTC编程 手机看文章 扫描二维码
随时随地手机看文章
上一篇我们从用户手册对RTC有了一个大致的了解,现在就开始通过程序编写来学习RTC的应用和操作了。这里先总结一下:实时时钟是一组用于测量时间的计数器,如果使用电池供电,在系统掉电以后它也可以正常运行以记录系统的时间。LPC1788时钟采用内部的32K振荡器输出1HZ的时钟信号做为RTC的时钟源。

    RTC的寄存器比较简单,主要有时钟计数器寄存器包括秒SEC 分MIN 小时HOUR  日期(月)DOM 星期DOW 日期(年)DOY 月MONTH 年YEAR, 这些寄存器为R/W 可以从中读出具体的时间信息。其中的秒计数由1HZ时钟驱动。报警寄存器组中的值将和时间计数器寄存器中的值比较,如果所有为屏蔽的报警寄存器都与他们对应的时间计数器相匹配,那么将产生一次中断。报警屏蔽在报警屏蔽寄存器AMR中设置。中断设置在中断位置寄存器ILR中设置。RTC中断不仅可以在报警寄存器和时间计数器匹配时产生,我们也可以配置计数器增量中断寄存器CIIR,使计数器每增加1就产生一次中断。RTC的控制在时钟控制寄存器CCR中,我们可以使能或禁止时钟,以及复位等。

下面这段代码就是RTC寄存器结构体,里面包含了关于RTC的寄存器的一个列举:

/*------------- Real-Time Clock (RTC) ----------------------------------------*/
typedef struct
{
__IO uint8_t ILR;
uint8_t RESERVED0[7];
__IO uint8_t CCR;
uint8_t RESERVED1[3];
__IO uint8_t CIIR;
uint8_t RESERVED2[3];
__IO uint8_t AMR;
uint8_t RESERVED3[3];
__I uint32_t CTIME0;
__I uint32_t CTIME1;
__I uint32_t CTIME2;
__IO uint8_t SEC;
uint8_t RESERVED4[3];
__IO uint8_t MIN;
uint8_t RESERVED5[3];
__IO uint8_t HOUR;
uint8_t RESERVED6[3];
__IO uint8_t DOM;
uint8_t RESERVED7[3];
__IO uint8_t DOW;
uint8_t RESERVED8[3];
__IO uint16_t DOY;
uint16_t RESERVED9;
__IO uint8_t MONTH;
uint8_t RESERVED10[3];
__IO uint16_t YEAR;
uint16_t RESERVED11;
__IO uint32_t CALIBRATION;
__IO uint32_t GPREG0;
__IO uint32_t GPREG1;
__IO uint32_t GPREG2;
__IO uint32_t GPREG3;
__IO uint32_t GPREG4;
__IO uint8_t RTC_AUXEN;
uint8_t RESERVED12[3];
__IO uint8_t RTC_AUX;
uint8_t RESERVED13[3];
__IO uint8_t ALSEC;
uint8_t RESERVED14[3];
__IO uint8_t ALMIN;
uint8_t RESERVED15[3];
__IO uint8_t ALHOUR;
uint8_t RESERVED16[3];
__IO uint8_t ALDOM;
uint8_t RESERVED17[3];
__IO uint8_t ALDOW;
uint8_t RESERVED18[3];
__IO uint16_t ALDOY;
uint16_t RESERVED19;
__IO uint8_t ALMON;
uint8_t RESERVED20[3];
__IO uint16_t ALYEAR;
uint16_t RESERVED21;
__IO uint32_t ERSTATUS;
__IO uint32_t ERCONTROL;
__IO uint32_t ERCOUNTERS;
uint32_t RESERVED22;
__IO uint32_t ERFIRSTSTAMP0;
__IO uint32_t ERFIRSTSTAMP1;
__IO uint32_t ERFIRSTSTAMP2;
uint32_t RESERVED23;
__IO uint32_t ERLASTSTAMP0;
__IO uint32_t ERLASTSTAMP1;
__IO uint32_t ERLASTSTAMP2;
} LPC_RTC_TypeDef;

RTC初始化

void RTC_Init (LPC_RTC_TypeDef *RTCx)
{
/* Set up clock and power for RTC module */
CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCRTC, ENABLE); //开启RTC功能,配置寄存器PCONP

// Clear all register to be default
RTCx->ILR = 0x00; // 中断地址寄存器,增量中断、报警中断
RTCx->CCR = 0x00; // 时钟控制寄存器(控制使能、复位、是否校准)
RTCx->CIIR = 0x00;// 计数增量中断寄存器 (控制按秒或分等变化一次发生中断)
RTCx->AMR = 0xFF; // 报警中断寄存器
RTCx->CALIBRATION = 0x00; //校准寄存器,看时间走多长然后校准一次(1s或2s)
}

复位时间节拍器

void RTC_ResetClockTickCounter(LPC_RTC_TypeDef *RTCx)
{
RTCx->CCR |= RTC_CCR_CTCRST;
RTCx->CCR &= (~RTC_CCR_CTCRST) & RTC_CCR_BITMASK; // RTC_CCR_BITMASK:1101
}

设置RTC时钟的初始值

void RTC_Default_Set(void)
{
//Set current time
RTC_SetTime (LPC_RTC, RTC_TIMETYPE_SECOND, 0);//参数:(LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t TimeValue)
RTC_SetTime (LPC_RTC, RTC_TIMETYPE_MINUTE, 30);
RTC_SetTime (LPC_RTC, RTC_TIMETYPE_HOUR, 11);
RTC_SetTime (LPC_RTC, RTC_TIMETYPE_DAYOFMONTH, 31);
RTC_SetTime (LPC_RTC, RTC_TIMETYPE_MONTH, 8);
RTC_SetTime (LPC_RTC, RTC_TIMETYPE_YEAR, 12);
}

开启中断

RTC_CntIncrIntConfig (LPC_RTC, RTC_TIMETYPE_SECOND, ENABLE);

/* Enable RTC interrupt */
NVIC_EnableIRQ(RTC_IRQn);

中断处理

void RTC_IRQHandler(void)
{
uint32_t secval;

/* This is increment counter interrupt*/
if (RTC_GetIntPending(LPC_RTC, RTC_INT_COUNTER_INCREASE))
{
secval = RTC_GetTime (LPC_RTC, RTC_TIMETYPE_SECOND);

/* Send debug information */
_DBG ("Current time: ");
_DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_YEAR)); _DBG ("年");
_DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_MONTH)); _DBG ("月");
_DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_DAYOFMONTH));_DBG ("日");
_DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_HOUR)); _DBG (":");
_DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_MINUTE));_DBG (":");
_DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_SECOND));
_DBG_("");

// Clear pending interrupt
RTC_ClearIntPending(LPC_RTC, RTC_INT_COUNTER_INCREASE);
}
}

运行结果如下
ARM学习笔记--RTC编程(二) - 沧海一粟 - 沧海一粟的博客
总结一下,RTC的整个运用综合起来就是启动、配置和处理数据,这也是学习arm最最主要的思路;
1、找出需要功能运行的引脚配置寄存器或者配置寄存器
2、配置电源管理寄存器开启需要的功能电源
3、配置功能寄存器
4、开启功能
5、检测状态寄存器和中断
6、读或写数据寄存器,处理数据
以后的学习之路就需要这样分析寄存器。
 
发现白天真是做不了什么事情,但晚上不能熬夜太久,对身体不好,怎么办呢?如何安排好自己的时间,是一个学问和一个问题……

关键字:ARM  RTC编程 引用地址:ARM学习笔记--RTC编程(二)

上一篇:Arm学习笔记--ADC编程
下一篇:ARM学习笔记—RTC编程(一)

推荐阅读最新更新时间:2024-03-16 15:00

嵌入式系统开源软件的回顾和展望
  回顾过去20年嵌入式系统在国内各行各业蓬勃发展,其中有两项重要技术对此贡献很大:一是ARM,二是开源软件,尤其是Linux和与Linux相关的开源软件。对于ARM,今天业内热议的ARM上网本现在看只是_二个桥头堡。进攻胜利了,ARM即刻大举占领利润丰厚的PC市场,退一步也可以保住自己的移动终端和已经牢牢把握的嵌入式市场。ARM要想成功,必然要仰仗开源软件;指望微软是不行的,微软有太多的历史包袱和既得利益,在windows 7是否支持ARM架构这件事情上一直摇摆不定。另一方面,Linux在经历了漫长和痛苦的桌面市场的博弈之后,发现了移动计算这片领域,开始是智能手机、MID,到现在的上网本(netbook),还有未来的智能本(一种
[嵌入式]
ARM Linux S3C2440 之UART分析
在分析ARM-Linux s3c2440中UART的时有必要先了解 s3c2440A中串口的硬件知识。 硬件篇: S3c2440A串口提供三个独立的异步串行通信I/O端口(asynchronousserial I/O ports)。每一个串口均可以以普通中断方式或者DMA方式进行数据收发。采用系统时钟时,最大速率为115.2kbps.如果采用外部时钟(UEXTCLK),UART速度可以更快。每个串口包含有2个64-byte的FIFO缓存区用来发送或传输数据。S3c2440A 串口具有可编程波特率,红外(IR)收发数据,1或者2 位的停止位(stop),5/6/7/8 位数据宽度和奇偶校验功能(parity checking)。
[单片机]
<font color='red'>ARM</font> Linux S3C2440 之UART分析
基于ARM的无线汽车防盗报警系统设计
    随着我国汽车工业的高速发展,许多家庭拥有了自己的私家 车,但车库的数量远远满足不了需求,因此,如何有效地防止汽车被盗是车主们最关心的问题。近年来,科学技术迅猛发展,结合各种新技术的新型汽车防盗装备相 继出现。由于目前车载系统的功能正在逐步的增强、增多,采用单片机的控制已越来越无法适应需求。所以在汽车电子中采用嵌入式技术将成为必然。    本文采用嵌入式技术开发车载防盗装置,一方面能增强控制能力,提高汽车防盗的智能化程度。另一方面,缩小了装置的体积,提高了该装置应用的灵活性,同时也为将来进一步增强汽车电子的功能提供了扩展的空间。由于篇幅有限,本文只对硬件电路做介绍。 1 系统硬件组成    系统主要由ARM嵌入式控制器
[嵌入式]
ARM寄存器分析以及异常处理方法
ARM 有7个基本工作模式 User : 非特权模式,大部分任务执行在这种模式 FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式 IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式 Supervisor :当复位或软中断指令执行时将会进入这种模式 Abort : 当存取异常时将会进入这种模式 Undef : 当执行未定义指令时会进入这种模式 System : 使用和User模式相同寄存器集的特权模式 注意:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。 Privilege中除Sys模式外,其余5种为异常模式。 各种模式的切换,可以是程序员通过代
[单片机]
<font color='red'>ARM</font>寄存器分析以及异常处理方法
ARM】内核寄存器以及常用汇编指令分析
ARM内核(Cortex-M3)由ALU,NVIC,Register Banked,Fetch and Decoder Unit,Interfaces组成。 其中的寄存器相当于CM3自己的内存,存取速度非常快。用于暂存数据处理中的过程数据和状态。 本文先介绍CM3的寄存器组,以及ARM汇编指令。最后通过反汇编例子来分析实际的汇编代码。 1 寄存器组 CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R13,堆栈指针(Stack Pointer) R13寄存器中存放的是堆栈的栈顶指针,CM3中有两个堆栈指针,也就支持两个堆栈。分别是:主堆栈指针(Main Stack Pointer),进程堆栈指针(Pr
[单片机]
【<font color='red'>ARM</font>】内核寄存器以及常用汇编指令分析
基于ARM的无线视频监控系统的解决方案
  目前,采用无线网络技术的视频监控系统依靠其更低廉的价格、更加灵活的部署方式得到广大视频监控用户的青睐,逐渐成为视频监控技术的发展方向之一。在此结合嵌入式技术和无线视频监控技术,本文提出了一种基于嵌入式ARM技术的无线智能视频监控系统的解决方案。   0 引言   随着通信技术、计算机技术、数字视频技术、网络技术等高科技的发展,视频监控领域也快速进步。近年嵌入式计算机技术和网络技术的开发推动了视频监控的再次进步,出现了基于嵌入式技术的无线网络视频监控系统。无线网络视频监控系统采用多任务嵌入式操作系统,利用嵌入式芯片完成视频的压缩传输及处理,该芯片具有强大的数字处理功能,芯片处理后可将视频直接连入网络。利用这种方式,使用者可通
[单片机]
基于<font color='red'>ARM</font>的无线视频监控系统的解决方案
助力释放物联网创新,Arm推出Arm Mbed Cordio协议栈
新闻摘要: · 符合蓝牙5.0标准的Mbed Cordio协议栈为超过35万家Mbed开发者生态系统带来全新功能 · 通过与Mbed OS操作系统预先集成,Arm可移动开源Cordio蓝牙5.0协议栈可加速物联网开发,带来更大灵活性 · 蓝牙5.0对实现物流业、互联建筑、智慧城市、零售等物联网(IoT)转型至关重要 Arm推出 Arm Mbed Cordio协议栈 ——全球首款开源、高可靠(fully-qualified)量产就绪低功耗蓝牙软件协议栈。凭借低功耗蓝牙的强大连接性,该产品可为开发人员开发全新物联网解决方案提供更大的灵活性。 低功耗蓝牙(BLE)正迅速成为包括智能照明、智慧城市和资产追踪
[物联网]
Arm 更新 Neoverse 产品路线图,实现基于 Arm 平台的人工智能基础设施
新闻 重点 : Arm 宣布推出两款基于全新第三代 Neoverse IP 构建的新的 Arm Neoverse 计算子系统 Arm Neoverse CSS V3 是高性能 V 系列产品组合中的首款 Neoverse CSS 产品;与 CSS N2 相比,其单芯片性能可提高 50% Arm Neoverse CSS N3 拓展了 Arm 领先的 N 系列 CSS 产品路线图;与 CSS N2 相比,其每瓦性能可提升 20% 在短短四个月内, Arm 全面设计 生态项目已吸引超过 20 家成员加入,并在三家领先的代工厂进行系统级芯片和芯粒设计 Arm 控股有限公司(纳斯达克股票代码:ARM,以下简称“Arm”)今
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved