[毕业设计精品]基于DSP系统计时器系统的嵌入式设计A_第1页
[毕业设计精品]基于DSP系统计时器系统的嵌入式设计A_第2页
[毕业设计精品]基于DSP系统计时器系统的嵌入式设计A_第3页
[毕业设计精品]基于DSP系统计时器系统的嵌入式设计A_第4页
[毕业设计精品]基于DSP系统计时器系统的嵌入式设计A_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 dspdsp 嵌入式通信系统嵌入式通信系统 课程设计报告课程设计报告 题目:题目:基于基于 dspdsp 系统计时器系统的嵌入式设计系统计时器系统的嵌入式设计 学院:学院: 专业:专业: 通信工程通信工程 班级:班级: 通信通信 0815208152 学号:学号: 姓名:姓名: 指导老师:指导老师: 20122012 年年 1 1 月月 2 2 日日 课课 程程 设设 计计 任任 务务 书书 分院(系) 专业通信工程 学生姓名学号 设计题目 基于 dsp 系统计时器系统的嵌入式设计 内容及要求:内容及要求: 1. 使用 dsp 芯片设计计时器 2. 使用数码管显示时间 3. 使用键盘修改时间

2、 进度安排:进度安排: 2011 年 12 月 28 日 选题、查阅资料及编写软件程序(或硬件原理图设计) 。 2011 年 12 月 29 日 课外上机调试程序及仿真。 2011 年 12 月 31 日 调试出结果、调试结果验收并写报告。 2011 年 01 月 01-02 日 修改报告及提交报告电子版(修改之后) 。 2012 年 01 月 04 日 正式提交报告(打印版)及参加第一次答辩。 目目 录录 摘 要 .1 1 基于 dsp 系统计时器系统的嵌入式设计相关知识 .2 1.1 tms320c55x开发环境.2 1.2 计时器.2 1.3 中断.3 2.基于 dsp 系统计时器系统的

3、嵌入式设计原理.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.4 sdram 初始化程序.13 3.5 命令文件.15 4. ccs、ads、matlab 系统仿真、波形分析附图. .16 5.总 结.19 致 谢 .20 参考文献 .21 0 摘摘 要要 dsp 芯片既具有高速数字信号处理功能又具有实时性强、功耗低、集成度高等嵌入式微计算机 的特点,所以随着科技的发展,dsp 技术

4、在机电控制领域的应用愈加广泛。led 数码管显示清晰美 观、功耗低,现在已成为电子产品中应用最广泛的显示方式。本次课程设计就是通过对 dsp 芯片和 数码管的分析研究,利用 dspc55x 构建一个时间显示系统,采用数码管显示时间,用按键调整时间。 该时钟系统包括计时、时钟输出、按键输入三个设计部分。并给出了各部分汇编程序。 关键字关键字:dsp 芯片;数码管;按键;汇编程序 1 1.1. 基于基于 dspdsp 系统计时器系统的嵌入式设计相关知识系统计时器系统的嵌入式设计相关知识 1.1.1 1 tms320c55xtms320c55x 开发开发环境环境 c55x 编程可以采用汇编语言,也可

5、以采用 c/c+语言,本次编程主要采用汇编语言完成,所以 执行效率高。 c55x 的软件开发环境是 ccs v3.1(code composer studio) ,是 it 公司推出的用于开发 dsp 芯片的集成环境,它集编辑、编译、链接、软件仿真、硬件调试、以及实时跟踪功能于一体。 1.21.2 计时器计时器 tms320vc5509 dsp 有两个独立的 20 bit 软件可编程通用减数计数定时器,它们可用于向 cpu 提供周期性的中断信号,或者给 dma 控制器发送中期同步事件,也可以用于给外部设备提供周期信 号,还可以用于外部事件计数。 定时器的工作始终可以来自 dsp 内部的 cpu

6、 时钟,也可以来自引脚 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) ,

