当前位置:首页 > 单片机 > 单片机
[导读]S3C2440拥有一个实时时钟模块,可以在当系统电源关闭后通过备用电池工作。RTC可以通过使用STRB/LDRB ARM操作发送8位二-十进制交换码(BCD)值数据给CPU。这些数据包括年、月、日、星期、时、分和秒的时间信息。RTC单元

S3C2440拥有一个实时时钟模块,可以在当系统电源关闭后通过备用电池工作。RTC可以通过使用STRB/LDRB ARM操作发送8位二-十进制交换码(BCD)值数据给CPU。这些数据包括年、月、日、星期、时、分和秒的时间信息。RTC单元工作在外部32.768kHz晶振并且可以执行闹钟功能

实时时钟模块保存的数据是DCD码形式.

框图如下


可以看到,要使用实时时钟依靠以下几个寄存器


包含时钟使能和时钟复位(还有两个寄存器是测试模式,我们用不到)


关联着时钟节拍中断,也就是每增加1S发生一次中断


时钟中断,时钟的时分秒年月日都是可以进行使能的

接下来是时分秒年月日闹钟点设置

有六个就不一一列举了,意思是当到达这个时间点时发生中断,比如我设置23秒发生中断,那么每一分钟的23秒都会中断一次

还要注意,因为使用的是BCD计数,所以对时钟的读取,写入都要进行BCD码的转换,否则数据不对哦

详细查看代码

#include"rtc.h"char*week_num[7]={"SUN","MON","TUES","WED","THURS","FRI","SAT"};RTC_TIMERrtcTimer;ALARM_TIMERalarmTimer;/**********************************TICK中断**********************************/void__irqRTC_tickHandler(void){rSRCPND"=BIT_TICK;//清除源挂起rINTPND|=BIT_TICK;//清除中断挂起RTCGetValue();printf("currentyear%dmouth%dday%dhour%dminute%dsec%drn",rtcTimer.year,rtcTimer.month,rtcTimer.day,rtcTimer.hour,rtcTimer.minute,rtcTimer.second);}/**********************************alarm闹钟中断**********************************/void__irqRTC_alarmHandler(void){rSRCPND|=BIT_RTC;//清除源挂起rINTPND|=BIT_RTC;//清除中断挂起printf("alarminthappendrn");}//rtc获取时间voidRTCGetValue(void){u8temp=0,cover=0;rRTCCON|=0x01;//RTC读写使能,BCD时钟、计数器、无复位temp=rBCDYEAR;temp=((temp/16)*10)+(temp%16);rtcTimer.year=temp+YEAR_BASE;temp=rBCDMON;temp=((temp/16)*10)+(temp%16);rtcTimer.month=temp;temp=rBCDDATE;temp=((temp/16)*10)+(temp%16);rtcTimer.day=temp;temp=rBCDDAY;temp=((temp/16)*10)+(temp%16);rtcTimer.weekDay=temp;temp=rBCDHOUR;temp=((temp/16)*10)+(temp%16);rtcTimer.hour=temp;temp=rBCDMIN;temp=((temp/16)*10)+(temp%16);rtcTimer.minute=temp;temp=rBCDSEC;temp=((temp/16)*10)+(temp%16);rtcTimer.second=temp;rRTCCON&=~(1<<0);//RTC读写禁止,BCD时钟、计数器、无复位}voidRTCSetValue(void){u8temp;rRTCCON|=0x01;//RTC读写使能,BCD时钟、计数器、无复位temp=rtcTimer.year-YEAR_BASE;temp=((temp/10)*16)+(temp%10);rBCDYEAR=temp;temp=rtcTimer.month;temp=((temp/10)*16)+(temp%10);rBCDMON=temp;temp=rtcTimer.day;temp=((temp/10)*16)+(temp%10);rBCDDATE=temp;temp=rtcTimer.weekDay;temp=((temp/10)*16)+(temp%10);rBCDDAY=temp;temp=rtcTimer.hour;temp=((temp/10)*16)+(temp%10);rBCDHOUR=temp;temp=rtcTimer.minute;temp=((temp/10)*16)+(temp%10);rBCDMIN=temp;temp=rtcTimer.second;temp=((temp/10)*16)+(temp%10);rBCDSEC=temp;rRTCCON&=~(1<<0);//RTC读写禁止,BCD时钟、计数器、无复位}voidRtcSetAlarm(void){u8temp;rRTCCON|=0x01;//RTC读写使能,BCD时钟、计数器、无复位temp=alarmTimer.year-YEAR_BASE;temp=((temp/10)*16)+(temp%10);rALMYEAR=temp;temp=alarmTimer.month;temp=((temp/10)*16)+(temp%10);rALMMON=temp;temp=alarmTimer.day;temp=((temp/10)*16)+(temp%10);rALMDATE=temp;temp=alarmTimer.hour;temp=((temp/10)*16)+(temp%10);rALMHOUR=temp;temp=alarmTimer.minute;temp=((temp/10)*16)+(temp%10);rALMMIN=temp;temp=alarmTimer.second;temp=((temp/10)*16)+(temp%10);rALMSEC=temp;rRTCALM=0x41;//RTC闹钟控制寄存器,启动秒中断和总中断rRTCCON&=~(1<<0);//RTC读写禁止,BCD时钟、计数器、无复位}voidRtcInit(u8tick){rtcTimer.year=2014;rtcTimer.month=10;rtcTimer.day=10;rtcTimer.weekDay=5;rtcTimer.hour=16;rtcTimer.minute=34;rtcTimer.second=52;alarmTimer.year=2014;alarmTimer.month=10;alarmTimer.day=10;alarmTimer.weekDay=5;alarmTimer.hour=16;alarmTimer.minute=34;alarmTimer.second=52;rRTCCON=0x01;rTICNT=(tick&0x7f)|0x80;//使能中断RTCSetValue();//设置时间RtcSetAlarm();//设置闹钟//开启中断pISR_RTC=(unsigned)RTC_alarmHandler;pISR_TICK=(unsigned)RTC_tickHandler;//中断函数入口地址rSRCPND|=BIT_RTC;//清除源挂起rINTPND|=BIT_RTC;//清除中断挂起rINTMOD&=~BIT_RTC;//设置中断模式为IRQ模式rSRCPND|=BIT_TICK;//清除源挂起rINTPND|=BIT_TICK;//清除中断挂起rINTMOD&=~BIT_TICK;//设置中断模式为IRQ模式rINTMSK&=~BIT_RTC;//开中断rINTMSK&=~BIT_TICK;//开中断}

