实时时钟实验报告
- 格式:doc
- 大小:233.50 KB
- 文档页数:19
四川大学网络教育学院
专业课课程设计
题 目
办学学院 四川大学电气信息学院
学习中心 黔江奥鹏
专业层次 专升本
年 级 0903
学生姓名 石胜良
学 号 aDH1091g1032
2010年 7 月 15 日
四川大学网络教育学院
实验报告
实验名称: 实时时钟实验
学习中心 姓 名 学 号
实验内容:
根1、实验题目分析
1.1 问题描述
结合实时时钟,IIC(控制小键盘和数码管等)来做具备定期功能的实时时钟。
1.2功能分析
至少完成以下功能:
(1)能显示每秒的时刻
(2)按下功能键能切换显示日期
(3)能设置定时闹钟,定时到产生某种输出
(4)可以扩展考虑加入外部中断,如停止闹钟功能等。
1.3 开发平台及工具介绍
实验器材有:
CITK2410开发板,JTAG连接线,RS-232直通连接线
RVDS集成开发环境,超级终端工具,
2、实验概要设计
2.1 实验基本原理
IIC总线:IIC总线的器件分为主器件和从器件。主器件的功能是启动在总线上传送数据,并产生时钟脉冲,以允许与被寻址的器件进行数据传送。
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
超始和停止信号图
数据传送时序图
IIC总线(IICSDA、IICSCL)经过VDD33的上拉后,进入ZLG7290
数码管:实验使用的数码管是广州周立公司单片机发展有限公司自行设计的一款数码管显示驱动及键盘扫描管理芯片。下面是介绍该数码管的特点还有电路图:
1 I2C 串行接口提供键盘中断信号方便与处理器接口
2 可驱动8 位共阴数码管或64 只独立LED 和64 个按键
3 可控扫描位数可控任一数码管闪烁
4 提供数据译码和循环移位段寻址等控制
5 8 个功能键可检测任一键的连击次数
6 无需外接元件即直接驱LED 可扩展驱动电流和驱动电压
7 提供工业级器件多种封装形式PDIP24 SO24
采用24 引脚封装引脚图如图所示其引脚功能分述如下:
实时时钟(Real Time Clock):2410提供了一个实时时钟,该时钟使用独立的一路1.8V供电,保证主电源切断时能正常维持RTC工作。2410的RTC支持两个中断:Time
Tick(固定在一个频率内发出的时钟中断) 和Alarm中断(在某个时刻产生闹铃中断)。利用这两个中断可以设置每一秒中断一次显示变化时间,用Alarm中断实现闹钟功能。以下为S3C2410内部RTC模块结构图:
2.2 实验电路图
ZLG7290功能电路图:
IIC总线接口电路图:
2.3 实验主要步骤
1.初始化配置(各种寄存器)。
2.编写各种相关的中断程序。
3.主函数调用这几个中断程序。
4.编译程序,在zoc串口工具进行测试。
5.使用zoc下载和调试。
3、实验详细过程
3.1 具体实验过程和内容
(1)实现实时时钟功能
设置rRTCCON、rTICNT、rRTCALM寄存器
TICNT[6:0]=127;可以设置rTICNT=(1<<7)|(127)实现每秒中断一次。
可以设置闹铃寄存器,例如每秒的第几秒中断一次,实现定时闹钟的功能。
要设置初始化当前时间。
这里还包括编写Time Tick中断和Alarm中断的中断服务程序。
(2)初始化IIC总线
编写一个IIC的操作库。包括发送和接受功能。
编写可以向ZLG7290发出指令的函数。
(3)编写键盘中断处理程序
通过键盘中断,实现数码管显示日期和时间的切换,还有停止。
(4)使用RVDS集成开发环境编译调试程序
(5)使用ZOV软件测试
3.2 程序流程图
程序入口点
2410初始化
显示时间 主函数
闹钟 停止
显示日期 是否切换
3.3 实验和程序问题分析
这次试验实际上是融合了三个实验的要求,要实验实时时钟的功能,包括显示当前时间,还有设置闹钟,主要使用到2410的RTC的两个中断:Time Tick和Alarm中断。
而要实现在数码管上显示当前时间,并且按键盘时实现时间与日期的切换,需要用到数码管和IIC总线的知识。
而实现的难处在于如何把几个内容融合在一起并且实现所需的功能,这也是实验要求做的。
4、实验输出界面
选取主要界面的截图。
5、总结
这次实验其实是包含了几个内容的,有实验5的实时时钟(RTC)实验,实验6的IIC总线与数码管实验。试验7的IIC总线与键盘实验。而实现的功能也相应增加了,因此难度加大了一点。要分别掌握RTC,IIC,还有数码管的知识。但是通过这次实验,我对它们的初始化
Alarm中断 Time tick中断 键盘中断
输出当前时间 数码管显示日期或时间 闹钟
知识得到了巩固。
在没有学RTC的时候,我就对某些事情感到好奇,我的手机拥有定时开机和关机功能,闹钟功能,疑惑的是,既然手机都关了,为何能够自动开机甚至是在关机的情况下相应闹钟功能。通过学习RTC的知识,我明白了2410提供了一个实时时钟,该时钟使用独立的一路1.8V供电,保证主电源切断时能正常维持RTC工作。手机相应闹铃和自动开机都有着相似的原理,帮我解惑不少。要想设计一个实时时钟和闹钟的功能,只需要RTC的两个中断,Time Tick和Alarm,需要设置一些寄存器的初值。
另外,通过使用数码管,还有自己上网搜索一些资料,了解到如何使晶体管发亮,而形成自己所要显示的字符或者数字形状,例如显示时间。而这次实验就是要用数码管显示时间或者日期。由于发光是用硬件实现的,而要控制得到我们要的输出,要通过我们编写代码,幸好中间的过程已经被实现了,我们实际上在键盘上打入数字,我们只需要初始化一些寄存器的值,数码管就会有显示。
而ZLG7290产生的中断,主机通过IIC总线可以读取。而IIC总线协议是需要了解过程的。
学习嵌入式系统的时间并不长,而且又是第一次接触,因此有很多东西还是不太了解,
虽然说时间不长,但是还是很有收获的,这次毕竟使自己有机会去学习一些贴近硬件的知识,如果将来有机会再学习,我还是很乐意的。毕竟一个真正学习计算机的人不能只知道软件的知识。
附录:主要程序代码:
#include "2410addr.h"
#include "target.h"
#include "2410lib.h"
#include "iic.h"
void iic_init(void)
{
rGPEUP |= 0xc000; // 禁止上拉
rGPECON |= 0xa00000; // 设置 GPIO 为 IIC 总线
// Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx
clock=IICCLK/16
//rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);
//rIICADD = 0x10; // 2410 从设备地址
//rIICSTAT = 0x10; // IIC 总线输出有效
}
void iic_send_master(unsigned char *buf, int size)
{
// IIC 总线 Master 模式数据发送函数
int fc1;
// ZLG7290要求IIC传输速率不大于32Kbit/s,即Tx clock不大于32KHz
// 设置IICCLK=PCLK/512 Tx clock=IICCLK/4,则
// 如果FLCK=200MHz,则最大Tx clock = 24kHz,处于可接受范围
// 初始化 IIC
rIICCON = (1<<7) | (1<<6) | (1<<5) | (0<<4) | (3<<0);
rIICSTAT = 0xD0;
// 发送从设备地址
rIICDS = *(buf++) & 0xFE;
size--;
rIICSTAT = 0xF0;
while(!(rIICCON & IIC_PENDING_BIT));
while(size>0)
{
// 发送 buf 数据
rIICDS=*(buf++);