《谭毅通信系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《谭毅通信系统课程设计报告.doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、贵州大学明德学院DSP嵌入式通信系统课程设计报告 题目:基于DSP系统计时器系统的嵌入式设计 学院:明德学院 专业:通信工程 班级:08152 学号:3 姓名:谭毅 指导老师:宁阳 2011年 12 月 30 日 目 录1. 设计思路6 1.1.2 CCS开发平台.71.2 . 流程图.6 1.3. 运行图.81.4. 采用的芯片功能介绍.81.5. 原理图.8第二章 软件设计.9 2.1 设计思路92.2 程序的流程图112.3 具体程序.12. 2.3.1 计时器的算法及实现.13 2.3.2. FFT的算法实现.13第三章 系统设计应解决的关键问题14总结 设计心得体会18参考文献21
2、第一章 系统架构前沿嵌入式实时操作系统 C/OS- II简介c/osii是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32位单片机或dsp。从c/os算起,该内核已有10余年应用史,在诸多领域得到了广泛应用。u C/OS 是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。u C/OSII的前身是u C/OS,最早出自于1990年美国嵌入式系统专家JEAN,J.Labrosse在嵌入式系统编程杂志的5月和6月刊上登的文章连载,并把u C/OS的源码发布在该杂志的BBS上。u C/OS和u C/OSII是专门为计算机的嵌入式应用设计的,绝大部分代码是
3、用C语言编写的,CPU硬件相关部分是用汇编语言编写的,总量约束力00行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。用户只要有标准的ANSI的C交叉编译器,有汇编器,连接器等软件工具,就可以将u C/OSII嵌入到开发的产品中。u C/OSII具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。u C/OSII已经移植到了几乎所有知名的CPU上。严格地说u C/OSII只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务问的通信和同步基本功能。没有提供输入出管理,文件系统,网络等额外的服务,但由于u C/O
4、SII良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。u C/OSII目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。任务管理u C/OSII中最多可以支持64个任务,分别对应优先级063,其中0为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。u C/OSII提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。系统初始化时会自动产生两个任务,一个是空闲任务,它的优先级高低,改
5、任务公给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,改任务负责统计当前CPU的利用率。时间管理u C/OSII的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。u C/OSII要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数。例如中断的任务切换函数,系统时间函数。内存管理在ANSI C中是使用malloc和free两个函数来动态分配和释放内存。但在嵌入式实时系统中,多次这样的错作会导致内存碎片,且由于内存管理算法的原因,
6、malloc和free 的执行时间也是不确定。u C/OSII中把连续的大快内存按分区管理。每个分区中包含整数个大小相同的内存块同,但不同分区之间的内存块大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存,释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。任务间通信与同步对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。u C/OSII中提供了4种同步对象,分别是信号量,邮箱,消息队列和事件。所有这些同步对象都有创建,等待,发送,查询的接口用于实现进程间的通信和同步。任务调度u C/OSII采用的是可剥夺型实时多任务内核。
7、可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,u C/OSII规定所有任务的优先级不同,因为任务的优先级也同时叭一标志了该任务本身。任务调度将在以下情况下发生:高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先级任务获得了执行条件(如休眠的时钟到时),则在中断态直接切换到高优先级任务执行。这种调度也称为中断级的上下文
8、切换。这两种高度方式在u C/OSII的执行过程中非常普遍,一般来说前者发生在系统服务中,后者发生在时钟中断的服务程序中。调度工作的内容可以分为两部分:最高优先级任务的寻找和任务切换。其最高优先级任务的寻找是通过建立就绪任务表来实现的。u C/OS中的每一个任务都独立的堆栈空间,并有一个称为任务控制块TCB的数据结构,其中第一个成员变量就是保存的任务堆栈指针。任务调度模块首先用变量OSTCBHingRdy记录当前最高级就绪任务的TCB地址同,然后用OS TASK SW()函数来进行任务切换。u C/OSII的组成部分u C/OSII可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的
9、移植等5个部分。1、核心部分是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都这里。任务处理部分任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为u C/OSII是以任务为基本单位调度的,所以这部分内容也相当重要。时钟部分u C/OSII中的最小时钟单位是timetick。任务延时等操作是在这里完成的。任务同步和通信部分为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分:主要用于任务间的互相联系和对临界资源的访问。与CPU的接口部分是指u C/OSII针对所使用
10、的CPU的移植部分。由于u C/OSII是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容和要求作相应的移植。这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换的底层实现、任务及任务切换的义愤实现、时钟节拍的产生和处理、中断的相关处理部分等内容。 Dsp系统简介Dsp发展的很快。随着计算机、信息技术和大规模集成电路的飞速发展,数字信号处理技术已形成一门独立的学科系统,并且在理论和实现技术两个方面都获得了高速的发展。数字信号处理是采用数值计算的方法对信号进行处理的一门学科。它研究的是怎样对模拟信号进行采样,将其转换为数字序列,然后对
11、其进行变换、滤波、增强、压缩及识别等加工处理,从而提取有用信息并进行应用的理论和算法。而数字信号处理器则是一种用于数字信号处理的可编程处理器,它的诞生与快速发展,使各种数字信号处理算法得以实时实现,为数字信号处理的研究和应用打开了新局面,提供了低成本的实际工作环境和应用平台,推动了新的理论和应用领域的发展。目前,DSP技术在通信、航空、航天、雷达、工业控制、医疗、网络及家用电器等各个领域都得到了广泛应用。DSP诞生于20世纪70年代,1978年美国AMI公司发布的S28811被认为是世界上的第一片DSP芯片。然而,1980年由日本NEC公司推出的D7720才是第一片具有硬件乘法器的商用DSP器
12、件。进入80年代,随着计算机应用范围的扩大,迫切要求提高数字信号处理技术的速度,从而推动了DSP的进一步发展。1982年美国TI公司推出首枚低成本高性能的TMS32010系列DSP,它是一个16位的定点芯片,采用了哈佛结构和硬件乘法器,完成一次乘加操作需要396ns。该芯片的问世,使DSP技术得到了重大突破。1985年TI推出了TMS32020系列DSP,它的寻址空间达到64K字,有专门的地址寄存器,一次乘加运算需要200ns,在此期间,各公司也陆续推出了各种DSP芯片,如ADI的ADSP2100,Motorola的DSP56001和AT7T的DSP16A等。进入20世纪90年代以后,DSP得
13、到了惊人的发展,这体现在DSP的性能和指标不断提高,而其芯片尺寸和功能耗却在不断减小,价格也在逐年降低,自1997年至今,DSP的展进入了完善阶段。在这个时期,普遍采用了0.25u m或 0.18um的CMOS工艺,集成程度的突破带来了芯片密度的剧增,DSP的片内存储容量达到了几百千字,DSP的内核采用1。2V供电,使功耗进一步降低,运行时钟的突破带来了性能的飞跃和速度的大幅度的提高。其中,TI公司的TMS320C64x及ADI公司的Blackfin系列的计算速度高达每秒钟1G条指令。DSP不公在信号处理能力方面更加完善,其开发手段也更加方便,编译优化方法更加灵活,如TI公司制定的软件接口规范
14、XDAIS为软件资源的事例构筑了一个通用平台,从而规范了DSP的编程,为DSP的开发应用提供了条件。近年来,DSP在国内外的应用市场上都取得了长足的进展,特别是在无线通信、宽带网络以及由此而拓展的流媒体应用领域,DSP都取得了重大的突破。所以学好dsp不仅能提高本专业的能力也是紧跟时代发展的必要条件。摘 要随着超大规模集成电路技术上取得的突破进展,集成化的DPS数字信号处理器具有体积小、功耗低和运算速度快等诸多优点,因此非常适用于语音信号的压缩处理。目前的DPS芯片以其强大的数据处理功能而在通信和其他信号处理领域得到广泛注意,并已成为开发应用的热点技术。本文主要的介绍了DSP系统计时器系统的设
15、计和程序代码的运行。着重分析和研究了C54x片,定时器控制寄存器TCR。关键字:C54x TRC DSP芯片 数码管第一章:硬件设计1.1 设计思路和原理数字时钟除基本的计时功能外还要可以通过按键设定时间,所以除了主循环程序和输出程序外还要有按键判断程序,来设定时间。程序设计为三大部分:时钟计时程序是程序、时钟输出程序、按键输入程序,除此外还有SDRAM初始化程序和命令文件。通过对设计要求的分析和研究,了解到嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也不能对其中的程序功能进行修改的。嵌入式软件以宿主机/目标机模式开发,所需要的开发环境称为交叉开发环境,分为宿主机部分和目标机部分
16、,两者以统一的通行协议进行通行,宿主机向目标机发送命令,目标机接收、执行命令并将结果返回宿主机,从而实现两机之间的交互控制。为了保证稳定性和实时性,选用CCS开发平台 对简单系统可以用传统方法,从底层用汇编语言编写程序,利用matlab、protel等开发工具进行软件的调试。对于那些复杂的嵌入式系统,需要在优化级可控的情况下预测其运行状态,不利用实时操作系统和嵌入式系统开发平台进行开发,是很难达到预定要求的。为了合理地调度多任务、利用系统资源,用户必须选配CCS开发平台,这样才能保证程序执行的实时性、可靠性、并减少开发时间,保证软件质量。才能顺利完整的完成设计任务。生成代码需要固态化存储 嵌入
17、式应用程序开发环境是PC机,但运行的目标环境却千差万别,所以需要通过ADS将生成的代码插入matlab、protel等仿真PCB目标板中运行,才能完成最后的结果。片内定时器结构图: 定时器主要由定时寄存器(TIM),周期寄存器(PRD),预分频计数器(PSC),预分频系数(TDDR)及控制逻辑电路等组成。可以划分为两个主要模块:主定时模块和预分频模块。其中,主定时模块包括TIM和PRD,它们是两个可编程的16位16位存储器映像寄存器(MMR),地址分别是0024h和0025h。TIM是一个减法计数器,它的记数初值由PRD进行装载。预分频模块由PSC和TDDR组成,它们分别位于定时器控制寄存器T
18、CR的D9D6,D3D0位,该寄存器也是一个可编程的16位存储器映像寄存器。1.2.流程图:1.3.程序总图: 1.4. 采用的芯片功能介绍:我们采用的是C54x芯片,C54x系列DSP是一种低功耗、高性能的16位定点芯片。它的突出特点是:采用改进型哈弗总线结构,具有性能强大的CPU内核、内部多总线结构、硬件重复机制及两套独立的地质产生器,为组成6级流水线和并行操作提供了硬件平台。它提供多种寻址模式和功能丰富的指令集,满足了高速、实时的数字信号处理需要。它丰富的片内外设资源既方便的外部扩展能力,为芯片的嵌入式应用奠定了基础TMS320VC5509 DSP 有两个独立的20 bit软件可编程通用
19、减数计数定时器,它们可用于向CPU提供周期性的中断信号,或者给DMA控制器发送中期同步事件,也可以用于给外部设备提供周期信号,还可以用于外部事件计数。定时器的工作始终可以来自DSP内部的CPU时钟,也可以来自引脚TIN/TOUT。利用定时器控制寄存器(TCR)中的字段FUNC可以确定输入时钟源和TIN/TOUT引脚功能。在定时器中,预定标记计数寄存器(PSC)由输入时钟驱动,PSC在每个输入时钟周期减1。当其减到0时,TIM减1,当TIM减到0时,定时器向CPU发出一个中断请求(TINT)或者向DMA控制器发送同步事件。定时器发送中断信号或同步事件信号的频率可用下公式计算,即TINT频率=输入
20、时钟频率/【(TDDT+1)*(PRD+1)】第二章. 软件设计1、 设计思路一个实际的应用系统中,总存在各种干扰,所以在系统设计中,滤波器的好坏将直接影响系统的性能。使用DSP进行数字处理,可以对一个具有噪声和信号的混合信号源进行采样,再经过数字滤波,滤除噪声,就可以提取有用信号了。所以说,数字滤波器是DSP最基本的应用领域,熟悉基于DSP的数字滤波器能为DSP应用系统开发提供良好的基础。.程序的流程图:采用的编码具体程序: .title shizhong.asm .mmregs .def _c_int00 ;程序入口 .def _Timer0 ;Timer0中断服务程序入口 .ref sh
21、uchu ;引用外部变量,时钟输出程序入口 .ref key ;引用外部变量,按键输入程序入口 .ref sdram_init ;引用外部变量SDRAM初始化程序入口LED .set hTIM0 .set 0x1000PRD0 .set 0x1001TCR0 .set 0x1002PRSC0 .set 0x1003SYSR .set 0x07fd CLKMD .set 0x1c00 ;时钟模块寄存器地址 PDP_Timer0 .set TIM0/128STACK .usect .stack,200h ;分配堆栈空间SYSSTACK .usect .sysstack,200h .dataLED_
22、I .word 1,2,4,8,4,2 .sect .vectorsrsv: b _c_int00 nop .align 8nmi: .loop 8 nop.endloopint0: .loop 8 nop.endloopint2: .loop 8 nop.endlooptint0: 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 #SYSS
23、TACK+200h,XSSPInterupt: ;初始化中断 bset intm mov #1,IVPD mov #1,IVPH mov #10h,IER0 mov #10h,DBIER0 mov #0,IER1 mov #0ffffh,IFR0 mov #0ffffh,IFR1 call sdram_init ;调用SDRAM初始化程序 call shuchu ;调用时钟输出子程序;=;初始化定时器并启动计时器;= mov #PDP_Timer0,PDP mov #149,AR0 mov #0438h,port(#TCR0) mov #15,port(#PRSC0) mov #59999,p
24、ort(#PRD0) and #0fbefh,port(#TCR0) ;停止从周期寄存器装入并启动定时器 bclr INTM ;使能全局中断bset AR5LC amov #LED,XAR4 mov #6,BK03 amov #LED_I,XAR5 mov #LED_I,BSA23 mov #0,AR5loop: NOP b loop ;等待中断 ;= ;中断服务程序;=_Timer0: mov *AR5,*AR4 bcc Next1,AR0!=#0h ;判断是否中断150次 mov #149,AR0 ;重新装载计数器重新计数 amar *AR1+ ;时钟秒自动加1 call shuchu b
25、cc Fen,AR1 =#3ch ;判断AR1是否满60 b Next2Fen: mov #0,AR1 amar *AR2+ call shuchu bcc Shi,AR2 =#3ch b Next2Shi: mov #0,AR2 amar *AR3+ call shuchu bcc Loop1,AR3 =#0ch b Next2Loop1: mov #0,AR3 b Next2Next1: amar *AR0-Next2: mov port(#0200),AR6 ;读取S1按键装载到AR4 bcc loop2,AR6!=#1h call key ;当按键S1按下时调用按键子程序 loop2:
26、 reti ;中断返回 .end2 计时器输出程序 .def shuchu .data .text Shuchu: 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
27、,AC0 mov AC0,port(#0103h) ;将商输出到分的十位 mov HI(AC0),port(#0102h) ;将余数输出到分的个位 mov AR3,AC0 ;把被除数(时)放入AC0 rpt #0fh ;执行subc16次 subc AR6,AC0,AC0 mov AC0,port(#0105h) ;将商输出到时的十位 mov HI(AC0),port(#0104h) ;将余数输出到时的个位 ret .end3 按键输入程序 .def key .ref shuchu .textkey:;=;延时;= mov #500,AR5L1: amar *ar5- mov #10,AR4L
28、2: amar *ar4- bcc L2,AR4!=#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 keyyichu1: mov #0,AR3 cal
29、l shuchu ;调用时钟输出子程序 b key fen: amar *AR2+ bcc yichu2,AR2 =#3ch call shuchu ;调用时钟输出子程序 b keyyichu2: mov #0,AR3 call shuchu ;调用时钟输出子程序 b keyL: ret .end2.3.1计时器算法原理及实现:1、除法也用类似竖式的方法,从高位到低位逐一得出结果。2.先左移除数,直到除数不小于被除数,同时记录移动的位数;3、开始循环,循环次数为前一步移动的位数加1;4、比较被除数与除数的大小,如果被除数不小于除数,则该位结果 为5、并把被除数减去除数,否则为0;6、除数右移一
30、位,继续循环。.FFT的算法实现:大多数DSP芯片具有单指令周期的乘法-累加操作指令,并且提供了专业的FFT指令,使得FFT在DSP芯片上的实现更为方便,速度更快。用定点DSP芯片实现FFT程序时,一个比较重要的问题是需要防止中间结果的溢出。防止中间结果溢出的方法是对中间数值归一化。下面是溢出是如何产生的:根据傅里叶变换计算公式,应用怕塞瓦尔(Parseval)定理可得:也就是说,X(k)的均方值是x(n)的均方值的N倍。因此,应对输出做出合理的归一化处理以防止溢出的发生。对于实数FFT,每一级运算产生的增溢不会超过2,因此可以用因子2对每一级的运算进行归一化处理。由DSP芯片的移位运算可知,
31、仅需一次移动位就能实现因子为2的归一化,因此不会造成计算量的增加。这样,如果进行M级FFT运算,则输出相当于除以2的M次方等于N,N为FFT长度。第三章.系统设计应解决的关键问题:1)DSP的CLKOUT没有输出,工作不正常。2)Emu0,Emu1需要上拉。3)TCK的频率应该为10M。4)在3.3V DSP中,PD脚为3.3V 供电,但是仿真器上需要5V电压供电,所以PP仿真器盒上需要单独供电。5)仿真多片DSP。在使用菊花链的时候,第一片DSP的TDO接到第二片DSP的TDI即可。注意当串联DSP比较多的时候,信号线要适当的增加驱动。减小电路功耗的主要途径: 1.选择低功耗的芯片 2.减少
32、芯片的数量 3.尽量使用IDLE源晶振与晶体的区别: 1.晶体需要用DSP片内的振荡器,在datasheet上有建议的连接方法。晶体没有电压的问题,可以适应于任何DSP,建议用晶体。 2.有源晶振不需要DSP的内部振荡器,信号比较稳定。有源晶振用法:一脚悬空,二脚接地,三脚接输出,四脚接电压。总结:设计心得体会: 课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础通过本次课程设计实
33、现了用DSP定时器做时钟, 学习到了很多关于DSP定时器和中断的知识,并且更加深刻的巩固了课堂上所学的课本知识,DSP技术有了更进一步的认识和了解。掌握了DSP的基本实验方法,提高了工程设计和组织实验能力。具备了初步基本程序的分析和设计能力,并掌握其应用方法,自行拟定实验步骤检查和排除故障、分析和处理实验结果及撰写报告的能力。提高实验技能的实践。附录,参考文献:1.刘益成 TMS320C54XDSP应用程序设计与开发 北京 北京航空航天大学出版社 20082.方华刚DSP原理与应用北京:机械工业出版社,2001.83.TMS320C55x DSP Programmers Guide SPRU376AZ.Texas Instuments,20014王浩,通信原理及系统实验M,华中科技大学出版社,2005.65孙毅,SystemView通信仿真开发手册M,电子工业出版社,2005.86青松,数字通信系统的SystemView仿真与分析M,华中科技大学出版,2006.57李刚、宋苇,SystemView通信仿真开发手册/通信工程仿真开发手册M,北京邮电学出版,2005.8刘青山,SystemView通信仿真开发手册M,电子工业出版社,2003.2
限制150内