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

下载本文档

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

文档简介

1、 嵌入式课程设计论文 (2014 - 2015 年度第 二 学期)题 目:基于S3C2410的时钟设计学 院:信息工程学院班 级:12级计算机4班姓 名:刘荣凯指导教师:杜 俊日 期:2015.06报告(学生选课系统) 摘要 本文说明为多功能时钟设计方案,基于S3C2410结合RTC模块,IIC(控制小键盘和数码管等)来做具备定期功能的实时时钟。 实时时钟(RTC)单元在系统电源关闭的情况下可以在备用电池下工作。RTC 可以使用STRB/LDRB ARM操作传输二进制码十进制数的 8 位数据给 CPU。数据包括秒、分钟、小时、日期、天、月、年的时间信息。RTC 单元可以在 32.768KHz

2、的外部晶振下工作,可以可以执行报警功能。关键词:多功能时钟功能时钟;S3C2410;RTC;IIC目录一、实验题目分析11.1 问题描述11.2功能分析11.3 开发平台及工具介绍1二、实验概要设计12.1 实验基本原理12.2 实验电路图4三、实验详细过程63.1 具体实验过程和内容63.2 程序流程图63.3 实验和程序问题分析8四、实验步骤第一大部分(目标机的连接)12五、ADS软件的使用12六、调试部分13七、实验输出界面13八、学习心得14九、参考文献15 一、实验题目分析1.1 问题描述结合实时时钟,IIC(控制小键盘和数码管等)来做具备定期功能的实时时钟。1.2功能分析至少完成以

3、下功能: (1)能显示每秒的时刻 (2)按下功能键能切换显示日期 (3)能设置定时闹钟,定时到产生某种输出 (4)可以扩展考虑加入外部中断,如停止闹钟功能等。1.3 开发平台及工具介绍 实验器材:CITK2410开发板,JTAG连接线,调试器,并口数据线,串口数据线开发软件:ADS1.2集成开发环境二、实验概要设计2.1 实验基本原理 IIC总线:IIC总线的器件分为主器件和从器件。主器件的功能是启动在总线上传送数据,并产生时钟脉冲,以允许与被寻址的器件进行数据传送。SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信

4、号。 图1 起始和停止信号图 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。图2 数据传送时序图 IIC总线(IICSDA、IICSCL)经过VDD33的上拉后,进入ZLG7290数码管:实验使用的数码管是广州周立公司单片机发展有限公司自行设计的一款数码管显示驱动及键盘扫描管理芯片。下面是介绍该数码管的特点还有电路图(图3):1 IIC串行接口提供键盘中断信号方便与处理器接口2 可驱动8 位共阴数码管或64只独立LED 和64个按键3 可控扫描位数可控任一数码管闪烁4 提供数据译码和循环移位

5、段寻址等控制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中断(在某个时刻产生闹铃中断)。利用这两个中断可以设置每一秒中断一次显示变化时间

6、,用Alarm中断实现闹钟功能。以下为S3C2410内部RTC模块结构图:图5 S3C2410内部RTC模块结构 特点:1.BCD数:秒、分钟、小时、日期、日、月、年;2.闰年生成器;3.报警功能:报警中断或从掉电模式中唤醒;4.已经解决2000年问题;5.独立电源引脚(RTCVDD);6.支持对于实时内核时间节拍的毫秒节拍时间中断。2.2 实验电路图2.2.1S3C2410主芯片2.2.2 ZLG7290功能电路图:图6 ZLG7290功能电路图2.2.3 IIC总线接口电路图:图7 IIC总线接口电路图图8 TC单元在32.768KHz 频率下振荡的电路2.2.4 电源电路部分2.2.5

7、时钟电路部分2.2.6 按键电路部分2.2.7 复位电路部分2.3 实验主要步骤1.初始化配置(各种寄存器)。2.编写各种相关的中断程序。3.主函数调用这几个中断程序。4.编译程序。5.使用仿真器调试。三、实验详细过程3.1 具体实验过程和内容(1)实现实时时钟功能 设置rRTCCON、rTICNT、rRTCALM寄存器;ICNT6:0=127;可以设置rTICNT=(1<<7)|(127)实现每秒中断一次;以设置闹铃寄存器,例如每秒的第几秒中断一次,实现定时闹钟的功能;设置初始化当前时间;里还包括编写Time Tick中断和Alarm中断的中断服务程序。(2)初始化IIC总线,写

