数字实时时钟设计.docx
《数字实时时钟设计.docx》由会员分享,可在线阅读,更多相关《数字实时时钟设计.docx(41页珍藏版)》请在冰点文库上搜索。
数字实时时钟设计
四川理工学院
课程设计书
学院计算机学院
专业计算机科学与技术
班级2011级3班
课程嵌入式接口技术
题目数字实时时钟设计
教师凌军
学生
摘要
本设计以S3C2410处理机核心,以实时时钟芯片DS1302和液晶显示LCD1602为主体设计了一款简易数字时钟。
该时钟系统主要由ARM的最小系统、时钟模块、闹钟模块、液晶显示模块、键盘控制模块组成。
系统具有简单清晰的操作界面,能够准确显示时间(显示格式为时时:
分分:
秒秒,24小时制),可随时进行时间调整,具有闹钟时间设置、闹钟开/关。
设计以硬件软件化为指导思想,充分发挥嵌入式功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。
同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性。
由于系统所用元器件较少,嵌入式ARM所被占用的I/O口不多,因此系统具有一定的可扩展性。
软件程序采用均采用C语言编写,便于移植与升级。
报告详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。
关键词 数字时钟;嵌入式;S3C2410;DS1302;LCD1602
系统概述
从古代的滴漏更鼓到近代的机械钟,从电子表到目前的数字时钟,为了准确的测量和记录时间,人们一直在努力改进着计时工具。
钟表的数字化,大力推动了计时的精确性和可靠性。
在以往单片机构成的装置中,实时时钟是必不可少的部件。
而目前常用的实时时钟,很多采用单片机的中断服务来实现,这种方式一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许;有的则使用并行接口的时钟芯片,如MC146818、DS12887等,它们虽然能满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂,占用地址、数据总线多,芯片体积大,占用空间多,给其它设计带来诸多不便。
本设计选取串行接口时钟芯片DS1302与ARM同步通信构成数字时钟电路。
其简单的三线接口能为单片机节省大量资源,DS1302的后背电源及对后背电源进行涓细电流充电的能力保证电路断电后仍能保存时间和数据信息等。
这些优点解决了目前常用的实时时钟所无法解决的问题。
该时钟电路强大的功能和优越的性能,在很多领域的应用中,尤其是某些自动化控制、长时间无人看守的测控系统等对时钟精确性和可靠性有较高要求的场合,具有很高的使用价值。
系统工作原理
1、嵌入式ARM处理器S3C2410简介
S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用FBGA封装,采用0.18um制造工艺的32位微控制器。
该处理器拥有:
独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer,I/O口,RTC,8路10位ADC,TouchScreen接口,IIC-BUS接口,IIS-BUS接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。
S3C2410处理器最高可运行在203MHz。
2、实时时钟芯片DS1302简介
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源
引脚,同时提供了对后备电源进行涓细电流充电的能力。
DS1302内部结构
硬件方案设计
1、硬件方案
实时时钟芯片:
DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。
DS1302的在实时显示时间中的应用。
它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。
所以本嵌入式实时时钟系统采用此实时时钟芯片作为首选。
2、核心器件
实时时钟芯片:
DS1302
嵌入式处理器:
S3C2410
3、主要参数
实时时钟芯片:
1)实时时钟,对年月日,时分秒,星期计数;闰年自己补偿(调整),有效计数到2100年
2)31*8位RAM高速数据存储器
3)串行数据输入/输出,3线接口
4)2.0-5.5V全操作供电范围
5)2.0V时电流低于300nA
6)单字节/突发模式的时钟/RAM数据读写
嵌入式ARM处理器:
(1)功能单元
1)内部1.8V,存储器3.3V,外部I/O3.3V,16KB数据Cache,16KB指令Cache,MMU。
2)内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。
3)LCD控制器,一个LCD专业DMA。
4)4个带外部请求线的DMA。
5)3个通用异步串行端口(IrDA1.0,16-ByteTxFIFOand16-ByteRxFIFO),2通道SPI
6)一个多主I2C总线,一个I2S总线控制器。
7)SD主接口版本1.0和多媒体卡协议版本2.11兼容。
8)两个USBHOST,一个USBDEVICE(VER1.1)。
9)4个PWM定时器和一个内部定时器。
10)看门狗定时器。
11)117个通用I/O。
12)56个中断源。
13)24个外部中断。
14)电源控制模式:
标准、慢速、休眠、掉电。
15)8通道10位ADC和触摸屏接口。
16)带日历功能的实时时钟。
17)芯片内置PLL。
18)设计用于手持设备和通用嵌入式系统。
19)16/32位RISC体系结构,使用ARM920TCPU核的强大指令集。
20)带MMU的先进的体系结构支持WinCE、EPOC32、Linux。
21)指令缓存(Cache)、数据缓存、写缓存和物理地址TAGRAM,减小了对主存储器带宽和性能的影响。
22)ARM920TCPU核支持ARM调试的体系结构。
23)内部先进的位控制器总线(AMBA)(AMBA2.0,AHB/APB)。
24)
(2)系统管理
25)小端/大端支持
26)地址空间:
每个BANK128MB(全部为1GB)。
27)每个BANK可编程为8/16/32位数据总线。
28)BANK0到BANK6为固定起始地址。
29)BANK7可编程BANK起始地址和大小。
30)一共8个存储器BANK。
31)前6个存储器BANK用于ROM、SRAM和其它。
32)两个存储器BANK用于ROM、SRAM、和SDRAM(同步随机存储器)。
33)支持等待信号用以扩展总线周期。
34)支持SDRAM掉电模式下的自刷新。
35)支持不同类型的ROM用于启动(NOR/NANDFlash、EEPROM和其它)。
4.DS1302时钟芯片接口参数
封装:
引脚描述:
X1,X2
接标准的32.768kHz石英晶振
GND
接地
/RST
复位引脚,由于在读写操作期间要求为高电平,所以可以作片选来使用
I/O
3线通信接口的数据输入/输出(双向)
SCLK
串行同步时钟输入
Vcc1
提供电池备份电源
Vcc2
主电源供应,可以用于给Vcc1充电;
当Vcc2-Vcc1>02V时由Vcc2供电,
当Vcc2芯片操作命令字
BIT7
必须为1,如果是0的话,将不能写入到DS1302内部
BIT6
表示接下来要操作的是时钟/日历数据(如果为0),还是是RAM(如果为1)
BIT5~BIT1
指定待读写的寄存器或RAM地址(0~30)
BIT0
指定是读操作还是写操作,如果是0则为写,是1则为读
注意:
命令字总是从最低位(LSB)开始输入DS1302
复位和时钟控制
所有的数据传输操作都是是/RST为高的时候进行的./RST引脚服务于两种功能:
1./RST打开芯片移位寄存器访问控制逻辑,其实就是片选嘛...
2./RST信号用于终止单字节或多字节的数据传输
Aclockcycleisasequenceofafallingedgefollowedbyarisingedge.-这句话是啥意思,不怎么明白,似懂非懂
对于数据输入:
数据必须在SCLK的上升沿保持有效- 先写数据,然后一个SCLK从低到高的跳变
对于数据输出:
数据在SCLK的下降沿从DS1302输出- 先SCLK从高到低的跳变,然后取数据
如果/RST是低的话,所有的数据传输被终止,并且此时IO口变为高阻状态
在上电的时候,/RST在Vcc>2.0V之前必须保证为0- 试问:
怎么来设计这样的电路?
SCLK在/RST由0变为1的时候必须为0.
数据输入到DS1302
在通过8个SCLK输入一个写命令字后,在下8个上升沿数据被输入到DS1302,数据位从LSB开始 注:
先在IO上放置数据,然后产生一个上升沿.
多余的SCLK将被忽略~
单字节读写操作时序:
数据输出(见上图)
在通过8个SCLK输入一个写命令字后,在下8个上升沿数据从DS1302输出,数据位从LSB开始.
注意:
第1个被输出的数据位是在写完命令字的最后一位的第1个下降沿被输出
多余的SCLK的效果是重复发送数据,不产生其它影响~
突发模式(多字节操作)
多字节突发读取/写入可用于时钟,同样可用于RAM的读取,在命令控制中的位6中指示.位5到位1==逻辑1.
时钟的9到31号寄存器没有数据存储能力,RAM的31号也没有(0-30).
突发模式从地址0的第0位开始数据传输.
在写时钟寄存器时(共8个),必须按照寄存器的顺序依次写入.
在写RAM数据时,不需要同时写所有31个寄存器.
时钟/日历
如下图所示.这些寄存器中的相关数据都是以BCD码的形式保存的.
寄存器说明:
秒寄存器:
第7位为时钟停摆标志位;10SEC和SEC分别代表秒的十位和个位.
分寄存器:
10MIN和MIN分别代表分的十位和个位.
时寄存器:
第7位为12/24小时时制选择位,见下面的描述.
日寄存器:
10DATE和DATE分别用来表示日的十位和个位.
月寄存器:
10M和MONTH分别用来表示月份的十位和个位.
星期寄存器:
DAY用来表示星期
年寄存器:
10YEAR表示年的十位,最大为99,表示2099年;YEAR表示年份的个位.
控制寄存器:
见写保护位描述.涓流充电器寄存器:
见涓流充电器描述.
时钟停摆标志
秒寄存器的第7位被定义为时钟停摆标志.
当该位被置为1的时候,时钟停摆,DS1302被置于低功耗模式,当前电源损耗低于100nA.
当该位被写清除的时候,时钟就开始摆动.开始上电时该位未定义.
上午-下午/12-24小时制
时寄存器的第7位被定义为12小时/24小时选择位.当该位为高,选择12小时制.
在12小时制模式中,第5位为AM/PM标志,逻辑高表示PM.在24小时制模式中,第5位为第2个'10'小时位(仅该位时表示20-23小时,懂了吧?
).
写保护位
控制寄存器的第7位为写保护标志位.第6到第0位被强制为0,读的时候也是0.上电初始化状态未定义.
写之前记得去除写保护位.
时钟/日历突发模式
该模式下,时钟/日历寄存器的前8个可以被连续地读或写,从地址0的第0位开始.
涓流寄存器无法在突发模式下访问.
在开始读之前,当前时间值被传送到第2套内部寄存器中.因此读到的数据被锁定了,此时真正的时间寄存器仍然在走,以免在读完之前对新的时间造成干扰
读写操作详细时序图
硬件电路设计
时钟模块电路如图所示,其中晶振采用的是32.768kHz,经内部电路分频后可获得一个标准的秒脉冲信号;电阻R3、R4是I2C总线的上拉电阻。
DS1302电路图
键盘模块
键盘模块设置了四个按键:
KEY1、KEY2、KEY3、KEY4。
其中KEY1为模式切换键,KEY2为设定值上升键,用KEY3为设定值减小键,KEY4是返回键。
电路连接如图2-10所示。
4个上拉电阻可以保证在没有按键输入时,进入单片机四个I/O口的按键状态均为高电平,防止干扰产生;当有按键按下时,相应的端口线状态转为低电平。
键盘电路
LCD显示程序设计
LCD显示程序的设计一般先要确定LCD的初始化、光标定位、确定显示字符后,LCD就可以按如图显示。
LCD显示程序流程图
电源模块
用220V市电经整流、滤波、稳压后,输出稳定的+5V的直流电为其供电。
+5V稳压器采用CW7805,其应用电路如图所示。
图中,滤波电容C6和C8的值为1000uF,C7和C9为0.33uF。
发光二极管D6的作用是显示读写器的电源是否接通,若接通则D6灯亮,无接通则D6灯灭。
电源电路图
软件方案设计
1、软件功能模块设计
该嵌入式实时时钟包含以下软件模块:
1)嵌入式单片机S3C2410系统初始化
2)系统I/O初始化
3)实时时钟初始时间预设
4)循环读取实时时钟数据
5)刷新时钟数据到显示器(屏幕)
2、模块程序流程图
重复读取当前时间
3、程序代码(见附录)
系统调试
本设计的核心采用是S3C2410处理器,以时钟芯片DS1302和液晶LCD1602作为外围元件,构成了一个多功能的数字时钟系统。
图示为程序运行结果S3C2410数码管显示结果。
系统通过仿真调试后,可以稳定运行。
同时可以对时间、日期、星期进行设置。
设计采用串行器件具有线路简单、体积小、价格低等优点。
同时该系统稍加改造,就可以作为工业实时采集中的一个模块。
总结
通过本课程设计,提高了我们对嵌入式应用设计的分析问题、解决问题的能力。
巩固了嵌入式系统的基本理论知识,进一步了解和掌握嵌入式接口课程中所讲授的概念和编程方法,同时增强对嵌入式接口的理解和利用嵌入式接口开发应用产品的能力。
了解了嵌入式系统的设计方法,掌握了正确地选择嵌入式接口和外设,同时再一次掌握了用C语言对嵌入式接口进行编程的方法,提高了利用网络进行资料查找的能力本设计以功能齐全适用于大众为指导思想,同时系统经组装、调试后,可以稳定运行。
而且可以对时间、日期、星期和闹钟进行设置。
系统采用串行器件具有线路简单、体积小、价格低等优点。
为便于对系统进行更换升级和移植!
报告特此详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。
参考文献
[1]贾金玲.单片机原理及应用[M].成都:
电子科技大学出版社,2004.8
[2]贾金玲.微型计算机原理及应用[M].重庆:
重庆大学出版社,2001.12
[3]贾智平.嵌入式系统原理与接口技术[M].北京:
清华大学出版社,2009.8
[4]DS1307datasheethttp:
//www.maxim-
[5]刘守义.单片机应用技术.西安:
西安电子科技大学出版社,2002
[6]房小翠.单片机实用系统设计技术.北京:
国防工业出版社,2003
[7]李华.MCS-51系列单片机实用接口技术.北京:
电子工业出版社,2000
[8]何立名.单片机应用系统设计系统配置与接口技术.北京:
北京航空航天大学出版社,2004
附录
系统及IO初始化(汇编)
;/*定义堆栈的大小*/
;****用户可根据实际需要修改****
USR_STACK_LEGTHEQU64
SVC_STACK_LEGTHEQU16
FIQ_STACK_LEGTHEQU16
IRQ_STACK_LEGTHEQU64
ABT_STACK_LEGTHEQU0
UND_STACK_LEGTHEQU0
Mode_USREQU0x10
Mode_FIQEQU0x11
Mode_IRQEQU0x12
Mode_SVCEQU0x13
Mode_ABTEQU0x17
Mode_UNDEQU0x1B
Mode_SYSEQU0x1F
I_BITEQU0x80;whenIbitisset
(1),IRQisdisabled
F_BITEQU0x40;whenFbitisset
(1),FIQisdisabled
/************************************************************************/
;/*引入的外部标号在这声明*/
IMPORT__main;C语言主程序入口
IMPORTFIQ_Exception;FIQ中断服务程序
IMPORTIRQ_Exception;IRQ中断服务程序
IMPORTTargetBusInit;针对目标板的总线系统初始化
IMPORTTargetResetInit;调用main函数前目标板初始化代码
;/*给外部使用的标号在这声明*/
EXPORTVectors
EXPORTResetInit
EXPORTDisableMMU
EXPORTEnableICache
EXPORTDisableICache
EXPORTEnableDCache
EXPORTDisableDCache
EXPORT__rt_div0
EXPORT__user_initial_stackheap
;/************************************************************************/
CODE32
AREAStartup,CODE,READONLY
;/*异常向量表*/
Vectors
LDRPC,ResetAddr
LDRPC,UndefinedAddr
LDRPC,SWI_Addr
LDRPC,PrefetchAddr
LDRPC,DataAbortAddr
DCD0
LDRPC,IRQ_Addr
LDRPC,FIQ_Addr
ResetAddrDCDResetInit
UndefinedAddrDCDUndefined
SWI_AddrDCDSoftwareInterrupt
PrefetchAddrDCDPrefetchAbort
DataAbortAddrDCDDataAbort
NouseDCD0
IRQ_AddrDCDIRQ_Exception
FIQ_AddrDCDFIQ_Handler
;/*未定义指令*/
Undefined
BUndefined
;/*软中断*/
SoftwareInterrupt
CMPR0,#4
LDRLOPC,[PC,R0,LSL#2]
MOVSPC,LR
SwiFunction
DCDIRQDisable;0
DCDIRQEnable;1
DCDFIQDisable;2
DCDFIQEnable;3
IRQDisable
;关IRQ中断
MRSR0,SPSR
ORRR0,R0,#I_BIT
MSRSPSR_c,R0
MOVSPC,LR
IRQEnable
;开IRQ中断
MRSR0,SPSR
BICR0,R0,#I_BIT
MSRSPSR_c,R0
MOVSPC,LR
FIQDisable
;关FIQ中断
MRSR0,SPSR
ORRR0,R0,#F_BIT
MSRSPSR_c,R0
MOVSPC,LR
FIQEnable
;开FIQ中断
MRSR0,SPSR
BICR0,R0,#F_BIT
MSRSPSR_c,R0
MOVSPC,LR
;/*取指中止*/
PrefetchAbort
BPrefetchAbort
;/*取数据中止*/
DataAbort
BDataAbort
;/*快速中断*/
FIQ_Handler
STMFDSP!
{R0-R3,LR}
BLFIQ_Exception;FIQ中断处理
LDMFDSP!
{R0-R3,LR}
SUBSPC,LR,#4
ResetInit
BLInitStack;初始化堆栈
BLTargetBusInit;总线系统初始化(函数中不允许堆栈操作)
BLTargetResetInit;针对目标板的系统初始化
MRCp15,0,R1,c1,c0,0;(MMU设置,异步总线模式)读控制寄存器
ORRR1,R1,#0xC0000000;当HDIVN=1时操作有效
MRCp15,0,R1,c1,c0,0
B__main;跳转到c语言入口
B.;如果main返回,则死循环
;/*包含要烧写的bin文件*/
EXPORTFLASH_FUNCTION
EXPORTFLASH_FUNCTION_END
FLASH_FUNCTION
INCBINflash.bin
FLASH_FUNCTION_END
DisableMMU
MRCp15,0,R0,c1,c0,0
BICR0,R0,#(1<<0)
MCRp15,0,R0,c1,c0,0
MOVPC,LR
EnableICache
MRCp15,0,R0,c1,c0,0
ORRr0,R0,#(1<<12)
MCRp15,0,R0,c1,c0,0
MOVPC,LR
DisableICache
MRCp15,0,R0,c1,c0,0
BICR0,R0,#(1<<12)
MCRp15,0,R0,c1,c0,0
MOVPC,LR
EnableDCache
MRCp15,0,R0,c1,c0,0
ORRR0,R0,#(1<<2)
MCRp15,0,R0,c1,c0,0
MOVPC,LR