7、定时器控制寄存器 tcr 的其他位设置 成对应数值。 (2)装载欲分频计数周期寄存器 prsc。 (3)装载主周期寄存器 prd。 (4)关闭定时器装载(tlb=0) ,启动定时器(tss=0) 。 dsp 复位 (1)停止定时(tss=1) (2)预定标计数器值为 0 (3)住计数器值为 ffffh (4)定时器不进行自动重装(arb=0) 2 (5)idle 指示不能使定时器进入省电模式 (6)仿真时遇到软件断点定时器立即停止工作 (7)tin/tout 为高电阻,时钟源是内部时钟(func=00b) 1.31.3 中断中断 中断是由硬件或软件驱动的信号,使 dsp 将当前的程序挂起,执行

8、另外一个称为中断服务子程 序(isr)的任务。c5x 支持 32 个 isr。 中断可以分成可屏蔽中断和不可屏蔽中断两类。可屏蔽中断可以通过软件来加以屏蔽,不可屏 蔽中断则不能被屏蔽。所有的软件中断都是不可屏蔽中断。 dsp 处理中断的步骤如下: (1)接收中断请求。软件和硬件都要求 dsp 将当前程序挂起。 (2)相应中断。cpu 必须响应中断。如果是可屏蔽中断,响应必须满足某些条件;如果是不可 屏蔽中断,则 cpu 立即响应。 (3)准备进去中断服务子程序。cpu 要执行的主要任务有: 完成当前指令的执行,并冲掉流水线上还未解码的指令。 自动将某些必要的寄存器的值保存到数据堆栈和系统堆栈。

9、 从用户事先设置好的向量地址获取中断向量,该中断向量指向中断服务子程序。 (4)执行中断服务子程序。cpu 执行用户编写的 isr。isr 以一条中断返回指令结束,自动回 复步骤(3)中自动保存的寄存器值。 注意: 外部中断只能发生在 cpu 退出复位后的至少 3 个周期后,否则无效。 在硬件复位后,不论 intm 位的设置和寄存器 ier0、ier1 的值如何,所有的中断都被禁止,直 到通过软件初始化堆栈后才开放中断。 3 2.2. 基于基于 dspdsp 系统计时器系统的嵌入式设计原理系统计时器系统的嵌入式设计原理 数字时钟除基本的计时功能外还要可以通过按键设定时间,所以除了主循环程序和输

10、出程序外 还要有按键判断程序,来设定时间。程序设计为三大部分:时钟计时程序是程序、时钟输出程序、 按键输入程序,除此外还有 sdram 初始化程序和命令文件。 2.12.1 计时器计时器计时程序计时程序 时钟计时程序是主程序,由 cup 提供输入时钟信号,再由 dsp 的片上外设通用定时器完成计时 功能,其中可以通过中断次数来计数。设定寄存器 ar1、ar2、ar3 分别保存时钟的秒、分、时。设 cpu 时钟为 144mhz,当 psc=15;tim=59999 可以计算出中断频率是 1/150hz,所以用 ar0 做计数器, 每 150 次中断时钟的秒(ar1)自动加 1,并判断是否等于 6

11、0,等于 60 则时钟的分(ar2)自动加 1,时钟的秒(ar1)清零;不等于 60 跳转到等待中断程序,再次计数 150 次中断。其中时钟的分 (ar2)加 1 时也要判断是否满 60,而时钟的时加 1 时要判断是否满 12。 2.22.2 计时器计时器输出程序输出程序 时钟输出程序,是将时钟的秒、分、时,输出到外设数码管上。设:时钟秒的个位十位、分的 个位十位、时的个位十位对应的数码管地址分别为是 0100h、0101h、0102h、0103h、0104h、0105h。想将时钟计时程序中的秒、分、时的个位十位提取 出,只需除以数字 10,商为十位,余数是个位,分别输出至数码管即可。 2.3