8、一个IIC的操作库。包括发送和接受功能。编写可以向ZLG7290发出指令的函数。(3)编写键盘中断处理程序 通过键盘中断,实现数码管显示日期和时间的切换,还有停止。(4)使用ADS1.2集成开发环境编译调试程序(5)使用仿真器调试。3.2 程序流程图程序入口点2410初始化主函数显示时间闹钟停止延时N切换Y显示日期图9初始化 键盘中断Alarm中断Time tick中断数码管显示时间或日期闹钟输出当前时间图103.3 实验和程序问题分析 这次试验实际上是融合了三个实验的要求,要实验实时时钟的功能,包括显示当前时间,还有设置闹钟,主要使用到2410的RTC的两个中断:Time Tick和Alar

9、m中断。而要实现在数码管上显示当前时间,并且按键盘时实现时间与日期的切换,需要用到数码管和IIC总线的知识。而实现的难处在于如何把几个内容融合并且实现所需的功能,这也是实验要求做的。3.3.1键值读取模块int keyScan(void) /读取按键,如果SW17按下,则返回1,否则如果按下SW19,则返回0 /j80,2-3,j81,2-3 int keyValue=0,tValue; tValue=rGPGDAT; if(!(tValue&(1<<3) keyValue=1; /若SW17被按下,则将keyValue赋值为1 else if(!(tValue&(

10、1<<2) keyValue=2; /若SW19被按下,则将keyValue赋值为2 return keyValue;/返回keyValue的值3.3.2 GPIO的端口配置;GPE,GPH bl delay ;调用延时子程序 ldr r0,=GPECON ;r0中为寄存器GPECON的值 ldr r1,r0 ;把r0中的值赋给r1 bic r1,r1,#(3<<11*2)|(3<<12*2) ;把GPE11和GPE12设为输出方式 orr r1,r1,#(1<<11*2)|(1<<12*2) str r1,r0 ;将r1的的值保存到

11、r1所对应的内存单元中 ldr 0,=GPHCON ;r0中为寄存器GPHCON的值 ldr r1,r0 ;把r0中的值赋给r1 bic r1,r1,#(3<<6*2)|(3<<4*2) ;把GPH6和GPH4设为输出方式 orr r1,r1,#(1<<6*2)|(1<<4*2) str r1,r0 ;将r1的的值保存到r1所对应的内存单元中3.3.3 程序代码如下:#include ".INCconfig.h"int h=0,m=0,s=0;extern int counter; /*数码管全部显示0*/ void led_

12、init() unsigned char j; for(j=0;j<8;j+) write7279(decode0+j,0); /write7279(decode0+1,0x0A); /write7279(decode0+6,0x0A); /*数码管显示数字函数*/ void displed() write7279(decode0+3,h/10); write7279(decode0+2,h%10); write7279(decode0+1,0x0A); write7279(decode0+0,m/10); write7279(decode0+7,m%10); write7279(dec

13、ode0+6,0x0A); write7279(decode0+5,s/10); write7279(decode0+4,s%10); void Main() /char p; Target_Init(); /目标初始化 led_init(); delay10ms(100); while(1); s=counter; if(s>59)s-=60; m+=1;/超过59s,需要进位if(m>59)m-=60; h+=1; send_byte(0x88); /超过59m,需要进位if(h=24)h=0;m=0;counter=0;displed();switch(key_number)

14、 case 0: send_byte(cmd_test); /测试键 break; case 1: long_delay();m=m+1; Delay(7000); break; case 2: for(p=0;p<8;p+) /循环右移 send_byte(0xA0); send_byte(0xC8+7); send_byte(p); long_delay(); Delay(7000); for(;) if (key_number!=2) break; Delay(7000); send_byte(0xA2); break; case 4: send_byte(cmd_reset);

15、/复位键 break; case 5: write7279(decode1+5,key_number/16*8); write7279(decode1+4,key_number & 0x0f); break; case 9: for(p=0;p<8;p+) /左移 send_byte(0xA1); send_byte(0xC8); send_byte(p); long_delay(); Delay(7000); break; case 10: for(p=0;p<8;p+) /循环左移 send_byte(0xA1); send_byte(0xC8); send_byte(

16、p); long_delay(); Delay(7000); for(;) if (key_number!=10) break; Delay(7000); send_byte(0xA3); break; default: break; key_number = 0xff; Delay(50); 3.3.4定时器定时1秒void Timer1_init(void) rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000; /配置GPG口为信号输出 rGPGDAT = rGPGDAT | 0x300; rTCFG0 = 255; / Prescaler0=2

17、55 rTCFG1 = 0 << 4; / rTCNTB1 = 48828; / 在pclk=50MHZ下,1秒钟的记数值rTCNTB1 = 50000000 / 4 / 256 = 48828;rTCMPB1 = 0x00;四、实验步骤第一大部分(目标机的连接):把开发板电源接口、Muilti-ICE Embeded接口连接好,如下图,然后打开开发板电源。第一步:打开第二步:选择File的Load Configuration第三步:选择第四步:把文件里的内容修改一下,把里边的7改为9第五步:用记事本修改第四步所讲的内容第六步:即将里面的ARM7TDMI全部改为ARM9TDMI,其

18、他不变。第七步:然后点文件,选择保存。第八步:把修改后的选中,点击打开第九步:打开之后,会出现说明宿主机找到ARM的CPU了,即宿主机与ARM目标开发板连接上的画面。五、ADS软件的使用:第一步:打开,打开效果图为下图第二步:将D:ARMWINCE&ADSADS实验跑马灯实验实验代码下的拖入上图中其效果图为:(本部分是利用已有的工程做的ADS应用实验,其他应用试验如法炮制;对于如何新建工程,详细步骤见实验一ADS开发环境试验)第三步:左击如图标出的图标(即调试参数设置),效果图如下图所示第四步:选择Target Settings,进行设置。第五步:选择ARM Linker,进行设置,其

19、中Scatter栏里的文件路径为:试验程序路径下的scat文件(如图)。第六步:选择ARM fromELF选项,设置具体配置。第七步:最后,点击上图中的OK,调试配置参数就设置完成了。第八步:对程序进行Make操作。六、调试部分:第一步:打开调试的软件AXD Debugger第二步:配置目标板。第三步:点击Configure Target,对其进行设置。第四步:选择如上图所示点亮的连接驱动(Muiti-ICE),点击OK。调试软件就发现了目标板的ARM CPU。第五步:下载镜像文件第六步:调试运行。七、实验输出界面选取主要界面的截图。图11 键盘功能图12 显示日期图13 示时间八、学习心得通

20、过本次对ARM920T内核的S3C2410进行实验,使我对ARM嵌入式世界有了初步认识。ARM是一种高性能、低功耗、高速的微处理器。S3C2410片上资源丰富,其多大117个通用I/O,56个中断源和24个外部中断。我以前研究芯片主要是看数据手册和芯片的外围电路,但是在刚开始着手ARM时,我是弄得是一头雾水。在老师的指点下,我开始从芯片的例子程序入手,一个一个地弄明白历程是怎么执行的,I/O口是怎么配置的,中文字符怎么加入、LCD上的点怎么连成线等等。在经过一番自习琢磨之后,我对嵌入式有了深一步的理解。在历程中我们很少是对系统的硬件资源进行直接操作的,大部分时候我们是调用历程里面给出的各种操作

21、函数对芯片进行控制,这样就使得整个程序更加的有条理,操作对象不再是底层硬件了,而是系统给出的各种函数。我在实验调试的时候解决了一下几个问题:通过此次课程作业,让我严重地意识到了自己知识的不全面,以及动手能力的不熟练,当然,也并非没有收获。从理论到实践,我学到了很多东西,不仅巩固了以前所学的知识,而且也学到了很多书本上不能学到的内容动手实践能力。起初刚确定题目时,一点思路都没有,通过组员之间的互相讨论,以及在老师的指导帮助下,渐渐开始构思,实验,反复的检验,最终把这次课程作业完成。实验过程中,我遇到了以下几个问题:1、如何在数码管上显示特殊字符?答:使用解码方式0可实现除0到F之外的个别特殊字符

22、,如“-”。2、如何实现LED闪烁点亮?答:使用HD7279的纯指令88H,通过发送send_byte(0x88);即可实现。3、如何依次点亮数码管?答:通过改变decode0+j中的j即可4、如何实现I/O口的初始化?答:首先对I/O口进行输入输出配置,然后给端口发送响应值。如:rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000;rGPGDAT = rGPGDAT & 0xeff | 0x200;5、新建的工程要尽可能的避免中文路径(这个整得我很抓狂,在程序执行过程中老是报错,最终在实验室老师的指导下得以改正)6、关于参数在中断函数和主函数两个

温馨提示

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

评论

0/150

提交评论