完整word版DSP时钟设计.docx
《完整word版DSP时钟设计.docx》由会员分享,可在线阅读,更多相关《完整word版DSP时钟设计.docx(18页珍藏版)》请在冰豆网上搜索。
完整word版DSP时钟设计
课程设计任务书
分院(系)
信息科学与工程学院
专业
电子信息工程
学生姓名
杨杰
学号
0703030213
设计题目
时钟设计
内容及要求:
1.使用DSP芯片设计时钟
2.使用数码管显示时间
3.使用键盘修改时间
进度安排:
20010年12月28日
-2011年01月03日选题、查阅资料及编写软件程序(或硬件原理图设计)。
2011年01月04-08日课内上机调试程序及仿真。
2011年01月09-10日课外上机调试程序及仿真。
2011年01月11-13日调试出结果、调试结果验收并写报告。
2011年01月14日修改报告及提交报告电子版(修改之后)。
2011年01月15日正式提交报告(打印版)及参加第一次答辩。
指导教师(签字):
年月日
分院院长(签字):
年月日
摘要
DSP芯片既具有高速数字信号处理功能又具有实时性强、功耗低、集成度高等嵌入式微计算机的特点,所以随着科技的发展,DSP技术在机电控制领域的应用愈加广泛。
LED数码管显示清晰美观、功耗低,现在已成为电子产品中应用最广泛的显示方式。
本次课程设计就是通过对DSP芯片和数码管的分析研究,利用DSPC55x构建一个时间显示系统,采用数码管显示时间,用按键调整时间。
该时钟系统包括计时、时钟输出、按键输入三个设计部分。
并给出了各部分汇编程序。
关键字:
DSP芯片;数码管;按键;汇编程序
1绪论
近年来数字化已成为现代信息技术的重要标志,数字相机、数字电视、是自收音机、数字电话、数字学习机、数字游戏机已经逐渐进入人们日常生活和工作中。
在我国数字电话已拥有数亿用户,MP3成为上亿青年学生的宠儿,数字电视已开始进入千家万户,这些产品均采用DSP对信号进行处理。
随着DSP技术的迅速发展,其不仅使信号处理能力更加完善,而且使系统开发更加方便、程序编辑调试更加灵活,功耗也进一步降低,成本不断下降。
尤其是将各种通用外设集成到芯片上,从而大大提高了数字信号处理能力。
DSP芯片不仅在通信、计算机领域得到广发应用,而且也逐渐渗透到人们的日常消费领域中。
这就迫切要求理工科大学生熟悉和掌握DSP芯片功能及其在实际中的应用方法,除通过实验教学培养DSP的基本实验方法、分析问题和故障检查方法以及双踪示波器等常用仪器使用方法等基本电路的基本实验技能外,还必须培养大学生工程设计和组织实验能力。
本次课程设计的目的在于培养学生对基本DSP芯片功能的应用和掌握,使学生在试验原理的指导下,初步具备基本程序的分析和设计能力,并掌握其应用方法:
自行拟定实验步骤检查和排除故障、分析和处理实验结果及撰写报告的能力。
综合实验的实际目的是培养学生初步掌握小型DSP系统的设计能力,提高实验技能的实践。
数字电子钟是一种计时装置,它具有时、分、秒计时功能和显示时间功能;能够通过按键调整时间。
本次设计我查阅了大量的文献资料,学习到了很过关于DSP定时器和中断的知识,并且更加巩固和掌握了课堂上所学的课本知识,是自己对DSP技术有了更进一步的认识和了解。
2相关知识
2.1TMS320C55x开发环境
C55x编程可以采用汇编语言,也可以采用C/C++语言,本次编程主要采用汇编语言完成,所以执行效率高。
C55x的软件开发环境是CCSv3.1(CodeComposerStudio),是IT公司推出的用于开发DSP芯片的集成环境,它集编辑、编译、链接、软件仿真、硬件调试、以及实时跟踪功能于一体。
2.2定时器
TMS320VC5509DSP有两个独立的20bit软件可编程通用减数计数定时器,它们可用于向CPU提供周期性的中断信号,或者给DMA控制器发送中期同步事件,也可以用于给外部设备提供周期信号,还可以用于外部事件计数。
定时器的工作始终可以来自DSP内部的CPU时钟,也可以来自引脚TIN/TOUT。
利用定时器控制寄存器(TCR)中的字段FUNC可以确定输入时钟源和TIN/TOUT引脚功能。
在定时器中,预定标记计数寄存器(PSC)由输入时钟驱动,PSC在每个输入时钟周期减1。
当其减到0时,TIM减1,当TIM减到0时,定时器向CPU发出一个中断请求(TINT)或者向DMA控制器发送同步事件。
定时器发送中断信号或同步事件信号的频率可用下公式计算,即
TINT频率=输入时钟频率/【(TDDT+1)*(PRD+1)】
定时器初始化步骤如下:
(1)停止定时器(TSS=1),定时器装载时能(TLB=1),定时器控制寄存器TCR的其他位设置成对应数值。
(2)装载欲分频计数周期寄存器PRSC。
(3)装载主周期寄存器PRD。
(4)关闭定时器装载(TLB=0),启动定时器(TSS=0)。
DSP复位
(1)停止定时(TSS=1)
(2)预定标计数器值为0
(3)住计数器值为FFFFh
(4)定时器不进行自动重装(ARB=0)
(5)IDLE指示不能使定时器进入省电模式
(6)仿真时遇到软件断点定时器立即停止工作
(7)TIN/TOUT为高电阻,时钟源是内部时钟(FUNC=00b)
2.3中断
中断是由硬件或软件驱动的信号,使DSP将当前的程序挂起,执行另外一个称为中断服务子程序(ISR)的任务。
C5x支持32个ISR。
中断可以分成可屏蔽中断和不可屏蔽中断两类。
可屏蔽中断可以通过软件来加以屏蔽,不可屏蔽中断则不能被屏蔽。
所有的软件中断都是不可屏蔽中断。
DSP处理中断的步骤如下:
(1)接收中断请求。
软件和硬件都要求DSP将当前程序挂起。
(2)相应中断。
CPU必须响应中断。
如果是可屏蔽中断,响应必须满足某些条件;如果是不可屏蔽中断,则CPU立即响应。
(3)准备进去中断服务子程序。
CPU要执行的主要任务有:
完成当前指令的执行,并冲掉流水线上还未解码的指令。
自动将某些必要的寄存器的值保存到数据堆栈和系统堆栈。
从用户事先设置好的向量地址获取中断向量,该中断向量指向中断服务子程序。
(4)执行中断服务子程序。
CPU执行用户编写的ISR。
ISR以一条中断返回指令结束,自动回复步骤(3)中自动保存的寄存器值。
注意:
外部中断只能发生在CPU退出复位后的至少3个周期后,否则无效。
在硬件复位后,不论INTM位的设置和寄存器IER0、IER1的值如何,所有的中断都被禁止,直到通过软件初始化堆栈后才开放中断。
3设计原理
数字时钟除基本的计时功能外还要可以通过按键设定时间,所以除了主循环程序和输出程序外还要有按键判断程序,来设定时间。
程序设计为三大部分:
时钟计时程序是程序、时钟输出程序、按键输入程序,除此外还有SDRAM初始化程序和命令文件。
3.1时钟计时程序
时钟计时程序是主程序,由CUP提供输入时钟信号,再由DSP的片上外设通用定时器完成计时功能,其中可以通过中断次数来计数。
设定寄存器AR1、AR2、AR3分别保存时钟的秒、分、时。
设CPU时钟为144MHz,当PSC=15;TIM=59999可以计算出中断频率是1/150Hz,所以用AR0做计数器,每150次中断时钟的秒(AR1)自动加1,并判断是否等于60,等于60则时钟的分(AR2)自动加1,时钟的秒(AR1)清零;不等于60跳转到等待中断程序,再次计数150次中断。
其中时钟的分(AR2)加1时也要判断是否满60,而时钟的时加1时要判断是否满12。
3.2时钟输出程序
时钟输出程序,是将时钟的秒、分、时,输出到外设数码管上。
设:
时钟秒的个位十位、分的个位十位、时的个位十位对应的数码管地址分别为是0100h、0101h、0102h、0103h、0104h、0105h。
想将时钟计时程序中的秒、分、时的个位十位提取出,只需除以数字10,商为十位,余数是个位,分别输出至数码管即可。
3.3按键输入程序
按键输入程序的功能是,通过外部按键设置时钟的分、时。
设按键S1、S2、S3、地址分别为:
0200、0201、0202。
定为当S1按下时进去时钟输入程序,让CPU随时读取按键S1的地址,判断是否置一(设按键按下为高电平),置一则进入时钟输入程序,程序开头设定一个延时子程序,防止电子颤抖,进入时钟输入程序后,再读取S2、S3的地址是否置一,分别让AR3、AR2加1(加1后判断是否溢出),当S1、S2、S3都为0时退出时钟输入程序回到时钟计时程序。
3.4程序流程图
图3.1程序流程图
4设计编程及注释
4.1时钟计时程序
.title"shizhong.asm"
.mmregs
.def_c_int00;程序入口
.def_Timer0;Timer0中断服务程序入口
.refshuchu;引用外部变量,时钟输出程序入口
.refkey;引用外部变量,按键输入程序入口
.refsdram_init;引用外部变量SDRAM初始化程序入口
LED.set400001h
TIM0.set0x1000
PRD0.set0x1001
TCR0.set0x1002
PRSC0.set0x1003
SYSR.set0x07fd
CLKMD.set0x1c00;时钟模块寄存器地址
PDP_Timer0.setTIM0/128
STACK.usect".stack",200h;分配堆栈空间
SYSSTACK.usect".sysstack",200h
.data
LED_I.word1,2,4,8,4,2
.sect".vectors"
rsv:
b_c_int00
nop
.align8
nmi:
.loop8
nop
.endloop
int0:
.loop8
nop
.endloop
int2:
.loop8
nop
.endloop
tint0:
b_Timer0
nop
.align8
;=================================
;主程序
;=================================
.text
_c_int00:
amov#0h,XAR1;初始化时钟的秒
amov#0h,XAR2;初始化时钟的分
amov#0h,XAR3;初始化时钟的时
amov#0,XDP
amov#STACK+200h,XSP
amov#SYSSTACK+200h,XSSP
Interupt:
;初始化中断
bsetintm
mov#1,@IVPD
mov#1,@IVPH
mov#10h,@IER0
mov#10h,@DBIER0
mov#0,@IER1
mov#0ffffh,@IFR0
mov#0ffffh,@IFR1
callsdram_init;调用SDRAM初始化程序
callshuchu;调用时钟输出子程序
;=================================
;初始化定时器并启动计时器
;=================================
mov#PDP_Timer0,PDP
mov#149,AR0
mov#0438h,port(#TCR0)
mov#15,port(#PRSC0)
mov#59999,port(#PRD0)
and#0fbefh,port(#TCR0);停止从周期寄存器装入并启动定时器
bclrINTM;使能全局中断
bsetAR5LC
amov#LED,XAR4
mov#6,BK03
amov#LED_I,XAR5
mov#LED_I,BSA23
mov#0,AR5
loop:
NOP
bloop;等待中断
;=================================
;中断服务程序
;=================================
_Timer0:
mov*AR5,*AR4
bccNext1,AR0!
=#0h;判断是否中断150次
mov#149,AR0;重新装载计数器重新计数
amar*AR1+;时钟秒自动加1
callshuchu
bccFen,AR1==#3ch;判断AR1是否满60
bNext2
Fen:
mov#0,AR1
amar*AR2+
callshuchu
bccShi,AR2==#3ch
bNext2
Shi:
mov#0,AR2
amar*AR3+
callshuchu
bccLoop1,AR3==#0ch
bNext2
Loop1:
mov#0,AR3
bNext2
Next1:
amar*AR0-
Next2:
movport(#0200),AR6;读取S1按键装载到AR4
bccloop2,AR6!
=#1h
callkey;当按键S1按下时调用按键子程序
loop2:
reti;中断返回
.end
4.2时钟输出程序
.defshuchu
.data
.text
Shuchu:
bclrSXMD;清零SXMD(关闭符号扩展)
mov#10,AR6;设置除数为10
movAR1,AC0;把被除数(秒)放入AC0
rpt#15;执行subc16次
subcAR6,AC0,AC0;条件减法
movAC0,port(#0101h);将商输出到秒的十位
movHI(AC0),port(#0100h);将余数输出到秒的个位
movAR2,AC0;把被除数(分)放入AC0
rpt#0fh;执行subc16次
subcAR6,AC0,AC0
movAC0,port(#0103h);将商输出到分的十位
movHI(AC0),port(#0102h);将余数输出到分的个位
movAR3,AC0;把被除数(时)放入AC0
rpt#0fh;执行subc16次
subcAR6,AC0,AC0
movAC0,port(#0105h);将商输出到时的十位
movHI(AC0),port(#0104h);将余数输出到时的个位
ret
.end
4.3按键输入程序
.defkey
.refshuchu
.text
key:
;=============================
;延时
;=============================
mov#500,AR5
L1:
amar*ar5-
mov#10,AR4
L2:
amar*ar4-
bccL2,AR4!
=#0h
bccL1,AR5!
=#0h
movport(#0200h),AR6
bccL,AR6==#0h;按键S1电平消失跳转到L退出程序
movport(#0201h),AR6
bccshi,AR6!
=#0h;按键S2按下(高电平)跳转
movport(#0202h),AR6
bccfen,AR6!
=#0h;按键S3按下(高电平)跳转
shi:
amar*AR3+
bccyichu1,AR3==#0ch;判断是否溢出
callshuchu;调用时钟输出子程序
bkey
yichu1:
mov#0,AR3
callshuchu;调用时钟输出子程序
bkey
fen:
amar*AR2+
bccyichu2,AR2==#3ch
callshuchu;调用时钟输出子程序
bkey
yichu2:
mov#0,AR3
callshuchu;调用时钟输出子程序
bkey
L:
ret
.end
4.4SDRAM初始化程序
.defsdram_init
ebsr.set0x6c00
egcr.set0x800
emirst.set0x801
emibe.set0x802
ce01.set0x803
ce02.set0x804
ce03.set0x805
ce11.set0x806
ce12.set0x807
ce13.set0x808
ce21.set0x809
ce22.set0x80a
ce23.set0x80b
ce31.set0x80c
ce32.set0x80d
ce33.set0x80e
sdc1.set0x80e
sdper.set0x810
sdcnt.set0x811
init.set0x812
sdc2.set0x813
sdram_pdp.setegcr/128
.text
sdram_init:
mov#0xa01,port(#ebsr)
mov#sdram_pdp,pdp
mov#0x220,port(#egcr)
mov#0x3000,port(#ce01)
mov#0x1fff,port(#ce11)
mov#0x1fff,port(#ce21)
mov#0x1fff,port(#ce31)
mov#0x0,port(#emirst)
mov#0x5958,port(#sdc1)
mov#0x38f,port(#sdc2)
mov#0x0,port(@init)
ret
.end
4.5命令文件
-stack200h
-sysstack200h
MEMORY
{PAGE0:
MMR:
origin=0000000h,length=00000c0h
SPRAM:
origin=00000c0h,length=0000040h
VECS:
origin=0000100h,length=0000100h
DARAM0:
origin=0000200h,length=0001E00h
DARAM1:
origin=0002000h,length=0002000h
DARAM2:
origin=0004000h,length=0002000h
DARAM3:
origin=0006000h,length=0002000h
DARAM4:
origin=0008000h,length=0002000h
DARAM5:
origin=000a000h,length=0002000h
DARAM6:
origin=000c000h,length=0002000h
DARAM7:
origin=000e000h,length=0002000h
}
SECTIONS
{
.vectors:
>VECSPAGE0
.bss:
>DARAM0PAGE0
.stack:
>DARAM1PAGE0
.sysstack:
>DARAM1PAGE0
.text:
>DARAM4PAGE0
.data:
>DARAM5PAGE0
}
总结
通过调试以上程序运行无误,完成了时钟设计要求,使用dsp芯片设计时钟;使用数码管显示时间;使用键盘修改时间。
通过本次课程设计实现了用DSP定时器做时钟,学习到了很多关于DSP定时器和中断的知识,并且更加深刻的巩固了课堂上所学的课本知识,DSP技术有了更进一步的认识和了解。
掌握了DSP的基本实验方法,提高了工程设计和组织实验能力。
具备了初步基本程序的分析和设计能力,并掌握其应用方法,自行拟定实验步骤检查和排除故障、分析和处理实验结果及撰写报告的能力。
提高实验技能的实践。
致谢
在学习中,老师严谨的治学态度、丰富渊博的知识、敏锐的学术思维、精益求精的工作态度以及侮人不倦的师者风范是我终生学习的楷模,老师们的高深精湛的造诣与严谨求实的治学精神,将永远激励着我。
另外,感谢校方给予我这样一次机会,能够独立地完成一个课程设计,并在这个过程当中,给予我们各种方便,使我们在这学期快要结课的时候,能够将学到的只是应用到实践中,增强了我们实践操作和动手应用能力,提高了独立思考的能力。
感谢所有任课老师和所有同学给我的指导和帮助,是他们教会了我专业知识,教会了我如何学习,教会了我如何做人。
正是由于他们,我才能在各方面取得显著的进步,在此向他们表示我由衷的谢意。
最后,我要向百忙之中抽时间对本文进行审阅,评议和参与本人论文答辩的各位老师表示感谢。
参考文献
[1]姜阳周锡青《DSP原理与应用试验》西安西安电子科技大学出版社2008
[2]赵洪亮卜凡亮黄河松张仁彦《TMS320C5xDSP原理系统设计》北京航空航天学出版社2008
[3]刘益成《TMS320C54XDSP应用程序设计与开发》北京北京航空航天大学出版社2008
[4]方华刚.《DSP原理与应用》.北京:
机械工业出版社,2001.8
[5]TMS320C55xDSPProgrammer’sGuideSPRU376A[Z].TexasInstuments,2001
[6]TMS320C55xDSPMnemonicInstructionsSetReferenceGuideSORU374G[Z].TexasInstruments,2002
课程设计(论文)评语及成绩评定
指导教师评语:
评分_______指导教师(签字)_______________________年____月____日
课程设计(论文)及答辩评分:
1.学生工作态度和平时表现(共20分)__________;
2.论文格式规范、语言流畅(共20分)__________;
3.数据完整、分析论述充分合理,结论正确(共20分)__________;
4.答辩表述能力(共20分)__________;
5.基本概念及回答问题情况(共20分)_________。
课程设计总成绩______答辩组成员(签字)_________________年___月__日