I编号(学号):基于DSP的数字钟设计题目:基于DSP的数字钟设计学院:信息与电气工程学院专业:电子信息工程姓名:指导教师:成绩:完成日期:年月日1基于DSP的数字钟设计DSP芯片既具有高速数字信号处理功能,又具有实时性强、功耗低、集成度高等嵌入式微计算机的特点,所以随着科技的发展,DSP技术在机电控制领域的应用愈加广泛。LED可显示字符,且显示清晰美观、功耗低,在电子产品中也广泛应用。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个DSP应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了DSP芯片系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用DSP芯片内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本文主要介绍用DSP芯片内部的定时/计数器来实现电子时钟的方法,本设计由TMS320LF2407芯片和LED数码管为核心,辅以必要的电路,构成了一个DSP电子时钟。数字时钟方案数字时钟是本设计的最主要的部分。本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。而且,2由于是软件实现,当DSP芯片不上电,程序不执行时,时钟将不工作。数码管显示方案初步计划采用动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。总体设计利用TMS320LF2407芯片制作简易电子时钟,由六个LED数码管、五个按键、数码管驱动74HC273及数码管位选74HC138,如下图所示:电源部分直流电源+5V复位电路按键控制部分TMS320LF2407数码管驱动74HC273位选部分74HC1386个七段共阴极数码管显示秒、分、时位图系统框图3模块设计位选芯片74HC13874HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138与74HC238逻辑功能一致,只不过74HC138为反相输出。74HC138译码器可接受3位二进制加权地址输入(A,B和C),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(-S2和-S3)和一个高有效(S1)。除非S2和S3置低且S1置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需1片74HC138芯片即可轻松实现6个数码管的选择导通。如图2.2所示:图74HC138译码器驱动芯片74HC27374HC273是一款高速CMOS器件,74HC273引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC273具有八路边沿触发,D型触发器,带独立的D输入和Q输出。74HC273的公共时钟(CLK)和主复位(-CLR)端可同时读取和复位(清零)所有触发器。每个D输入的状态将在时钟脉冲上升沿之前的一段就绪时间内被传输到触发器对应的输出(Qn)上。一旦CLR输入电平为低,则所有输出将被强制置为低,而不依赖于时钟或者数据输入。74HC273适用于要求原码输出或者所有存储元件共用时钟和主复4位的应用,如下图所示:74HC273数码管显示下图为共阴极数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由DSP控制器控制组合0-9十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,此时数码管显示1。由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的,如下图2.4所示:LED数码管控制部分TMS320LF2407A是TI公司推出的一款定点DSP控制器,它采用了高性能静态CMOS技术,使得供电电压降为3.3V,减小了控制器的功耗;40MIPS的执行速度使得指令周期缩短到25ns(40MHz),从而提高了控制器的实时控制能力;集成了32K5字的闪存(可加密)、2.5K的RAM、500ns转换时间的A/D转换器,片上事件管理器提供了可以满足各种电机的PWM接口和I/O功能,此外还提供了适用于工业控制领域的一些特殊功能,如看门狗电路、SPI、SCI和CAN控制器等,从而使它可广泛应用于工业控制领域。DSP2407最小系统图如上图2.5所示,DSP2407最小系统包括6部分:DSP2407(TMS320LF2407A)、电源、晶体振荡器接口电路、JTAG接口电路、XF引脚LED指示灯和I/O口LED指示灯。本最小系统选择了TI公司的TPS767D301作为DC/DC转换芯片。它是一个双路低压降的电压调节器,输入为+5V电压,可输出一路+3.3V固定电压及一路1.5~5V可调电压,每路电流最大输出为1A。电源电路原理图如下图所示。+3.3V输出电压供LF2407A使用,另一路可输出+1.8V,本最小系统暂不用,如下图所示6DSP2407最小系统电源电路原理图PLL滤波电路。在DSP内部,有一个锁相环时钟模块PLL(Phase-Lockloops),它是被作为一个片内未设看待的,接在片内外设总线上,为DSP提供所需的各种时钟信号。DSP2407的锁相环时钟电路需要片外滤波器电路的配合,PLL局部电路图如下图2.7所示。DSP2407A最小系统时钟硬件设计有两种工作方法。一种是利用锁相环时钟模块PLL中提供的内部振荡电路,在DSP芯片的引脚XTAL1/CLKIN与XTAL2之间连接一晶振,启动内部振荡器。另一种方法是不使用片内的振荡电路,完全由外部有源晶体振荡器产生时钟信号,直接接入XTAL1/CLKIN引脚,此时,XTAL2脚悬空。这种方法称为晶振方式。但着一方式仍是用片内的PLL倍频电路来对这一来自片外的时钟进行倍频,以产生所需的时钟。锁相环电路PLL片外滤波电路JTAG标准接口。JTAG(JointTestActionGroup)是1985年指定的检测PCB和IC7芯片的一个标准。仿真器一般提供DSP的JATG时钟信号,只参与数据的传输,即将目标代码通过JATG接口从PC机下载到目标系统的存储器中。仿真器JTAG的仿真头如下图2.8及JTAG仿真信号表2.1所示:仿真器JTAG的仿真头JTAG仿真信号系统总原理图JTAG信号信号说明仿真器输入/输出状态DSP输入/输出状态EMU0仿真引脚0输入输入/输出EMU1仿真引脚1输入输入/输出PD(Vcc)目标板存在检测信号。该引脚用于指示仿真器是否与目标板接上,以及目标板是否已经上电。DSP的PD引脚必须与目标板的电源Vcc相连。输入输出TCK测试时钟。由仿真器提供的10.368MHz的时钟信号。输出输入TCK_RET测试时钟返回。对仿真器而言,是输入信号输入输出TDI测试数据输入(针对DSP)输出输入TDO测试数据输出(针对DSP)输入输出TMS测试方式选择输出输入-TRST测试复位输出输入8图2.9总体硬件电路图9软件设计程序流程图开始显示初始化启动定时器i++判断是否i=5秒加1判断秒是否到60分加1判断分是否到60时加1判断时是否到24时清0按键判断分加1时加1启、停、复位结束显示TmThT1,T2,T3结束NY,i=0NY,分清0NY,秒清0NY图3.1电子时钟程序流程图程序清单程序编写如下:#includeF2407REGS_c.hunsignedintsec,min,hour,i;unsignedchartable[]={0xFF3F,0xFF06,0xFF5B,0xFF4F,0xFF66,0xFF6D,0xFF7D,0xFF07,0xFF7F,0xFF6F};//程序初始化10unsignedchartablewe[]={0xFF00,0xFF01,0xFF02,0xFF03,0xFF04,0xFF05,0xFF06};voiddelay(unsignedintj);voidmain()//主程序{DSP2407_Initialing();Ioport_Initialing();asm(CLRCINTM);EVAIMRA=EVAIMRA|0x0080;//仅允许定时器1的周期中断EVAIMRA=EVAIMRA&0x0080;//清除定时器1的周期中断T1CON=0x170C;//timer1为连续增计数模式,预分频值为128,使用内部时钟T1PER=0xF424;//timer1的周期寄存器值设为200msT1CNT=0x00;//timer1的计数器清0sec=0;min=0;hour=0;i=0;While(1){PCDATDIR=0x00FF;if(i==5)//i等于5为1秒{i=0;sec++;//秒加1PBDATDIR=tablewe[0];//选通秒的个位PFDATDIR=0xFF01;//选通74HC273PADATDIR=tabale[sec%10];//秒个位显示PFDATDIE=0xFF00;//关断74HC273PBDATDIR=table[1];//选通秒的十位PFDATDIR=0xFF01;//选通74HC273PADATDIR=table[sec/10];//秒十位显示PFDATDIR=0xFF00;//关断74HC273}if(sec==60)11{sec=0;min++;//分钟的显示PBDATDIR=table[2];PFDATDIR=0xFF01;PADATRDIR=table[min%10];PFADATDIR=0xFF00;PBDATDIR=tablewe[3];PFDATDIR=0xff01;PADATDIR=table[min/10];PFDATAIR=0xFF00;}if(min==60){min=0;hour++;//小时的显示PBDATDIR=tablewe[4];PFDATDIR=0xFF01;PADATDIR=table[hour%10];PFDATDIR=0xFF00;PBDATDIR=tablewe[5];PFDATDIR=0xFF01;PADATDIR=table[hour/10];PFDATDIR=0xFF00;}if(hour==24)hour=0;if(PCDATDIR=0x00FE)//按键T1,时、分、秒复位为0{12delay(100);//调用延时程序PCDATDIR=0x00FE;min=0;sec=0;hour=0;}if(PCDATDIR=0x00FD)//按键T2,时钟停止计时{delay(100);PCDATDIR=0x00FD;PFDATDIR=0xFF00;}if(PCDATDIR=0x00FB)//按键T3,时钟开始计时{delay(100);PCDATDIR=0x00FB;PFDATDIR=0xFF01;}i