DSP嵌入式时钟课题设计汤锐羽.docx

上传人:b****5 文档编号:6898305 上传时间:2023-01-12 格式:DOCX 页数:16 大小:76.65KB
下载 相关 举报
DSP嵌入式时钟课题设计汤锐羽.docx_第1页
第1页 / 共16页
DSP嵌入式时钟课题设计汤锐羽.docx_第2页
第2页 / 共16页
DSP嵌入式时钟课题设计汤锐羽.docx_第3页
第3页 / 共16页
DSP嵌入式时钟课题设计汤锐羽.docx_第4页
第4页 / 共16页
DSP嵌入式时钟课题设计汤锐羽.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

DSP嵌入式时钟课题设计汤锐羽.docx

《DSP嵌入式时钟课题设计汤锐羽.docx》由会员分享,可在线阅读,更多相关《DSP嵌入式时钟课题设计汤锐羽.docx(16页珍藏版)》请在冰豆网上搜索。

DSP嵌入式时钟课题设计汤锐羽.docx

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

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1