在嵌入式系统中,实时时钟单元可以提供可靠的时钟,包括时、分、秒、年、月、日。可以提供毫秒级的时钟中断。
与实时时钟相关的寄存器:
实时时钟控制寄存器(RTCCON):
实时时钟控制设置。
告警控制寄存器:
年、月、日、时、分、秒告警使能标志,当告警时间寄存器时间到达时引发实时时钟报警中断。
实时时钟计数器:
用与存储时钟计数值,每过一个时钟减一,到零时引发实时时钟时间滴答中断。
告警时间寄存器:
存储告警时间的年、月、日、时、分、秒值
实时时钟寄存器:
保存实际时间。
实时时钟编程步骤:
1、初始化时钟
2、向实时时钟寄存器写入当前的时间,即效表
3、读取时间显示
下面为试验代码
struct time
{
unsigned char year;
unsigned char mon;
unsigned char day;
unsigned char weekday;
unsigned char hour;
unsigned char min;
unsigned char sec;
};
void inittime()
{
rRTCCON=0x0;
}
void settime(struct time *t)
{
rRTCCON|=0x01;
rBCDYEAR=t->year;
rBCDMON=t->mon;
rBCDDAY=t->weekday;
rBCDDATE=t->day;
rBCDHOUR=t->hour;
rBCDMIN=t->min;
rBCDSEC=t->sec;
rRTCCON&=0xFE;
}
void gettime(struct time *t)
{
rRTCCON|=0x01;
while(1)
{
t->year=rBCDYEAR;
t->mon=rBCDMON;
t->weekday=rBCDDAY;
t->day=rBCDDATE;
t->hour=rBCDHOUR;
t->min=rBCDMIN;
t->sec=rBCDSEC;
if(t->sec !=0)
break;
}
rRTCCON&=0xFE;
}
void enabletimeint(char value)
{
rRTCCON|=0x01;
value|=0x80;
rTICNT=value;
rRTCCON&=0xFE;
}
void disenabletimeint(void)
{
rRTCCON|=0x01;
rTICNT&=0x7f;
rRTCCON&=0xFE;
}
void setrtcalm(char value)
{
rRTCCON|=0x01;
rRTCALM=value;
rRTCCON&=0xFE;
}
void setalmtime(struct time *t)
{
rRTCCON|=0x01;
rALMYEAR=t->year;
rALMMON=t->mon;
rALMDATE=t->day;
rALMHOUR=t->hour;
rALMMIN=t->min;
rALMSEC=t->sec;
rRTCCON&=0xFE;
}
void printtime(struct time *t)
{
char h,l;
l=t->year&0x0F;
h=t->year&0xF0;
h=h>>4;
uart0_sendchar('2');
uart0_sendchar('0');
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('.');
l=t->mon&0x0F;
h=t->mon&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('.');
l=t->day&0x0F;
h=t->day&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(' ');
uart0_sendchar(' ');
l=t->hour&0x0F;
h=t->hour&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(':');
l=t->min&0x0F;
h=t->min&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar(':');
l=t->sec&0x0F;
h=t->sec&0xF0;
h=h>>4;
uart0_sendchar(h+48);
uart0_sendchar(l+48);
uart0_sendchar('\r');
uart0_sendchar('\n');
}
关键字:s3c2410 实时时钟 RTC
引用地址:
s3c2410实时时钟(RTC)
推荐阅读最新更新时间:2024-03-16 15:22
基于嵌入式系统的GPRS的设计
嵌入式系统就是一个具有特定功能或用途的计算机软硬件结合体,或指装入另一个设备并且控制该设备的专用计算机系统。嵌入式系统的最大特点是其具有目的性和针对性,即每一套嵌入式系统的开发都有其特殊的应用场合与特定功能。嵌入式系统包含硬件和软件两部分:硬件架构以嵌入式处理器为中心,配置存储器、I/O设备、通信模块等;软件部分以软件开发平台为核心,向上提供应用编程接口API,向下屏蔽具体硬件特性的板级支持包BSP。嵌入式系统中,软件和硬件紧密配合,协调工作,共同完成系统预定的功能。 GPRS是General Packet Radio Service的简称,即通用无线分组业务。它是基于现在运行的GSM基础上发展的数据业务,类似于固定交换
[单片机]
基于S3C2410的CF卡文件系统
1 前 言 随着计算机应用技术的飞速发展,移动存储设备得到了广泛的应用。CF(Com PAC t Flash)卡以其能捕获、保存、传送数据、及其它音像信息的设计理念诞生于1994年,它是最早推出的闪存卡。由于CF卡具有价格低廉、体积小、存储容量大、高速等特点,因此被广泛地应用于数码相机、PDA和笔记本电脑等那些需要高速采样、实时记录数据、然后再将数据传入计算机进行分析处理的仪器和设备中。 由于CF卡中存储的信息要能从PC机上读取出来,所以必须采用一种标准的格式组织数据,通常采用的方法是在CF卡中内嵌文件系统。目前,市场上存在多种商用的嵌入式操作系统可以支持文件系统,但这些操作系统对硬件要求一般都比较高,价格昂贵,且
[单片机]
STM32F103单片机RTC结合time.h使用
在使用stm32f103系列单片机的时候总是会碰到RTC计时的问题,103系列单片机的RTC使用的是秒计时 在经过一段时间的研究,终于发现了一种比较简单而且易于理解的使用方法,就是结合系统文件time.h的使用 首先要添加头文件 #include time.h RTC的初始化和普通方式无区别 u8 RTC_Init(void) { //检查是不是第一次配置时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟 PWR_BackupAccessCmd(ENABLE);
[单片机]
Nordic52810入门篇 - 实时时钟(RTC)
RTC-24位实时时钟计数器,RTC模块使用低频时钟LCFK,52810有两个RTC模块 RTC0与RTC1 声明:蓝牙协议栈使能后将会使用RTC0;APP_TIMER库使用的是RTC1,所以当APP_TIMER组件使能后,RTC1不可以直接使用 一、原理框图 如下图,左边是开始START、停止STOP、清除CLEAR、触发TRIG 任务,右边可触发三种事件(回调中断) TICK滴答事件:计数器COUNTER每计数一次会进行事件回调(中断),COUNTER计数值累加1,默认禁用 OVRFLW溢出事件:计数器COUNTER计数值溢出后触发(0xFFFFFF:16777215),默认禁用 COMPARE比较事件:通
[单片机]
ARM学习笔记—RTC编程(一)
要学习RTC的编程,首先我们得知道什么是RTC?RTC是怎样工作的?RTC电路是如何搭建的?RTC编程需要注意什么?要弄清楚这些,最好的方式就是从用户手册上去找寻答案,我按照LPC1788提供的手册一步步分析和学习RTC。 一、基础配置 1、RTC的电源控制:在寄存器PCONP中,置位位PCRTC。注意:复位的时候PCRTC的值也为 1 。(这里需要注意在arm中所有的pin操作都是通过读写寄存器完成的,每一个pin脚都是对应寄存器的一位,不能直接对pin进行置位或复位) 2、时钟源:RTC从RTC晶振中获取1HZ作为内部功能时钟,外部时钟用于接收RTC寄存器的值(目前还没有理解透彻,以后继续研究) 3、中断:中断在后面将
[单片机]
s3c2410与s3c2440的全方位对比
1. 最高主频不相同:2410为200M,2440为400M。 我们在用这两款处理器时,一般使用的主频是不相同的,而这个不相同,不仅影响是的运行的速度,最主要的是会影响一些外设(如串口)的时钟,这些外设的时钟如果不正确,就会出现问题。 又比如内存总线设置,2410 和 2440 主频不一样,总线定时所要求的时钟数也会不一样。 ---------------------------------------------------------------------------- 2. MPLL和UPLL的计算公式不相同:2440的MPLL是2410的两倍;2440的MPLL计算与UPLL的计算不相同。 2
[单片机]
UBOOT-1.1.6在S3C2410上的移植(基于GEC2410)
之前做过u-boot-1.1.6在AT91RM9200的移植,虽然2410和9200这两款ARM9芯片都是ARM920T核的,但还是有不少区别的,特别是启动方式(当然前者是工业级后者是民用级不必说)。at91rm9200内部本身有128k的片内rom,其固化了一个bootloader和uploader, 用来支持程序的下载和引导,而且其内部固化的程序提供了很多内部服务接口(Internel Service)供我们来使用,例如Xmodem;而S3C2410启动是把nandflash的前4K代码自动搬到Steppintstone中去运行,而Steppingstone使用的物理地是从0号位置开始的。(当然如果是Nor Flash启动,两
[单片机]
Windows CE下操作GPIO的方法(以ARM9 S3C2410为例)
GPIO 是ARM芯片最基本的输入输出通道,在ADS下操作就是一个单片机工作,直接读写其寄存器。在ARM9平台上,Windows CE系统将GPIO的实地址(例如2410的GPIO的基地址为0x56000000)映射到虚拟地址空间(GPIO对应为0xB1600000),这 样,通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的控制、输入输出工作。 要操作一个平台的GPIO,在其对应BSP中按照基地址,找到虚拟地址,并且找到方便操作这个地址的数据结构就可以了,关键函数就是 VirtualAlloc和VirtualCopy。并且CE的方便之处就是用户态的应用程序仍然可以使用这两个函数来访问所有这些虚拟空间,对于不太复
[嵌入式]