12、2.3 按键输入程序按键输入程序 按键输入程序的功能是,通过外部按键设置时钟的分、时。设按键 s1、s2、s3、地址分别为: 0200、0201、0202。定为当 s1 按下时进去时钟输入程序,让 cpu 随时读取按键 s1 的地址,判断是 否置一(设按键按下为高电平) ,置一则进入时钟输入程序,程序开头设定一个延时子程序,防止 电子颤抖,进入时钟输入程序后,再读取 s2、s3 的地址是否置一,分别让 ar3、ar2 加 1(加 1 后 判断是否溢出),当 s1、s2、s3 都为 0 时退出时钟输入程序回到时钟计时程序。 4 2.42.4 程序流程图程序流程图 图 3.1 程序流程图 5 3.

13、3. 基于基于 dspdsp 系统计时器系统的嵌入式设计编程及注释系统计时器系统的嵌入式设计编程及注释 3.13.1 计时器计时器计时程序计时程序 .title shizhong.asm .mmregs .def _c_int00 ;程序入口 .def _timer0 ;timer0 中断服务程序入口 .ref shuchu ;引用外部变量,时钟输出程序入口 .ref key ;引用外部变量,按键输入程序入口 .ref sdram_init ;引用外部变量 sdram 初始化程序入口 led .set 400001h tim0 .set 0 x1000 prd0 .set 0 x1001 tc

14、r0 .set 0 x1002 prsc0 .set 0 x1003 sysr .set 0 x07fd clkmd .set 0 x1c00 ;时钟模块寄存器地址 pdp_timer0 .set tim0/128 stack .usect .stack,200h ;分配堆栈空间 sysstack .usect .sysstack,200h .data led_i .word 1,2,4,8,4,2 .sect .vectors rsv: b _c_int00 nop .align 8 nmi: .loop 8 nop .endloop 6 int0: .loop 8 nop .endloop

15、 int2: .loop 8 nop .endloop tint0: b _timer0 nop .align 8 ;= ;主程序 ;= .text _c_int00: amov #0h,xar1 ;初始化时钟的秒 amov #0h,xar2 ;初始化时钟的分 amov #0h,xar3 ;初始化时钟的时 amov #0,xdp amov #stack+200h,xsp amov #sysstack+200h,xssp interupt: ;初始化中断 bset intm mov #1,ivpd mov #1,ivph mov #10h,ier0 mov #10h,dbier0 mov #0,

16、ier1 mov #0ffffh,ifr0 mov #0ffffh,ifr1 call sdram_init ;调用 sdram 初始化程序 7 call shuchu ;调用时钟输出子程序 ;= ;初始化定时器并启动计时器 ;= mov #pdp_timer0,pdp mov #149,ar0 mov #0438h,port(#tcr0) mov #15,port(#prsc0) mov #59999,port(#prd0) and #0fbefh,port(#tcr0) ;停止从周期寄存器装入并启动定时器 bclr intm ;使能全局中断 bset ar5lc amov #led,xar

17、4 mov #6,bk03 amov #led_i,xar5 mov #led_i,bsa23 mov #0,ar5 loop: nop b loop ;等待中断 ;= ;中断服务程序 ;= _timer0: mov *ar5,*ar4 bcc next1,ar0!=#0h ;判断是否中断 150 次 mov #149,ar0 ;重新装载计数器重新计数 amar *ar1+ ;时钟秒自动加 1 call shuchu bcc fen,ar1 =#3ch ;判断 ar1 是否满 60 b next2 8 fen: mov #0,ar1 amar *ar2+ call shuchu bcc shi

18、,ar2 =#3ch b next2 shi: mov #0,ar2 amar *ar3+ call shuchu bcc loop1,ar3 =#0ch b next2 loop1: mov #0,ar3 b next2 next1: amar *ar0- next2: mov port(#0200),ar6 ;读取 s1 按键装载到 ar4 bcc loop2,ar6!=#1h call key ;当按键 s1 按下时调用按键子程序 loop2: reti ;中断返回 .end 9 3.23.2 计时器计时器输出程序输出程序 .def shuchu .data .text shuchu:

