嵌入式时钟设计.doc_第1页
嵌入式时钟设计.doc_第2页
嵌入式时钟设计.doc_第3页
嵌入式时钟设计.doc_第4页
嵌入式时钟设计.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4摘要 本文说明为多功能时钟设计方案,基于S3C2410结合RTC模块,IIC(控制小键盘和数码管等)来做具备定期功能的实时时钟。 实时时钟(RTC)单元在系统电源关闭的情况下可以在备用电池下工作。RTC 可以使用STRB/LDRB ARM操作传输二进制码十进制数的 8 位数据给 CPU。数据包括秒、分钟、小时、日期、天、月、年的时间信息。RTC 单元可以在 32.768KHz 的外部晶振下工作,可以可以执行报警功能。关键词:多功能时钟功能时钟;S3C2410;RTC;IIC目录一、实验题目分析11.1 问题描述11.2功能分析11.3 开发平台及工具介绍1二、实验概要设计12.1 实验基本原理12.2 实验电路图4三、实验详细过程63.1 具体实验过程和内容63.2 程序流程图63.3 实验和程序问题分析7四、实验输出界面7五、设计心得体会9六、讨论及进一步研究建议9七、参考文献10附录:主要程序代码:11一、实验题目分析1.1 问题描述结合实时时钟,IIC(控制小键盘和数码管等)来做具备定期功能的实时时钟。1.2功能分析至少完成以下功能: (1)能显示每秒的时刻 (2)按下功能键能切换显示日期 (3)能设置定时闹钟,定时到产生某种输出 (4)可以扩展考虑加入外部中断,如停止闹钟功能等。1.3 开发平台及工具介绍 实验器材:CITK2410开发板,JTAG连接线,调试器,并口数据线,串口数据线开发软件:ADS1.2集成开发环境二、实验概要设计2.1 实验基本原理 IIC总线:IIC总线的器件分为主器件和从器件。主器件的功能是启动在总线上传送数据,并产生时钟脉冲,以允许与被寻址的器件进行数据传送。SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。 图1 起始和停止信号图 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。图2 数据传送时序图 IIC总线(IICSDA、IICSCL)经过VDD33的上拉后,进入ZLG7290数码管:实验使用的数码管是广州周立公司单片机发展有限公司自行设计的一款数码管显示驱动及键盘扫描管理芯片。下面是介绍该数码管的特点还有电路图(图3):1 IIC串行接口提供键盘中断信号方便与处理器接口2 可驱动8 位共阴数码管或64只独立LED 和64个按键3 可控扫描位数可控任一数码管闪烁4 提供数据译码和循环移位段寻址等控制5 8个功能键可检测任一键的连击次数6 无需外接元件即直接驱LED可扩展驱动电流和驱动电压7 提供工业级器件多种封装形式PDIP24 SO24采用24引脚封装引脚图如图所示其引脚功能分述如下:图3 ZLG7290引脚图图4 IIC LED控制器连接电路 实时时钟(Real Time Clock):S3C2410提供了一个实时时钟,该时钟使用独立的一路1.8V供电,保证主电源切断时能正常维持RTC工作。S3C2410的RTC支持两个中断:Time Tick(固定在一个频率内发出的时钟中断) 和Alarm中断(在某个时刻产生闹铃中断)。利用这两个中断可以设置每一秒中断一次显示变化时间,用Alarm中断实现闹钟功能。以下为S3C2410内部RTC模块结构图:图5 S3C2410内部RTC模块结构 特点:1.BCD数:秒、分钟、小时、日期、日、月、年;2.闰年生成器;3.报警功能:报警中断或从掉电模式中唤醒;4.已经解决2000年问题;5.独立电源引脚(RTCVDD);6.支持对于实时内核时间节拍的毫秒节拍时间中断。2.2 实验电路图ZLG7290功能电路图:图6 ZLG7290功能电路图IIC总线接口电路图:图7 IIC总线接口电路图图8 TC单元在32.768KHz 频率下振荡的电路2.3 实验主要步骤1.初始化配置(各种寄存器)。2.编写各种相关的中断程序。3.主函数调用这几个中断程序。4.编译程序。5.使用仿真器调试。三、实验详细过程3.1 具体实验过程和内容(1)实现实时时钟功能 设置rRTCCON、rTICNT、rRTCALM寄存器;ICNT6:0=127;可以设置rTICNT=(17)|(127)实现每秒中断一次;以设置闹铃寄存器,例如每秒的第几秒中断一次,实现定时闹钟的功能;设置初始化当前时间;里还包括编写Time Tick中断和Alarm中断的中断服务程序。(2)初始化IIC总线,写一个IIC的操作库。包括发送和接受功能。编写可以向ZLG7290发出指令的函数。(3)编写键盘中断处理程序 通过键盘中断,实现数码管显示日期和时间的切换,还有停止。(4)使用ADS1.2集成开发环境编译调试程序(5)使用仿真器调试。3.2 程序流程图程序入口点2410初始化主函数显示时间闹钟停止延时N切换Y显示日期图9初始化 键盘中断Alarm中断Time tick中断数码管显示时间或日期闹钟输出当前时间图103.3 实验和程序问题分析 这次试验实际上是融合了三个实验的要求,要实验实时时钟的功能,包括显示当前时间,还有设置闹钟,主要使用到2410的RTC的两个中断:Time Tick和Alarm中断。而要实现在数码管上显示当前时间,并且按键盘时实现时间与日期的切换,需要用到数码管和IIC总线的知识。而实现的难处在于如何把几个内容融合并且实现所需的功能,这也是实验要求做的。四、实验输出界面选取主要界面的截图。图11 键盘功能图12 显示日期图13 示时间五、设计心得体会 在老师的帮助下,在组员的协力合作下,我们组最终实现了本次课程设计。通过总结,我们得到了以下的收获: 一:经过一个学期的学习,我们对于嵌入式系统的编程有了一定的理解,但是编程的规范性,程序的仿真,硬件电路的调试等步骤,确实我们还不是很熟悉的,我们需要一个良好的平台,来熟悉和加强这些方面的内容。而通过本次课程设计,我们小组成员在老师的指引和帮助下,认认真真的了解了嵌入式开发板的原理框图,硬件电路图并深入了解了嵌入式编程的相关知识点,在进行设计的过程中,通过结合相关软硬件,我们也了解到了ARM嵌入式系统的硬件开发方法、系统启动程序和外设驱动程序的开发,也掌握了焕发环境的调试技术。 二:通过本次设计,我们再一次体会到了科学的严谨性以及作为一名学者所应该具有的治学态度。软件的编程,除了是对思路的一种考验之外,也是对一个人性情的一个考验,在编程过程中,一个字母,甚至只是一个逗点的错误,都有可能导致整个程序的无法运行,在我们编程的过程中就遇到过很多次这样的情况,只能沿着程序一步步地检查解决问题。经过这次设计之后呢,我们明显感觉自己的逻辑思维能力有了很大的提高。总之,经过本次设计,我们受益匪浅!六、讨论及进一步研究建议 本学期的嵌入式课程设计在不知不觉中结束了,虽说这次课程设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新知识,回顾了以前的一些快要遗忘的知识点,而且使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的趣味,更加清楚地认识到了自己在软件开发及学习上的一些不足之处。下面就来详细写一下我关于此次课程设计的心得体会: 一:课程设计安排的时间如果能适当调整会更有教育效果。每次的课程设计,总是会有很多人因为考试与课程设计时间上的冲突而烦躁,有些人甚至为了能够更好地迎接考试而放下课程设计的工作,选择了抄同学的程序或者用别人的作品桃代李僵,所以我觉得如果将课程设计的时间改在下学期的开始的话,这种现象会少很多。 二:评分项中“作品提交时间”这一项的存在是不合理的,特别是关于纯软件方面的设计。虽然我们承认“快意味着熟练”,但是我们见到更多的是有些同学追求速度了抄袭,也有些人因此就背上了包袱,怕设计的时间太长影响了分数故而不加深入研究而匆匆提交设计。总的来说,这一项分值的设置是弊大于利。 以上是我个人的一点建议,提得不合理的地方,请老师见谅。7、 参考文献6谭浩强.C程序设计(第三版).清华大学出版社.2005.72基于S3C2410的嵌入式系统实验指导书3侯殿有.嵌入式系统开发基础.清华大学出版社,2011.64武俊鹏,张国印,姚爱红,赵国东.基于ARM的嵌入式系统设计实验与实践教程.清华大学出版社,2011.95美AndrewN.Sloss,英DominicSymes,美ChrisWright,沈建华(译).ARM嵌入式系统开发软件设计与优化.北京航空航天大学出版社,2011.1第 9 页附录:主要程序代码: /Main.c#include #include #include def.h#include option.h#include 2410addr.h#include 2410lib.h#include 2410slib.h#include mmu.h#include 2410rtc.h#include 2410IIC.h#include 2410keypad.hvoid Isr_Init(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);U8 KeyDown;U8 SetTime;U8 KeyReal;U8 SetAlarm;U8 AlmFlash = 0;U8 Flash_key11;int k;void Led_Display(int data)/ rGPFDAT = (rGPFDAT & 0xf) | !(data & 0xf)4); rGPFDAT = (rGPFDAT & (0xf4) | (data & 0xf)4); void Main(void) MMU_Init(); ChangeClockDivider(1,1); / 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz Port_Init(); Isr_Init(); Uart_Init(0,115200); Uart_Select(0); Led_Display(0x00); LED8_init(); KeyPadInit(); led_set_time(); Rtc_Alarm_Init(); Uart_Printf(nWelcom to Uart Test!n); Uart_Printf(Baud rate=115200, no flow controln); while(1) /Display_Rtc();LED8_Test(AlmFlash);if(Flash_key11=1)Led_Display(0x0f);/LED Onfor (k=0; k0xffff; k+);/Delay Led_Display(0x00); /LED Off for (k=0; k0xffff; k+);/Delaywhile(KeyDown = 1)KeyDown = 0;/有按键按下,即关闭AlmFlashAlmFlash = 0;/按下.键显示日期if(KeyReal = DOT)date_time_turn = DATE_TURN;/按下NumLock设置时间if(SetTime = 1)GetTimeChange();SetTime = 0;/按下/设置闹钟if(SetAlarm = 1)SetAlarm = 0;GetAlarmChange();SetAlarm = 0; /=void Isr_Init(void) pISR_UNDEF = (unsigned)HaltUndef; pISR_SWI = (unsigned)HaltSwi; pISR_PABORT = (unsigned)HaltPabort; pISR_DABORT = (unsigned)HaltDabort; rINTMOD = 0x0; /All=IRQ mode rINTMSK = BIT_ALLMSK; /All interrupt is masked. rINTSUBMSK = BIT_SUB_ALLMSK; /All sub-interrupt is masked. - April 01, 2002 SOP/=void HaltUndef(void) Uart_Printf(Undefined instruction exception.n); while(1);/=void HaltSwi(void) Uart_Printf(SWI exception.n); while(1);/=void HaltPabort(void) Uart_Printf(Pabort exception.n); while(1);/=void HaltDabort(void) Uart_Printf(Dabort exception.n); while(1);/2410keypad.C#include def.h#include option.h#include 2410addr.h#include 2410lib.h#include 2410slib.h#include 2410keypad.hvoid _irq KeyPad_Int(void);/also Eint1 intint KeyPadInit(void);#define ONEBIT 0x1#define KEYPADCSDIS (rGPBDAT |=(ONEBIT 6)#define KEYPADCSEN (rGPBDAT &=(ONEBIT 6)#define KEYPADDIRMO (rGPBDAT &=(ONEBIT 0)#define KEYPADDIRMI (rGPBDAT |=(ONEBIT 0)void Delay30us(void)unsigned int i;for (i=0;i0x4ff;i+);void Delay60us(void)unsigned int i;for (i=0;i0x9ff;i+);intputcToKBCTL(U8 c)U32 i;/UINTrxbuf10;/UINT x;KEYPADCSEN;KEYPADDIRMO;Delay60us();while(rSPSTA1 & ONEBIT)=0);/ wait while busyrSPTDAT1 = c; / write left justified datawhile(rSPSTA1 & ONEBIT)=0);/ wait while busy KEYPADCSDIS; i = rSPRDAT1;return(i);U8 readKBValue(void)unsigned char i;KEYPADCSEN;KEYPADDIRMO;Delay60us();while(rSPSTA1 & ONEBIT)=0);/ wait while busyrSPTDAT1 = 0x15; / write read key value commandwhile(rSPSTA1 & ONEBIT)=0);/ wait while busy Delay30us();/delay 30usKEYPADDIRMI;rSPTDAT1 = 0xff; / write read key value commandwhile(rSPSTA1 & ONEBIT)=0);/ wait while busyi = rSPRDAT1; KEYPADCSDIS; KEYPADDIRMO;return(i);int KeyPadInit() int t; char dummy = (char)0xff;/ Setup IO port for SPI interface & Keyboard/ Setup EINT1 (KBDINT) rGPFCON &= (0x3 2); / Clear GPF1 rGPFCON |= (0x2 2); / Set GPF1 to EINT1 for Keyboard interrupt rEXTINT0 &= (0x7 4); / Clear EINT1 rEXTINT0 |= (0x2 4); / fallig edge triggered for EINT1/ setup SPI interface/ GPG5 : SPIMISO (KBDSPIMISO)/ GPG6 : SPIMOSI (KBDSPIMOSI)/ GPG7 : SPICLK (KBDSPICLK) rGPGCON &= (0x3 10) | (0x3 12) | (0x3 14); / Clear GPG5,6,7 rGPGCON |= (0x3 10) | (0x3 12) | (0x3 14); / setup _SS signal(nSS_KBD) rGPBCON &= (0x3 12); / Clear GPB6 rGPBCON |= (ONEBIT 7289 rGPBCON &= (0x3 0); / Clear GPB0 rGPBCON |= (ONEBIT 0); / Set Port GPB0 to output for _PWR_OK signal/ rGPDDAT &=(ONEBIT 0); / set _PWR_OK to 0KEYPADDIRMO;/ Setup SPI registers / Interrupt mode, prescaler enable, master mode, active high clock, format B, normal mode/ rSPCON1 = (ONEBIT5)|(ONEBIT4)|(ONEBIT3)|(0x02)|(ONEBIT1); / Poll mode, prescaler enable, master mode, active high clock, format A, normal mode rSPCON1 = (05)|(ONEBIT4)|(ONEBIT3)|(0x02)|(01);/ Developer MUST change the value of prescaler properly whenever value of PCLK is changed. rSPPRE1 = 255;/ 99.121K = 203M/4/2/(255+1) PCLK=50.75Mhz FCLK=203Mhz SPICLK=99.121KhzputcToKBCTL(0xa4);/send init command rSRCPND = BIT_EINT1; /to clear the previous pending states rINTPND = BIT_EINT1;/Define the keypad int entry pISR_EINT1 = (unsigned)KeyPad_Int; rINTMSK=(BIT_EINT1);/enable Eintreturn(TRUE);U8 KeyChange(U8 KeyValue)U8 KeyReturn = 255;switch(KeyValue) case 32:/NumLock KeyReturn = NUMLOCK;break; ca

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论