已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.6 实时时钟实验5.6.1 实验目的1. 了解实时时钟在嵌入式系统中的作用;2. 掌握实时时钟的使用。5.6.2 实验内容1. 编程实现实时时钟功能,每秒显示实时时钟;2. 编程实现实时时钟告警功能。5.6.3 预备知识1. 了解ADT集成开发环境的基本功能;2. 学习S3C24X0的实时时钟模块的使用。5.6.4 实验设备1. 硬件:JXARM9-2440教学实验箱、PC机;2. 软件:PC机操作系统 Windows 98(2000、XP) ADT IDE开发环境。5.6.5 基础知识1. 实时时钟在嵌入式系统中的作用在一个嵌入式系统中,实时时钟单元可以提供可靠的时钟,包括时、分、秒和年、月、日;即使在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的晶振。2. S3C24X0的实时时钟单元下图为S3C24X0的实时时钟框图。它具有以下特点:图5-12 S3C24X0的实时时钟框图1)时钟数据采用BCD编码;2)能够对闰年的年月日进行自动处理;3)具有告警功能,当系统处于关机状态时,能产生告警中断;4)具有独立的电源输入;5)提供毫秒级时钟中断,该中断可以用于作为嵌入式操作系统的内核时钟。3. S3C24X0的实时时钟寄存器1) 控制寄存器表5-16 控制寄存器寄 存 器地 址读/写状态描 述复位值RTCCON0x57000040R/W实时时钟控制寄存器0x0RTCCON位描 述复 位 值CLKRST3实时时钟计数器复位0不复位 1复位0CNTSEL2BCD计数选择,将计数器设置为BCD模式0选择BCD模式 1保留0CLKSEL1BCD时钟选择0将输入时钟进行1/215分频 1保留0RTCEN0RTC读写使能0禁止 1使能02) 告警控制寄存器表5-17 告警控制寄存器寄 存 器地 址读/写状态描 述复 位值RTCALM0x57000050R/W告警控制寄存器0x00RTCALM位描 述复 位 值Reserved7保留0ALMEN6时钟告警总使能/禁止0禁止 1使能0YEAREN5年时钟告警使能/禁止0禁止 1使能0MONREN4月时钟告警使能/禁止0禁止 1使能0DAYEN3日时钟告警使能/禁止0禁止 1使能0HOUREN2时时钟告警使能/禁止0禁止 1使能0MINEN1分时钟告警使能/禁止0禁止 1使能0SECEN0秒时钟告警使能/禁止0禁止 1使能03) 实时时钟计数器表5-18 实时时钟计数器寄存器地址读写描述复位值TICNT0x57000044R/W实时时钟计数器0x00000000TICNT位描述复位值TICK INT ENABLE7中断使能/禁止0禁止 1使能0TICK TIME COUNT6:0实时时钟计数器00000004) 告警时间寄存器包括年、月、日、时、分、秒。它们都以BCD的格式表示,地址见下表:表5-19 告警时间寄存器寄存器地址读/写状态描述复位值ALMSEC0x57000054R/W秒时钟告警值0x00ALMMIN0x57000058R/W分时钟告警值0x00ALMHOUR0x5700005CR/W时时钟告警值0x00ALMDAY0x57000060R/W日时钟告警值0x00ALMMON0x57000064R/W月时钟告警值0x00ALMYEAR0x57000068R/W年时钟告警值0x005) 实时时钟寄存器包括年、月、日、时、分、秒。它们都以BCD的格式表示,地址见下表:表5-20 实时时钟寄存器寄存器地址读/写状态描述复位值BCDSEC0x57000070R/W秒时钟当前值不定BCDMIN0x57000074R/W分时钟当前值不定BCDHOUR0x57000078R/W时时钟当前值不定BCDDAY0x5700007CR/W日时钟当前值不定BCDDATE0x57000080R/W星期值当前值不定BCDMON0x57000084R/W月时钟当前值不定BCDYEAR0x57000088R/W年时钟当前值不定注意事项:1. 以上各寄存器都只能以字节模式进行读写操作;2. 当系统使用BIG-ENDIAN模式时,各寄存器对应的地址为会有所改变,具体值请参考S3C44B0X的数据手册。4. 实验参考代码及说明:/* 包含文件 */#include 2410addr.h#include 2410lib.h#include 2410RTC.h#include interrupt.h/* 表示日期、时间的数据结构 */typedef struct ST_DATEshort year; / 年charmon; / 月charday; / 日charweek_day; / 星期charhour; / 时charmin; / 分charsec; / 秒 st_date;/* 全局变量 */int led_index = 0;int ext0_count = 0;/* functions */void rtc_tick_isr(void);void rtc_int_isr(void);/*/ Function name: rtc_set_date/ Description : 修改实时时钟当前时间、日期/ Return type: void/ Argument : p_date, 待设置的日期*/void rtc_set_date(st_date* p_date) rRTCCON = 0x01; rBCDYEAR = p_date-year; rBCDMON = p_date-mon; rBCDDAY = p_date-day; rBCDDATE = p_date-week_day; rBCDHOUR = p_date-hour; rBCDMIN = p_date-min; rBCDSEC = p_date-sec; rRTCCON = 0x00;/*/ Function name: rtc_get_date/ Description : 获取实时时钟当前时间、日期/ Return type: void/ Argument : p_date, 返回日期的指针*/void rtc_get_date(st_date* p_date) rRTCCON = 0x01; p_date-year= rBCDYEAR ; p_date-mon= rBCDMON ; p_date-day= rBCDDAY ; p_date-week_day= rBCDDATE ; p_date-hour= rBCDHOUR ; p_date-min= rBCDMIN ; p_date-sec= rBCDSEC ; rRTCCON = 0x00;/*/ Function name: rtc_tick_init/ Description : 初始化S3C2410的TICK定时器/ Return type: void/ Argument : tick, 设置的TICK频率(时钟滴答的周期为 (1+tick)/128秒)*/void rtc_tick_init( char tick ) Irq_Request(IRQ_TICK, rtc_tick_isr); rRTCCON = 0x0; /No reset3, Merge BCD counters2, BCD clock select XTAL1, RTC Control disable0 rTICNT = (tick&0x7f)|0x80;/*TICK 中断使能,周期为(1+tick)/128秒*/ Irq_Enable(IRQ_TICK); /*/ Function name: rtc_alarm_set/ Description : 设置S3C2410的告警时间以及方式/ Return type: void/ Argument : p_date, 告警的时间/ mode, 告警模式*/void rtc_alarm_set(st_date* p_date, unsigned char mode) Irq_Request(IRQ_RTC, rtc_int_isr); rRTCCON = 0x01; rALMYEAR = p_date-year; rALMMON = p_date-mon; rALMDATE = p_date-day; rALMHOUR = p_date-hour; rALMMIN = p_date-min; rALMSEC = p_date-sec; rRTCALM = mode; rRTCCON = 0x00; Irq_Enable(IRQ_RTC); /*/ Function name: Main/ Description : JXARM9-2440 实时时钟实验主程序/ 完成功能:/ 时钟滴答:每秒钟刷新数码管显示/ 设置当前日期、时间/ 动态刷新当前日期、时间,通过串口打印出来/ 时间告警功能:每分钟的第5秒告警,并进行跑马灯显示/ Return type: void/ Argument : void*/void Main(void)int old_index ;st_date m_date;/* 配置系统时钟 */ ChangeClockDivider(2,1); U32 mpll_val = 0 ; mpll_val = (9212)|(112)&0xff, (mpll_val4)&0x3f, mpll_val&3);/* 中断初始化 */ Isr_Init(); /* 初始化串口 */ Uart_Init(0,115200); Uart_Select(0); /* 打印提示信息 */Uart_Printf(n-实时时钟测试程序-n);Uart_Printf(n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)n);Uart_Printf(n实时时钟测试开始n);/* 采用BCD编码,如2004年需要设置的值为0x2004 */ m_date.year= 0x2000+0x04 ; m_date.mon= 0x03 ; m_date.day= 0x02 ; m_date.week_day= 0x02 ; m_date.hour= 0x15 ; m_date.min= 0x40 ; m_date.sec= 0x00 ; /* 修改当前日期和时间 */ rtc_set_date(&m_date); m_date.sec= 0x05 ; /* 设置告警的时间及方式,0x41表示使能RTC告警,以及使能秒时钟告警 */ rtc_alarm_set(&m_date, 0x41);rtc_tick_init(127);old_index = led_index; Uart_Printf(rnrn); while(1) if(old_index != led_index)/* 每隔一秒更新一次数据*/ rtc_get_date(&m_date); old_index = led_index; Uart_Printf(/* 时钟数据为BCD码格式,以16进制显示 */bbbbbbbb%02x:%02x:%02x, m_date.hour, m_date.min, m_date.sec); ;/*/ Function name: rtc_tick_isr/ Description : TICK中断处理程序,程序中设置每秒钟引发一次中断/ Return type: int/ Argument : void*/void rtc_tick_isr(void)Irq_Clear(IRQ_TICK); /* 清除TICK中断 */ led_index+;/*/ Function name: rtc_int_isr/ Description : rtc中断处理程序,程序中设置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农产品广告的乡土元素应用
- 水电站经济运行分析与效益提升
- 无人机作业的精度控制
- 满意度提升合同协议
- 小区送货安全协议书
- 工厂员工打架协议书
- 小学保安聘任协议书
- 市政开税票合同范本
- 工程师返聘合同范本
- 工厂保密协议书模板
- 数据中心基础实施培训UPS
- 占用人行道开挖施工方案
- 2021年一级消防工程师继续教育试题库
- 自动喷水灭火系统调试报告
- 鲁迅先生主要事迹
- GB/T 16252-2023成年人手部尺寸分型
- 包装人员作业流程规定包装过程规范与监督改进工作程序
- 拉片分析的教案
- GB/T 29476-2012移动实验室仪器设备通用技术规范
- (完整)加油站操作员高级-理论试题
- 20世纪世界文学思潮 外国文学史
评论
0/150
提交评论