#ifndef__RTC_H#define__RTC_H#include"2440addr.h"#include"def.h"#include"uart0.h"#defineYEAR_BASE2000typedefstructRTC_TIMER{u16year;u8month;u8day;u8weekDay;u8hour;u8minute;u8second;}RTC_TIMER;typedefstructALARM_TIMER{u16year;u8month;u8day;u8weekDay;u8hour;u8minute;u8second;}ALARM_TIMER;externstructRTC_TIMERrtcTimer;voidRTCGetValue(void);voidRTCSetValue(void);voidRtcSetAlarm(void);voidRtcInit(u8tick);#endif


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

  本文根据网络视频采集的需要,将网络传输与视频采集相结合,设计了以S3C2440为核心的USB摄像头视频采集和嵌入式Linux系统下的视频服务器,从而实现了远程网络视频信息采集。   

关键字: s3c2440 视频采集 usb摄像头

         之前在提起自动化或是智能化时,人们会不自觉的想到工业生产,这是因为自动化这个字眼进入中国,确实是以工业

关键字: 嵌入式 Linux s3c2440 视频采集

  引言   随着科技的不断发展,以数据业务为主的固定宽带无线接入技术发展已经很成熟,而移动宽带无线通信技术还并没有得到广泛的应用。由于移动宽带无线接入系统需要解决带宽、移动性和覆盖范围

关键字: IPv6 s3c2440 x86 架构

  2016年2月26日,德国慕尼黑和西班牙巴塞罗那讯——赢得消费者的信任对于智能移动设备支付解决方案至关重要。作为全球最大的安全芯片供应商之一,英飞凌科技股份公司(FS

关键字: rtc 机器人 rx8010sj

  1 引言   人们生活水平的提高以及科技的进步,特别是计算机技术、网络技术和通信技术的发展,智能家居将慢慢成为未来家居生活的发展方向。1984年在美国诞生了世界上第一座智能家居建筑,

关键字: boa nrf24l01 s3c2440 智能家居

博主使用的是天嵌的开发板型号IMX6Q_coreC。1.发现使用开发板是时间总是被设置为2028年6月18日3时41分,一开始以为是底层驱动的问题, 故去底层加打印信息调试。2.发现在系统内hwclo

关键字: Linux rtc

我们知道2440开发流程为:移植uboot--》移植内核---》挂接根文件系统。我们移植完内核需要挂接根文件系统,那么首先我们必须拥有根文件系统。如何来制作我们的根文件系统呢?第一步:在linux下建

关键字: s3c2440 根文件系统

1.TQ2440u-boot-1.1.6修改文件所在的路径是u-boot-1.1.6includeconfigsEmbedSky.h将#defineLCD_TFTxxx(LCD类型)W353.5寸TFT4802724.3...

关键字: s3c2440 lcd参数

2440的晶振频率为12MHZ,有两个PLL:MPLL和UPLL,其中MPLL产生FCLK、HCLK、PCLK;UPLL产生UCLK。FCLK为ARM核提供时钟,HCLK为AHB总线时钟,PCLK为APB总线时钟,UCL...

关键字: s3c2440 时钟初始化

开发板:TQ2440内核:Linux 2.6.32PC OS:Ubuntu 11.041.配置内核打开I2C功能:打开杂项设备,该选项打开后,EEPROM也就打开了。2. 修改代码修改文件: linux/arch/arm...

关键字: at24c02 eeprom s3c2440 移植 linux驱动
关闭
关闭