19、bclr sxmd ;清零 sxmd(关闭符号扩展) mov #10,ar6 ;设置除数为 10 mov ar1,ac0 ;把被除数(秒)放入 ac0 rpt #15 ;执行 subc16 次 subc ar6,ac0,ac0 ;条件减法 mov ac0,port(#0101h) ;将商输出到秒的十位 mov hi(ac0),port(#0100h) ;将余数输出到秒的个位 mov ar2,ac0 ;把被除数(分)放入 ac0 rpt #0fh ;执行 subc16 次 subc ar6,ac0,ac0 mov ac0,port(#0103h) ;将商输出到分的十位 mov hi(ac0),p

20、ort(#0102h) ;将余数输出到分的个位 mov ar3,ac0 ;把被除数(时)放入 ac0 rpt #0fh ;执行 subc16 次 subc ar6,ac0,ac0 mov ac0,port(#0105h) ;将商输出到时的十位 mov hi(ac0),port(#0104h) ;将余数输出到时的个位 ret .end 10 3.33.3 按键输入程序按键输入程序 .def key .ref shuchu .text key: ;= ;延时 ;= mov #500,ar5 l1: amar *ar5- mov #10,ar4 l2: amar *ar4- bcc l2,ar4!=

21、#0h bcc l1,ar5!=#0h mov port(#0200h),ar6 bcc l, ar6=#0h ;按键 s1 电平消失跳转到 l 退出程序 mov port(#0201h),ar6 bcc shi,ar6!=#0h ;按键 s2 按下(高电平)跳转 mov port(#0202h),ar6 bcc fen,ar6!=#0h ;按键 s3 按下(高电平)跳转 shi: amar *ar3+ bcc yichu1,ar3 =#0ch ;判断是否溢出 call shuchu ;调用时钟输出子程序 b key yichu1: mov #0,ar3 call shuchu ;调用时钟输出

22、子程序 b key fen: amar *ar2+ bcc yichu2,ar2 =#3ch 11 call shuchu ;调用时钟输出子程序 b key yichu2: mov #0,ar3 call shuchu ;调用时钟输出子程序 b key l: ret .end 12 3.43.4 sdramsdram 初始化程序初始化程序 .def sdram_init ebsr .set 0 x6c00 egcr .set 0 x800 emirst .set 0 x801 emibe .set 0 x802 ce01 .set 0 x803 ce02 .set 0 x804 ce03 .s

23、et 0 x805 ce11 .set 0 x806 ce12 .set 0 x807 ce13 .set 0 x808 ce21 .set 0 x809 ce22 .set 0 x80a ce23 .set 0 x80b ce31 .set 0 x80c ce32 .set 0 x80d ce33 .set 0 x80e sdc1 .set 0 x80e sdper .set 0 x810 sdcnt .set 0 x811 init .set 0 x812 sdc2 .set 0 x813 sdram_pdp .set egcr/128 .text sdram_init: mov #0 x

24、a01,port(#ebsr) mov #sdram_pdp,pdp mov #0 x220,port(#egcr) 13 mov #0 x3000,port(#ce01) mov #0 x1fff,port(#ce11) mov #0 x1fff,port(#ce21) mov #0 x1fff,port(#ce31) mov #0 x0,port(#emirst) mov #0 x5958,port(#sdc1) mov #0 x38f,port(#sdc2) mov #0 x0,port(init) ret .end 14 3.53.5 命令文件命令文件 -stack 200h -sys

25、stack 200h memory page 0: 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 daram

26、3 : 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 : vecs page 0 .bss: daram0 page 0 .stack: daram1 page 0 .sysstack: daram1 page 0 .text : daram4 page 0 .data: daram5 page 0 15 4.4. ccsccs、adsads、matlabmatlab 系统仿真、波形分析附图系统仿真、波形分析附图 16 5.5.总总 结结 通过调试以上程序运行无误,完成了时钟设计要求,使用 dsp 芯片设计时钟;使用数码管显示 时间;使用键盘修改时间。 通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论