DSP嵌入式时钟课题设计汤锐羽.docx
《DSP嵌入式时钟课题设计汤锐羽.docx》由会员分享,可在线阅读,更多相关《DSP嵌入式时钟课题设计汤锐羽.docx(16页珍藏版)》请在冰豆网上搜索。
DSP嵌入式时钟课题设计汤锐羽
贵州大学明德学院
《DSP嵌入式通信系统》
课程设计报告
题目:
基于DSP系统计时器系统的嵌入式设计
学院:
贵州大学明德学院
专业:
通信工程
班级:
通信08152
学号:
072003110472
姓名:
李翔
指导老师:
宁阳
2012年1月2日
课程设计任务书
分院(系)
贵州大学明德学院
专业
通信工程
学生姓名
李翔
学号
072003110472
设计题目
基于DSP系统计时器系统的嵌入式设计
内容及要求:
1.使用DSP芯片设计计时器
2.使用数码管显示时间
3.使用键盘修改时间
进度安排:
2011年12月28日选题、查阅资料及编写软件程序(或硬件原理图设计)。
2011年12月29日课外上机调试程序及仿真。
2011年12月31日调试出结果、调试结果验收并写报告。
2011年01月01-02日修改报告及提交报告电子版(修改之后)。
2012年01月04日正式提交报告(打印版)及参加第一次答辩。
目录
摘要1
1基于DSP系统计时器系统的嵌入式设计相关知识2
1.1TMS320C55x开发环境2
1.2计时器2
1.3中断3
2.基于DSP系统计时器系统的嵌入式设计原理4
2.1计时器计时程序4
2.2计时器输出程序4
2.3按键输入程序4
2.4程序流程图5
3.基于DSP系统计时器系统的嵌入式设计编程及注释6
3.1计时器计时程序6
3.2计时器输出程序10
3.3按键输入程序11
3.4SDRAM初始化程序13
3.5命令文件15
4.CCS、ADS、MATLAB系统仿真、波形分析附图..............................................................................16
5.总结19
致谢20
参考文献21
摘要
DSP芯片既具有高速数字信号处理功能又具有实时性强、功耗低、集成度高等嵌入式微计算机的特点,所以随着科技的发展,DSP技术在机电控制领域的应用愈加广泛。
LED数码管显示清晰美观、功耗低,现在已成为电子产品中应用最广泛的显示方式。
本次课程设计就是通过对DSP芯片和数码管的分析研究,利用DSPC55x构建一个时间显示系统,采用数码管显示时间,用按键调整时间。
该时钟系统包括计时、时钟输出、按键输入三个设计部分。
并给出了各部分汇编程序。
关键字:
DSP芯片;数码管;按键;汇编程序
1.基于DSP系统计时器系统的嵌入式设计相关知识
1.1TMS320C55x开发环境
C55x编程可以采用汇编语言,也可以采用C/C++语言,本次编程主要采用汇编语言完成,所以执行效率高。
C55x的软件开发环境是CCSv3.1(CodeComposerStudio),是IT公司推出的用于开发DSP芯片的集成环境,它集编辑、编译、链接、软件仿真、硬件调试、以及实时跟踪功能于一体。
1.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)
1.3中断
中断是由硬件或软件驱动的信号,使DSP将当前的程序挂起,执行另外一个称为中断服务子程序(ISR)的任务。
C5x支持32个ISR。
中断可以分成可屏蔽中断和不可屏蔽中断两类。
可屏蔽中断可以通过软件来加以屏蔽,不可屏蔽中断则不能被屏蔽。
所有的软件中断都是不可屏蔽中断。
DSP处理中断的步骤如下:
(1)接收中断请求。
软件和硬件都要求DSP将当前程序挂起。
(2)相应中断。
CPU必须响应中断。
如果是可屏蔽中断,响应必须满足某些条件;如果是不可屏蔽中断,则CPU立即响应。
(3)准备进去中断服务子程序。
CPU要执行的主要任务有:
完成当前指令的执行,并冲掉流水线上还未解码的指令。
自动将某些必要的寄存器的值保存到数据堆栈和系统堆栈。
从用户事先设置好的向量地址获取中断向量,该中断向量指向中断服务子程序。
(4)执行中断服务子程序。
CPU执行用户编写的ISR。
ISR以一条中断返回指令结束,自动回复步骤(3)中自动保存的寄存器值。
注意:
外部中断只能发生在CPU退出复位后的至少3个周期后,否则无效。
在硬件复位后,不论INTM位的设置和寄存器IER0、IER1的值如何,所有的中断都被禁止,直到通过软件初始化堆栈后才开放中断。
2.基于DSP系统计时器系统的嵌入式设计原理
数字时钟除基本的计时功能外还要可以通过按键设定时间,所以除了主循环程序和输出程序外还要有按键判断程序,来设定时间。
程序设计为三大部分:
时钟计时程序是程序、时钟输出程序、按键输入程序,除此外还有SDRAM初始化程序和命令文件。
2.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。
2.2计时器输出程序
时钟输出程序,是将时钟的秒、分、时,输出到外设数码管上。
设:
时钟秒的个位十位、分的个位十位、时的个位十位对应的数码管地址分别为是0100h、0101h、0102h、0103h、0104h、0105h。
想将时钟计时程序中的秒、分、时的个位十位提取出,只需除以数字10,商为十位,余数是个位,分别输出至数码管即可。
2.3按键输入程序
按键输入程序的功能是,通过外部按键设置时钟的分、时。
设按键S1、S2、S3、地址分别为:
0200、0201、0202。
定为当S1按下时进去时钟输入程序,让CPU随时读取按键S1的地址,判断是否置一(设按键按下为高电平),置一则进入时钟输入程序,程序开头设定一个延时子程序,防止电子颤抖,进入时钟输入程序后,再读取S2、S3的地址是否置一,分别让AR3、AR2加1(加1后判断是否溢出),当S1、S2、S3都为0时退出时钟输入程序回到时钟计时程序。
2.4程序流程图
图3.1程序流程图
3.基于DSP系统计时器系统的嵌入式设计编程及注释
3.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
3.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
3.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
3.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
3.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
}
4.CCS、ADS、MATLAB系统仿真、波形分析附图
5.总结
通过调试以上程序运行无误,完成了时钟设计要求,使用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