DSP作业

合集下载

DSP作业

DSP作业

DSP 作业1.DSP 芯片有哪些主要特点?答:DSP 的主要特点有:1.哈佛结构2.多总线结构3.流水线结构4.多处理单元5特殊的DSP 指令6.指令周期短7.运算精度高8.硬件配置强。

2.简述典型DSP 应用系统的构成。

答:输入信号首先进行带限滤波和抽样,然后进行数模变换将信号变换成数字比特流,根据奈奎斯特抽样定理,对低通模拟信号,为保持信号的不丢失,抽样频率至少必须是输入带限信号最高频率的2倍。

输入 输出 输出3.简述DSP 应用系统的一般设计开发过程。

如何选择DSP 芯片?答:DSP 应用系统的一般开发过程有:系统需求说明;定义技术指标;选择DSP 芯片及外围芯片;软件设计说明、软件编程与测试;硬件设计说明、硬件电力与调试;系统集成;系统测试,样机、中试与产品。

DSP 芯片的选择:1.DSP 芯片的运算速度2. DSP 芯片的价格3. DSP 芯片的硬件资源(存储器、ADC 、PWM 等等)4.DSP 芯片运算精度5.芯片开发工具:软件 硬件6..DSP 芯片功耗7.其他:封装、应用场合、售后服务等。

4.常用的DSP 芯片有哪些?答:C20x 、C24x 、C5x 、C54x 、C62xx 、C3x 、C4x 、C67xx 。

5.DSP 控制器的应用领域有哪些?答:(1)信号处理:数字滤波、快速FFT 、相关运算、谱分析、自适应铝波、卷积、模式匹配、加窗、波形产生等。

(2)通信:调制解调器、数据压缩、回拨抵消、多路复用、传真、自适应均衡、数据加密、扩频通信、纠错编码、可视电话等。

(3)语言:语音邮件、语音存储、语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认等。

(4)图形/图像:图像增强、动画、机器人视觉、二维/三维处理器、图像压缩与传输等。

(5)军事:导航、雷达处理、声纳处理、导弹制导等。

抗混叠滤波 A/D DSP 芯片 D/A 平滑滤(6)医学:病人监控、修复手术、超声设备等。

DSP作业

DSP作业

1、以 51i i i y ax ==∑ 为例,编写完整的.asm 汇编源程序以及.cmd 命令文件,写出程序注释,并叙述在CCS2.0集成开发环境下,调试程序的基本步骤。

其中 a 和x 的值由自己确定。

解:.title "mpy_add.asm".mmregs ;将存储映像寄存器导入列表STACK .usect "STACK",10h ;给堆栈段分配空间.bss a,5 ;将11个字空间分配给各个变量.bss x,5.bss y,1PA0 .set 0 ;将端口PA0全部置0.def start ;定义标号start.data ;定义数据代码段table:.word 4,4,4,4,4(设置8个单元的16位整型常量,其初值为4).word 4,4,4,4,4.text ;定义文本代码段start:STM #0,SWWSR ;将等待寄存器设为0,表示不等待STM #STACK+10h,SP ;设堆栈指针STM #a,AR1 ;将AR1指向变量a 的地址RPT #9 ;从程序存储空间转移9+1个值到数据储存空间MVPD table,*AR1+CALL SUM ;调用SUM 子程序end: B end ;循环等待SUM: STM #a,AR3 ;将AR3指向变量a 的地址STM #x,AR4 ;将AR4指向变量x 的地址RPTZ A,#4 ;将A 清0,并重复执行下一条指令4+1次MAC *AR3+,*AR4+,ASTL A,@y ;将寄存器A 中的低16位存入y 地址空间PORTW @y,PA0 ;将y 地址中的值输出到输出口RET ;子程序返回.end ;程序结束2、试举一例DSP 实际应用的例子,具体要求如下:1)画出系统基本的硬件连接电路或硬件电路框图;2)对系统的工作原理及工作过程进行详细介绍;3)给出DSP 软件程序和必要的注释;4)报告内容条理清楚,思路清晰;5)报告要求手写完成,格式要规范美观。

dsp作业(DOC)

dsp作业(DOC)

TMS320C62xx一、DSP简介自1982年推出第一款DSP后,德州仪器公司(Texas Instrument简称TI)不断推陈出新、完善开发环境,以其雄厚的实力在业界得到50%左右的市场份额。

TI的DSP经过完善的测试出厂时,都是以TMS320为前缀。

在众多款型DSP中,TI把市场销量好和前景看好的DSP归为三大系列而大力推广,TI也称之为三个平台(Platform)。

TMS320C2000 平台,包含16位C24xx和32位C28xx的定点DSP。

C24xx系列市场销量很好,而对C28xx系列,TI认为很有市场潜力而大力推广。

C2000针对控制领域做了优化配置,集成了了众多的外设,适合逆变器、马达、机器人、数控机床、电力等应用领域。

由于C2000定位在控制领域,其包含了大量片内外设,如IO、SCI、SPI、CAN、A/D等等。

这样C2000既能作为快速微控制器(单片机)来控制对象,也能作为DSP来完成高速数字信号处理,DSP的高性能与通用微控制器的方便性紧密结合在一起,所以C2000也常被称为DSP控制器。

这里C2000采用的是与OMAP 不同的途径简化了主从式设计。

C2000系列(定点、控制器):C20X,F20X,F24X,F24XX,C28X,F28XX 该系列芯片具有大量外设资源,如:A/D、定时器、各种串口(同步和异步),WATCHDOG、CAN总线/PWM发生器、数字IO脚等。

是针对控制应用最佳化的DSP,在TI所有的DSP中,只有C2000有FLASH,也只有该系列有异步串口可以和PC 的UART相连。

3)C6000 系列:C62XX,C67XX,C64XX 该系列以高性能著称,最适合宽带网络和数字影像应用。

32bit,其中:C62XX和C64XX是定点系列,C67XX 是浮点系列。

该系列提供EMIF扩展存储器接口。

该系列只提供BGA封装,只能制作多层PCB。

且功耗较大。

TMS320C5000 平台,包含代码兼容的定点C54x和C55x。

DSP作业及答案

DSP作业及答案

1.DSP有哪些显著特点?答:(1)在一个指令周期内可完成一次乘法和一次加法(2)程序和数据空间分开,可以同时访问指令和数据(3)片内有大容量的快速RAM(4)快速中断处理和硬件I/O支持(5)可以并行执行多个操作(6)支持流水线操作,使取指、译码和执行等操作可以重叠执行2.简述TMS320LF2407A的片内资源。

答:(1)40MIPS处理能力(2)两个事件管理模块能提供16路PWM输出、四个16位定时器,很便于对电机的控制(3)16路AD模拟通道(4)集成了CAN总线控制器(5)16位串行外设接口和串行通讯接口(6)高达40个可编程或复用的通用输入输出引脚(7)片内32K的flash程序存储器和2K数据程序RAM、2K单口RAM和544字节双口RAM(8)程序和数据空间可外扩至64K3.TMS320LF2407A通用定时器有哪些功能?简述其工作模式。

答:功能如下:(1)计时(2)使用定时器的比较功能产生PWM波(3)给事件管理器的其他子模块提供基准时钟。

有四种操作模式,分别为:停止/保持模式,连续递增计数模式,定向增/减计数模式,连续增/减计数模式。

4. 简述DSP C语言与ANSI C的主要区别答:DSP C语言以ANSI C为基础,并对ANSI C进行了相应的限定和扩展。

以下是LF2407 C语言的一些不同于一般标准C的特征:(1)标识符和常量所有标识符的前100个字符是有效的,区分大小写;不允许多字节字符;多字符的字符常数按序列中的最后一个字符来编码,例如:‘abc’==‘c’。

(2)数据类型整型、双精度型等数据类型长度与常见编译器中数据类型不同,所有的浮点型都是由MS320C2x/C2xx/C5x的32位的二进制浮点格式来表示。

size_t(sizeof操作符的结果)定义为unsigned int;ptrdiff_t(指针加减的结果)定义为int。

(3)类型转换浮点数转换为整型数为向零取整转换;指针和整型数可以自由转换。

DSP作业

DSP作业

DSP作业1.请详细描述传统的DSP芯片的主要结构特点。

传统DSP芯片的主要结构特点有:(1)DSP采用改进的哈佛总线结构,内部有两条总线,即数据总线和程序总线。

(2)采用流水操作,每条指令的执行划分为取指令、译码、取数、执行等若干步骤,由片内多个功能单元分别完成,支持任务的并行处理。

(3)片内多总线并行技术。

DSP可以充分利用哈佛结构多重总线的优点,在一个周期里使内部的各个处理单元同时工作,实现高度的并行处理。

如在一个周期里可以同时完成取指令、计算下一个指令的地址、执行一个或两个数据传输、更新一个或两个地址指针并且进行计算等等。

(4)软、硬件等待功能,可设定的软件等待周期,外部设备数据就绪指示(硬件等待)(5)DSP有独立的乘法器和加法器,包括硬件乘法器、多种乘法、乘法输入输出寄存器、乘法加法器,在一个指令周期内实现一次或多次乘法累加(MAC)运算。

(6)DSP同PC的CPU相比具有低功耗、体积小、价格低等特点。

(7)中断和定时器,多级多路中断源,多个定时器。

(8) DMA通道和通信口。

DSP有一组或多组独立的DMA控制逻辑,提高了数据的吞吐带宽,为高速数据交换和数字信号处理提供了保障。

同时DSP有一组或多组独立的DMA控制逻辑,提高了数据的吞吐带宽,位高速数据交换和数字信号处理提供了保障。

2.结合所在实验室的某项目,做一篇DSP选型报告,要求有项目描述、重点问题、选型依据、性能比较等内容。

项目描述:主要是通过工控机,以显示网压网流波型,通过以太网接口、can接口、485接口读取采集数据。

28335还拥有tf扩展卡,可以把采到的数据直接存到卡里,DA用来观测中间变量信号,通过8个排针来观察,并且控制总线也通过排针引出,因为控制总线可以用示波器观察波形的时序,以便控制总线是按逻辑时序工作的。

同时可以在工控机上编一个界面,在界面上可以有只补谐波、只补无功等工作方式,然后传给28335,在传给FPGA。

DSP作业

DSP作业

DSP作业
总电路图如下所示:
1.芯片
本次所采用的芯片为TMS230C5416,使用JTAG用于芯片测试,利于10MHz晶振为芯片提供时钟。

并且芯片部分引脚需要接入上拉电阻,上拉电阻置为高电位。

其核心图形如下所示:
B模块
PC机作为上位机,通过在PC上运行相应程序来控制数据传输。

USB传输的功能芯片为CY7C68001,其满足USB2.0协议,可工作在高速或全速模式下。

3.电源
所用芯片采用双电源供电模式,内核电源采用1.8、2.5或3.3V,I/O口电压为
3.3V。

采用LM317产生的1.8V电压,为芯片内核供电,LM1117-3.3V线性稳压
器产生3.3V电压为芯片的I/O口供电。

使用LM2940线性稳压器产生5V电压,给AD模块供电。

原理图如下:
4.AD模块
ADC部分使用8通道10位并行A/D转换器TLV1571芯片。

芯片供电电压5V,由线性稳压芯片LM2940产生;高精度电压基准芯片REF3040产生4V电压,作为AD采样的基准电压。

原理图如下:
5.SRAM及FLASH
SRAM作为IS61LV12816的存储器扩展,FLASH作为SST39LF400的存储器扩展。

原理图如下:。

DSP作业

DSP作业

1绪论数字信号处理是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效的传输与应用。

与模拟信号处理相比,数字信号处理具有精确、灵活、抗干扰能力强、可靠性高、体积小、易于大规模集成等优点数字信号处理器(DSP)主要针对描述连续信号的数字信号进行数学运算,以得到相应的处理结果。

这种数学运算以快速傅立叶变换(FFT)为基础,对数字信号进行实时的处理。

最近二十年来,由于集成电路技术的高速发展,用硬件来实现各种数字滤波和快速傅立叶变换成为可能,从而使DSP得到了非常快速的发展和广泛的应用。

在数字化的世界和互联网的时代,DSP变得越来越重要,可以说是无处不在1.1课题提出的背景1.1.1 数据采集技术数据采集是获取信息的基本手段,数据采集技术作为信息科学的一个重要分支, 以传感器、信号测量与处理、微型计算机等技术为基础而形成的一门综合应用技术,它研究数据的采集、存储、处理及控制等,具有很强的实用性。

随着现代科学技术的发展和计算机技术的普及,高速数据采集系统已应用于越来越多的场合,如通信、雷达、生物医学、机器人、语音和图像处理等领域。

数据采集系统追求的主要目标有两个:一是精度,二是速度。

对任何量值的测试都要有一定的精确度要求,否则将失去采集的意义;提高数据采集的速度不但可以提高工作效率,更重要的是可以扩大数据采集系统的适用范围,以便于实现动态测试。

1.1.2 数字滤波技术数字滤波器将输入信号序列通过一定的运算后变换为输出信号序列,从而完成滤波功能。

因此,数字滤波器就是一个数字系统(离散系统),而且一般情况下还是线性时不变系统。

与模拟滤波相比,数字滤波具有很多突出的优点:它可以满足滤波器对幅度和相位特性的严格要求,可以避免模拟滤波无法克服的电压漂移、温度漂移和噪声等问题。

且精度可以达到很高,容易集成。

1.1.3 CAN总线通信CAN即控制器局域网,是一种多主方式的串行通信总线。

DSP作业和答案(盐城工学院)(精)

DSP作业和答案(盐城工学院)(精)

第一章1 DSP芯片的特点有哪些?2 DSP芯片的选型一般是从哪几个方面进行考虑?3简述 TI 公司的 DSP 三大平台和它们各自的应用场合。

4 DSP芯片发展趋势应该朝着哪些方面发展?第二章1 如何对 CCS3.3的单处理器目标系统进行配置?2 简单程序的开发步骤有哪些?3 DSP探针的作用有哪些?第三章1TMS320X28xx 编译器输出哪些代码文件?2 编译器的集成预处理功能完成哪些预处理任务?3 DSP 的寄存器是如何定义的?试举例说明。

4 TMS320X28xx 定点处理器是如何实现浮点运算的? IQmath 主要由哪几部分组成?第四章1 写出 TMS320X28xx 的工作频率、内核电压和 I/O电压的关系, 内核电压和I/O电压的上电次序有没有特定的要求?2 TMS320X281x 处理器外设功能有哪些?简要介绍。

第六章1 若要将高速外设模块的时钟频率设置为 SYSCLKOUT/8,低速外设模块的时钟频率设置为 SYSCLKOUT/10,应该如何设置寄存器HISPCP 和寄存器 LOSPCP 的值?答:将高速外设模块时钟前分频寄存器 HISPCP 的值设置为 0x0004, 将高速外设模块时钟前分频寄存器 HISPCP 的值设置为 0x0005。

2 画出程序监视器功能框图,对照图简要说明它的工作原理。

第八章第十三章1 已知 XCLKIN=30MHz,要使 ADC 模块的时钟为 3.125MHz ,应该对哪些寄存器中的哪些段进行设置,设置的数值分别为多少?答:应该对 PCLKCR 中的 ADCENCLK 、 PLLCR 中的 DIV 、 HISPCP 中的HSPCLK 、 ADCTRL3中的 ADCCLKPS 、 ADCTRL1中的 CPS 进行设置。

设置的数值分别是:PCLKCR 中的 ADCENCLK 设置为 1(或 PCLKCR=0x0008, PLLCR 中的 DIV 设置为 1010(PLLCR=0x000A, HISPCP 中的 HSPCLK 设置为011(HISPCP=0x0003, ADCTRL3中的 ADCCLKPS 设置为 0010, ADCTRL1中的CPS 设置为 1。

DSP作业

DSP作业

第一章1.什么是DSP,DSP的两层含义?什么是DSP - 简单说就是数字信号处理数字信号处理(DSP)一般有两层含义,一层是广义的理解,为数字信号处理技术——Digital Signal Processing,另一层是狭义的理解,为数字信号处理器——Digital Signal Processor2.简述数字信号处理与模拟信号处理相比的优越性?数字信号处理的特点:精度高,可靠性高灵活性大,易于大规模集成,可获得高性能指标,抗干扰能力强体积小。

3.什么是哈佛结构,它和传统CPU所使用的冯.诺依曼结构有什么主要区别?哈佛结构采用双存储空间程序存储器和数据存储器是分开的有各自独立的程序总线和数据总线可独立编址和独立访问。

冯诺依曼程序存储器和数据存储器不分开所以哈佛结构比冯诺依曼结构有更快的指令执行速度。

4.DSP芯片的分类DSP的芯片可以按照以下的三种方式进行分类。

1. 按基础特性分静态DSP芯片和一致性DSP芯片。

2. 按数据格式分通用型芯片和装用型芯片3. 按用途分定点DSP和浮点DSP。

5.衡量DSP芯片运算速度的指标运算速度是DSP芯片的一个最重要的性能指标,也是选择DSP芯片时所需要考虑的一个主要因素。

DSP芯片的运算速度可以用以下几种性能指标来衡量:(1)指令周期。

就是执行一条指令所需要的时间,通常以ns为单位。

(2)MAC时间。

即一次乘法加上一次加法的时间。

(3)FFT执行时间。

即运行一个N点FFT程序所需的时间。

(4)MIPS。

即每秒执行百万条指令。

(5)MOPS。

即每秒执行百万次操作。

(6)MFLOPS。

即每秒执行百万次浮点操作。

(7)BOPS。

即每秒执行十亿次操作。

第二章1.C54x内部总线结构有中央处理器CPU,内部总线控制,特殊功能寄存器,数据存储器RAM,程序存储器ROM,I/O接口扩展功能,串行口,主机通信接口HPI,定时器,中断系统等10个部分组成2.TMS 320C 54x的累加器A和B的区别累加器A和B的唯一区别是累加器A的32~16位能被用做乘法累加单元中的乘法器输入,而累加器B不能。

dsp原理与应用课程作业

dsp原理与应用课程作业

2 理解DSP在音频和图像处理中的应用
了解数字信号处理在音频处理和图像处理领 域中的广泛应用,如音效处理、图像增强等。
3 提高解决实际问题的能力
通过完成作业和项目,您将培养解决实际问 题的能力,并应用所学知识。
4 培养团队协作与沟通能力
通过课程中的团队项目,您将与他人合作, 并在团队中培养协作与沟通的能力。
完成基本的数字信号处理算法的实现,如卷积、离散傅立叶变换等。
作业2: 设计音频处理程序
设计并实现一个音频处理程序,用于音频音效处理或音频合成。
作业3: 实现图像处理算法
编写代码实现图像处理算法,如图像增强、图像压缩或图像识别。
学习收获
1 掌握DSP的基本知识和原理
通过学习该课程,您将深入了解数字信号处 理的基础知识和工作原理。
DSP在音频处理中的应用
了解数字信号处理在音频音效处理、音频合成 和音频编码等方面的重要应用。
DSP算法与模型
探索数字信号处理中常用的算法和模型,如滤பைடு நூலகம்波器设计,快速傅立叶变换等。
DSP在图像处理中的应用
探索数字信号处理在图像增强、图像压缩和图 像识别等领域的广泛应用。
作业要求
作业1: 实现基本的DSP算法
DSP原理与应用课程作业
在这个DSP原理与应用课程中,我们将深入研究数字信号处理的基础知识和 应用,并通过一系列的作业来提高您的实践能力。
课程概述
本课程将介绍数字信号处理(DSP)的基本概念和原理,并深入探讨其在音 频和图像处理领域的应用。
课程内容
DSP基础知识
学习数字信号处理的基础概念,包括采样和量 化,频域与时域分析等。
课程总结
通过这门DSP原理与应用课程,您将对数字信号处理有全面的了解,掌握其 基本概念和技术,并将能够应用于音频和图像处理等领域。

DSP作业

DSP作业

DSP作业1.什么是流水线技术?什么是流水线冲突?如何解决流水线冲突?答:流水线技术:在执行多条指令时,将每条指令的预取指、取指、译码、寻址、读取操作数、执行等阶段,相差一个阶段地重叠地执行。

可以减少指令执行时间。

流水线冲突:双寻址存储器的流水线冲突,流水线冲突原因是CPU在单个周期内两次访问双寻址存储器。

CPU同时访问DARAM 的同一存储器块就会发生时序上的冲突。

1. 同时从同一存储器块中取指和取操作数(都在前半个周期);2.同时对同一存储器块进行写操作和读(第二个数)操作(都在后半周期)。

解决办法:1.人为合理安排指令,错开访问时序。

2.CPU通过写操作延迟一个周期,或者通过插入一个空周期的办法,自动地解决。

2.哈佛结构,冯诺依曼结构,改进型哈佛结构是什么?区别?答:哈佛结构:程序空间和数据空间分开,可同时取指令和操作数。

冯诺依曼结构:程序空间和数据空间合在一起。

改进哈佛结构:允许数据存放在程序存储器中,并可以被算术指令直接使用,改进存储器块结构,允许在一个周期内同时读取一条指令和两个操作数。

3.nop指令执行什么样的动作?作用?答:nop指令什么也不执行,一个nop是一个机器周期,用于延时。

它有两个作用:一是在执行程序全部清除后,用NOP显示;二是用于修改程序,利用在程序中插入NOP指令,修改程序时可以使程序步序号的变化减少。

4.2812可屏蔽中断有多少个?不可屏蔽中断多少个?NMI、RS各属于哪种中断?可屏蔽中断,不可屏蔽中断中优先级高的是哪个?答:可屏蔽中断:14个通用中断——INTl~INTl4;为仿真而设计的中断——DLOGINT(数据标志中断)和RTOSINT(实时操作系统中断)。

不可屏蔽中断包括:软中断INTR和TRAP指令,硬件中断NMI,非法指令陷阱,硬件复位中断RS。

复位(RS=0)是优先级最高的中断,为不可屏蔽外部中断。

5.PIE三级中断过程是什么?答:外设级:一个中断产生事件出现在某个外设中,和该事件相关的中断标志(IF)位会在这个特别外设的寄存器中被置为1。

DSP作业

DSP作业

1、简述DSP应用系统的一般设计过程;答:DSP应用系统的一般设计过程为:(1)、根据需求写出任务说明书;(2)根据任务说明书确定技术指标;(3)、选择DSP芯片及外围芯片;(4)、总体设计,确定软硬件分工;(5)、编写软硬件说明书,进行软硬件设计,再进行硬件调试和系统集成;(6)、系统测试、样机完成、中试、产品测试与生产。

2、简述C2000 DSP CPU的组成;答:C2000 DSP CPU主要由输入定标单元、中央算术逻辑单元、乘积单元、辅助寄存器算术单元和一些状态、配置寄存器组成。

3、简述TMS320F24X DSP 控制器主要特性;答:TMS320F24X DSP 控制器主要特性是:(1)、在X24X系列DSP控制器的CPU内包含32位中央算术逻辑单元、32位累加器、16位*16位并行硬件乘法器,并带有32位的结果寄存器、3个定标移位器和8个辅助寄存器。

(2)、一般来说,典型的DSP控制器具有片上544字DARAM、16千字的程序ROM或Flash EEPROM,最大可寻址空间为224千字,带有软件等待状态产生器的外部存储器接口,可实现与各种类型外部存储器接口。

根据器件型号的不同,存储空间的大小也各不同。

(3)、4级流水线,8级硬件堆栈,6个外部中断。

(4)、源代码与C1x、C2x、C2xx、C5x系列DSP芯片兼容,具有单周期乘加、单指令重复、存储器块移动指令,支持位反转寻址和索引寻址。

(5)、采用静态CMOS工艺技术,4种低功耗操作模式可进一步节电。

(6)、单指令周期小于50ns,绝大多数指令可在单周期内完成。

(7)、片上集成事件管理器、ADC、28个可编程复用I/O引脚、锁相环时钟发生器,具有实时中断的看门狗电路、串行通信接口、串行外设接口等功能外设;片设外设的配置与具体的器件信号相关。

(8)、多种封装形式。

4、说明C2000 DSP 的总线结构及特点;答:C2000 DSP 的总线结构及特点是:C2000 DSP片内采用并行总线结构,数据的读写可发生在不同的总线上。

DSP原理与应用课程作业 最终版

DSP原理与应用课程作业 最终版

比较好的方法是在二者间折中,即程序的主 体框架和对实时性要求不高的部分采用C/C++语言, 而算法则采用汇编语言,这样能够充分发挥二者 的优点,解决易读性和效率之间的矛盾。
27
第4次作业
5.3 何谓小存储器模式?何谓大存储器模式? 答:在小存储器模式下,代码段和数据段的长度和位置受到一定的 限制。如下列段都必须在长度为64KW的存储器的一个单页中: .bss和.data段(存放所有的静态和全局变量) .stack和.sysstack段*(the primary and secondary system stacks:主 系统堆栈和二级系统堆栈) .sysmem段(动态存储空间) .const段
直接寻址方式:使用偏移地址指示目的地址。
间接寻址方式:使用指针指示目的地址。
20
第 3 次作业
0x0000
0x1111 0x2222 0x3333
21
22
第 3 次作业
4.3 TMS320C55x DSP的指令集包含了哪几种基本类 型的指令? 答:算术运算指令 逻辑运算指令 移动指令 程序控制指令
7
第 1 次作业
8
第 1 次作业
9
第 2 次作业
2.6 ICETEK-VC5509-A评估板上字节地址起止范 围为0x048000-0x04FFFF对应的哪种存储器 ?这段存储空间有多大? 外扩寄存器地址 0x400001(字地址) 对应的哪个CE空间? 答:这段地址对应的存储器为SDRAM。这段存储 空间的大小32KB。外扩存储器地址0x400001( 字地址)对应的CE2空间。
;AC0=AC0-((*AR2)*(*AR3))
;AR2=AR2+1,AR3=AR3+1

DSP作业

DSP作业

DSP作业专业:自动化学号:3120502046 姓名:王庆1.编写TMS320F240 数字信号处理器的框架程序(用汇编程序编写)ORG 0000H LJMP START ORG 0002H LJMP iINT1 ORG 0004H LJMP iINT2 ORG 0006H LJMP iINT3 ORG 0008H LJMP iINT4 ORG 000AH LJMP iINT5 ORG 000CH LJMP iINT6 ORG 0022H LJMP iTRAP ORG 0026H LJMP iNMI START:初始化MAIN:主循环LJMP MAIN iINT1:中断服务程序RETIiINT2:中断服务程序RETIiINT3:中断服务程序RETIiINT4:中断服务程序RETIiINT5:中断服务程序RETIiINT6:中断服务程序RETI iTRAP:中断服务程序RETIiNMI:中断服务程序RETI2.编写TMS320F240数字信号处理器的中断服务程序,要求有现场保护的内容,且保护的现场不要放在堆栈中(用汇编语言编写,保护内容ACC,ST0,ST1)GISR2 ;INT2中断服务程序入口SST #0,S0 ;保护ST0SST #1,S1 ;保护ST1LDP #0 ;保护ACCSACL R0SACH R1LDP #0E0HLACL PIVRXOR #0027HBCND TIPISR,EQTIPISRLDP #0LACC CNTADD #1 SCALL CNTSUB #8BCND T1_EX,NEQ SPLK #0,CNTTI_EXLDP #0E8HSPLK #0FFFFH,EVAIFRA LDR #0LST #1,S1LST #0,S0LACC R1,16OR R0CLRA INTMRET3.画出电压空间矢量产生的Uab一个周期的波形图(载波频率是输出电源频率的12倍,m=0.5)1.调制波与载波,频率比1:12,调制系数0.52.a相电压波形3.b相电压波形4. Uab波形4. 有一周期函数,其一个周期的采样值Y[]={-100,70.7,200,-70.7,-300,-70.7,200,70.7},用FFT 算法求函数各次波的幅值(要有程序清单) (1)汇编代码: FFT: MOVL *SP++,XAR1 MOV32 *SP++,R4H ADDB SP,#24 MOVL *-SP[4],XAR5 MOVL *-SP[2],XAR4 MOVL XAR4,*-SP[2] MOVIZ R0,#0XC2C8 MOV32 *+XAR4[0],R0H FFC XAR7,0X048A42 MOVIZ R0,#0X428D MOVXI R0H,#0X6666 MOV32 *+XAR4[2],R0H MOVL XAR4,*-SP[2] MOVIZ R0,#0X4348 MOV32 *+XAR4[4],R0H MOVL XAR4,*-SP[2] MOVIZ R0,#0XC28D MOVXI R0H,#0X6666 MOV32 *+XAR4[6],R0H MOVL XAR4,*-SP[2] MOVIZ R0,#0XC396 MOVB XAR0,#8 MOV32 *+XAR4[AR0],R0H MOVL XAR4,*-SP[2] MOVIZ R0,#0XC28D MOVXI R0H,#0X6666 MOVB XAR0,#10 MOV32 *+XAR4[AR0],R0H MOVL XAR4,*-SP[2] MOVIZ R0,#0X4348 MOVXI R0H,#0X6666 MOVB XAR0,#12 MOV32 *+XAR4[AR0],R0H MOVL XAR4,*-SP[2] MOVIZ R0,#0X428D MOVXI R0H,#0X6666 MOVB XAR0,#14 MOV32 *+XAR4[AR0],R0H MOV *-SP[13],#0 MOV AL,*-SP[13] CMPB AL,#8 SB C$DW$L$_FFT$2$E,GEQ INC *-SP[13] MOV AL,*-SP[13] CMPB AL,#8 SB C$DW$L$_FFT$2$B,LT CSDWSLS_FFT$2$B: MOVB AL,#0 MOV *-SP[11],AL MOV AH,@AL MOV *-SP[10],ALMOV *-SP[9],ALMOV *-SP[8],AL MOV *-SP[7],AL MOV *-SP[6],AL MOV *-SP[5],ALMOV AL,*-SP[13] ANDB AL,#0X01 MOV *-SP[5],ALMOV AH,*-SP[13] MOV AL,@AHLSR AL,15 ADD AL,@AH ASR AL,1 ANDB AL,#0X01 MOV *-SP[6],ALMOV AH,*-SP[13] MOV AL,@AHASR AL,1 LSR AL,14 ADD AL,@AH ASR AL,2 ANDB AL,#0X01 MOV *-SP[7],ALMOV AH,*-SP[13] MOV AL,@AHASR AL,2 LSR AL,13 ADD AL,@AH ASR AL,3 ANDB AL,#0X01 MOV *-SP[8],ALMOV AH,*-SP[13] MOV AL,@AHASR AL,3 LSR AL,12 ADD AL,@AH ASR AL,4 ANDB AL,#0X01 MOV *-SP[9],AL MOV AH,*-SP[13] MOV AL,@AHASR AL,4LSR AL,11ADD AL,@AHASR AL,5ANDB AL,#0X01 MOV *-SP[10],ALMOV AH,*-SP[13] MOV AL,@AHASR AL,5LSR AL,10ADD AL,@AHASR AL,6ANDB AL,#0X01 MOV *-SP[11],ALMOV ACC,*-SP[5]<<6 MOVZ AR7,@AL MOV ACC,*-SP[6]<<5 ADD AL,@AR7 MOVZ AR6,@AL MOV ACC,*-SP[7]<<4 MOV AH@ALADD AH,@AR6 MOVZ AR7,@AH MOV ACC,*-SP[8]<<3 ADD AL,@AR7 MOVZ AR6,@AL MOV ACC,*-SP[9]<<2 MOV AH,@ALADD AH,@AR6 MOVZ AR7,@ALH MOV ACC,*-SP[10]<<1 MOVZ AR7,@ALADD AL,@AR7ADD AL,*-SP[11] MOV *-SP[12],ALMOVL XAR4,*-SP[2] SETC SXM MOVL XAR5,*-SP[4]MOV ACC,*-SP[13]<<1ADDL @XAR4,ACCMOV ACC,*-SP[12]<<1ADDL @XAR5,ACCMOVL ACC,*+XAR4[0] MOVL *+XAR5[0],ACCC$DW$L$_FFT$2$EMOV *-SP[13],#0MOV AL,*-SP[13]CMPB AL,#8SB C$L4,GEOINC *-SP[13]MOV AL,*-SP[]13CMPB AL,#8SB C$L3,LTC$L3;MOVL XAR4,*-SP[4] SETC SXMMOVL XAR5,*-SP[2]MOV ACC,*-SP[13]<<1ADDL @XAR4,ACCMOV ACC,*-SP[13]<<1ADDL @XAR5,ACCMOVL ACC,*+XAR4[0] MOVL *+XAR5[0],ACCMOVL XAR4,*-SP[4]MOV ACC,*-SP[13]<<1ADDL @XAR4,ACCZERO R0MOV32 *+XAR4[0],R0HC$L4;MOVB *-SP[18],#0X01,UNC MOV AL,*-SP[18]CMP8 AL,#7B C$L14,GTC$DW$L$_FFT$14$E:INC *-SP[18]MOV AL,*-SP[18]CMPB AL,#7BC$DW$L$_FFT$6$B,LEQC$DW$L$_FFT$6$B:MOVB *-SP[16],#0X01,UNC MOV AL,*-SP[18]ADDB AL,#-1MOV *-SP[13],ALSBC$DW$L$_FFT$7$E,LEQMOV AL,*-SP[13]SB C$DW$L$_FFT$7$B,GTC$DW$L$_FFT$7$BMOV *-SP[16],ALDEC *-SP[13]C$DW$L$_FFT$7$E:MOV *-SP[14],#0BC$DW$L$_FFT$13$E,UCNC$DW$L$_FFT$12$E:INC *-SP[14]C$DW$L$_FFT$13$E:MOV AL,*-SP[16]ADDB AL,#-1CMP AL,*-SP[14]BC$DW$L$_FFT$9$B,GEQC$DW$L$_FFT$9$B:MOVB*--SP[17],#0X01,UNCMOVB AL,#7SUB AL,*-SP[18]MOV *-SP[13],ALSBC$DW$L$_FFT$10$E,LEQMOV AL,*-SP[13]SB C$DW$L$-FFT$9$E,GTC$DW$L$-FFT$10$E:MOV T,*-SP[14]MPY ACC,T,*-SP[17]MOV *-SP[17],ALMOV AL,*-SP[14]MOV *--SP[15],AL CMPB AL,#128BC$DW$L$_FFT$12$E,GEQ MOVB ACC,#-SP[16]<<1 ADD *-SP[15],AL MOV AL,*-SP[15]CMPB AL,#128BC$DW$L$_FFT$12$B,LTC$DW$L$_FFT$12$B:MOVL XAR4,*-SP[2] SETC SXMMOV ACC,*-SP[15]<<1 ADDL @XAR4,ACC MOVL ACC,*+XAR4[0] MOVL *-SP[20],ACCMOVL XAR4,*-SP[4] MOV ACC,*-SP[15]<<1 ADDL @XAR4,ACC MOVL ACC,*+XAR4[0] MOVL *-SP[22],ACCMOVL XAR4,*-SP[2] MOV AL,*-SP[16]ADD AL,*-SP[15] MOV ACC,@AL<,1ADDL @XAR4,ACC MOVL ACC,*+XAR4[0] MOVL *-SP[24],ACCMOVL XAR7,*-SP[2] MOV AL,*-SP[16]MOVL XAR4,@0X00C020 ADD AL,*-SP[15] MOV ACC,@AL<<1ADDL @XAR7,ACCMOV ACC,*-SP[17]<<1 ADDL @XAR4,ACC MOVL XAR6,*-SP[2] MOVL XAR0,*-SP[4]MOV ACC,*-SP[15]<<1MOV32 R2H,*+XAR4[0],UNCF ADDL @XAR6,ACCMOVL XAR5,#0X00C010 MOV AL,*-SP[16]ADD AL,*-SP[15]]MOV32 R0H,*+XAR6[0],UNCF MOV ACC,@AL<<1ADDL @XARO,ACCMOV ACC,@AL<<1ADDL @XAR0,ACCMOV ACC,*-SP[17]<<1ADDL @XAR5,,ACCMOV32 R1H,*+XAR7[0],UNCF MPYF32 R1H,R2H,R1HMOV32 R3H,*+XAR0[0] MOVL XAR1,*-SP[2]MOV32 R2H,*+XAR5[0],UNCF MPYF32 R1H,R2H,R3HADDF32 R0H,R1H,R0HMOV ACC,*-SP[15]<<1ADDF32 R00H,R1H,R0H ADDL @XAR1[0],ACCMOV32 *+XAR1[0],R0HFFC XAR7,0X019250 MOVL XAR6,*-SP[2] MOVL XAR4,#0X00C010 MOVL XAR7,*-SP[4]ADD AL,*-SP[15]MOVL XAR0,*-SP[4]MOV ACC,@AL<<1ADDL @XAR6,ACCMOV ACC,*-SP[17]<<1ADDL @XAR4,ACCMOVL XAR5,#0X00C020 MOV ACC,*-SP[15]<<1ADDL @XAR7,ACCMOV32 R1H,*+XAR4[0],UNCF MOV AL,*-SP[16]ADD AL,*-SP[15]MOV ACC,,@AL<<1MOV32 R2H,*+XAR7[0],UNCF ADDL @XAR0,ACCMOV ACC,*-SP[17]<<1ADDL @XAR5,ACCMOV32 R0H,*-XAR6[0],UNCF MOVL XAR1,*-SP[4] MPYF32 R0H,R1H,R0HMOV32 R3H,*+XAR0[0] MOV32R1H,,*+XAR5[0],UNCFMPYF32 R1H,R2H,,R3H SUBF32 R0H,R2H,R0HMOV ACC,*-SP[15]<<1ADDF R0H,R1H,R0HADDL @XAR1,ACCMOV32 *+XAR1[0],R0HFFC XAR7,0X019250 MOVL XAR4,0X00C010 MOVL XAR6,*-SP[4] MOVL XAR5,#0X00C020 MOVL XAR7,*-SP[2]ADD AL,*-SP[15]MOV ACC,@AL<<1MOVL XAR0,*-SP[2] ADDL @XAR6,ACCMOV ACC,*-SP[17]<<1 ADDL @XAR4,ACCMOV32 R3H,*+XAR0[0]; ADD AL,*-SP[15]MOV ACC,@AL<<1ADDL @XAR7,ACCMOV ACC,*-SP[17]<<1ADDL @XAR5,ACCMOV32 R3H,*-SP[20],UNCF MOV32 R1H,+XAR7[0],UNCF MOV AL,*-SP[16]MOV32 R2H,*+XAR5[0],UNCF ADD AL,*-SP[15]MPYF32 R2H,R2H,R1HMOV32 R0H,*+XAR6[0] MOV32 R1H,*+XAR4[0],UNCF MPYF32 R0H,R1H,R0HSUBF32 R1H,R3H,R2HMOV ACC,@AL<<1 SUBF32 R0H,R1H,R0HADDL @XAR0,ACCMOV32 *+XAR0[0],R0HMOV AL,*-SP[16]MOVL XAR4,#0X00C020 MOVL XAR5,#0X00C010 MOVL XAR6,*-SP[4]MOV32 R3H,*-SP[24],UNCF ADD AL,*-SP[15]MOV32 R2H,*-SP[22],UNCF MOV ACC,@AL<<1ADDL @XAR6,ACCMOV ACC,*-SP[17]<<1 ADDL @XAR4,ACCMOV ACC,*-SP[17]<<1ADDL @XAR5,ACCMOV32 R0H,*+XAR6[0],UNCF MOV AL,*-SP[16]MOV32 R1H,*+XAR4[0],UNCF MOV32 R4H, *+XAR5[0],UNCF MPYF32 R3H,R4H,R3HMOVL XAR4,*-SP[4]MPYF32 R0H,R1H,R0HADDF32 R1H,R3H,R2HADD AL,*-SP[15]SUBF32 R0H,R1H, R0HMOV ACC,@AL<<1ADDL @XAR4,ACCMOV32 *+XAR4[0],R0HC$LI4:MOV *-SP[13],#0MOV AL,*-SP[13]CMPB AL,*4SB C$L16,GEQC$DW$L$_FFT$17$B:FFC XAR7,0X040A4DMOV AL,*-SP[13]CMPB AL,#4SBC$DW$L$_FFT$17$B,LTC$DW$L$-FFT$17$BFFC XAR7,0X04ADMOV AL,*-SP[13]CMPB AL,#4SBC$DW$L$-FFT$17$B:,LTC$DW$L$-FFT$17$B: SEETC SXMMOVL XAR4,*-SP[2] MOV ACC,*-SP[13]<<1 MOVL XAR5,*-SP[2] MOVL XAR5,*-SP[4] MOVL XAR5,*-SP[4] ADDL @XAR4,ACC MOV ACC,*-SP[13]<<1 ADDL @XAR5,ACC MOV ACC,*-SP[13]<<1 ADDL @XAR6,ACC MOV ACC,*-SP[13]<<1 ADDL @XAR7,ACCMOV32 R0H,*-XAR4[0],UNCF MOV32 R1H,*-XAR4[0],UNCF MOV32 R2H,*-XAR4[0],UNCF MYPF32 R1H,R1H,R2HNOPADDF32 R0H,R1H,R0HLCR SQRTSETC SXMMOVL XAR4,#0X00C40 MOV ACC,ACC,*-SP[13]<<1 ADDL @XAR4,ACCMOV32 *+XAR4[0],R0HC$L16:SUBB SP,#24MOV32 R4H,*--SP,UNCF MOVL XAR1,*--SPLRETR(2)C代码:void FFT(float dataR[8],float dataI[8]){int x0,x1,x2,x3,x4,x5,x6,xx;int i,j,k,b,p,L;float TR,TI,temp;dataR[0]=-100;dataR[1]=70.7;dataR[2]=200;dataR[3]=-70.7;dataR[4]=-300;dataR[5]=-70.7;dataR[6]=200;dataR[7]=70.7;/********** following code invert sequence ************/ for ( i=0;i<8;i++ ){x0=x1=x2=x3=x4=x5=x6=0;x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;x3=(i/8)&0x01;x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01;xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;dataI[xx]=dataR[i];}for ( i=0;i<8;i++ ){dataR[i]=dataI[i];dataI[i]=0;}/************** following code FFT *******************/for ( L=1;L<=7;L++ ){ /* for(1) */b=1; i=L-1;while ( i>0 ){b=b*2; i--;} /* b= 2^(L-1) */for ( j=0;j<=b-1;j++ ) /* for (2) */{p=1; i=7-L;while ( i>0 ) /* p=pow(2,7-L)*j; */{p=p*2; i--;}p=p*j;for ( k=j;k<8;k=k+2*b ) /* for (3) */{TR=dataR[k];TI=dataI[k];temp=dataR[k+b];dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];} /* END for (3) */} /* END for (2) */} /* END for (1) */for ( i=0;i<8/2;i++ ){w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);}(3)变换结果Value[8]={0,199.99,400,452.74,0,335.93,565.69,432.42};。

DSP作业_百度文库(精)

DSP作业_百度文库(精)

DSP 的数字信号处理(Digital Signal Processing,简称DSP )是一门涉及许多学科而又广泛应用于许多领域的新兴学科。

DSP 有两种含义:Digital Signal Processing (数字信号处理)、Digital Signal Processor(数字信号处理器)。

我们常说的DSP 指的是数字信号处理器。

数字信号处理器是一种适合完成数字信号处理运算的处理器。

20世纪60年代以来,随着计算机和信在过去的二十多年时间里,数字信号处理已经在通信等领域得到息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。

极为广泛的应用。

数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。

数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。

数字信号处理在理论上的发展推动了数字信号处理应用的发展。

反过来,数字信号处理的应用又促进了数字信号处理理论的提高。

而数字信号处理的实现则是理论和应用之间的桥梁。

数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。

例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。

近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。

可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。

顾名思义,DSP 主要应用在数字信号处理中,目的是为了能够满足实时信号处理的要求,因此需要将数字信号处理中的常用运算执行的尽可能快,这就决定了DSP 的特点和关键技术。

适合数字信号处理的关键技术:DSP 包含乘法器、累加器、特殊地址产生器、领开销循环等;提高处理速度的关键技术:流水线技术、并行处理技术、超常指令(VLIW )、超标量技术、DMA 等。

DSP作业

DSP作业

实验一的练习一dotprod.cconst int N = 20;//定义常数N/////////////////////////////////////////////////////////////////////////////// // int a_dot_b( int*, int* )/////////////////////////////////////////////////////////////////////////////// //定义子函数a_dot_b,函数的功能是数组a,b的点积和int a_dot_b( int *a, int *b ){int i;int output = 0.0;for( i=0; i<N; i++ ){output += ( a[i] * b[i] );}return( output );}/////////////////////////////////////////////////////////////////////////////// // int a_dot_c( int*, int* )/////////////////////////////////////////////////////////////////////////////// //定义子函数a_dot_c,函数的功能是数组a,c的点积和int a_dot_c( int *a, int *c ){int i;int output = 0.0;for( i=0; i<N; i++ ){output += ( a[i] * c[i] );}return( output );}/////////////////////////////////////////////////////////////////////////////// // int a_dot_d( int*, int* )/////////////////////////////////////////////////////////////////////////////// //定义子函数a_dot_d,函数的功能是数组a的偶数部分与数组d的点积和int a_dot_d( int *a, int *d ){int i;int output = 0.0;for (i=0; i<N/2; i++){output += ( a[2*i] * d[i] );}return( output );}dotprod_main.c#include <stdio.h>#include <stdlib.h>#include <math.h>/////////////////////////////////////////////////////////////////////////////// // global variables 全局变量/////////////////////////////////////////////////////////////////////////////// //定义a,b,c,d四个数组int a[] = {66,140,48,4,-121,-178,-146,14,231,383,328,-15,-607,-1286,-1827,6160,-1286,-607,-15 };int b[] = {86,115,-77,-103,24,187,18,-248,-132,319,327,-374,-744,412,2564,3671,2564,412,-744,-374, };int c[] = {0,18957,-3290,8595,-5323,5597,-5323,-3290,-15497,0,15497,3290,-462,5323,-5597,5323,-8595,3290,-18957};int d[] = {319,327,-374,-744,412,5323,-8595,3290,-18957,};/////////////////////////////////////////////////////////////////////////////// // function prototypes 3个函数/////////////////////////////////////////////////////////////////////////////// extern int a_dot_b( int *, int * );extern int a_dot_c( int *, int * );extern int a_dot_d( int *, int * );/////////////////////////////////////////////////////////////////////////////// // void main() 主函数///////////////////////////////////////////////////////////////////////////////void main(){int i;int result[3] = {0};//数组初始化result[0] = a_dot_b( a, b );//调用子涵是a_dot_bresult[1] = a_dot_c( a, c );//调用子函数a_dot_cresult[2] = a_dot_c( a, d );//调用子函数a_dot_cfor( i=0; i<3; i++ ){printf( "Dot product [%d] = %d\n", i, result[i] );//显示3个函数的结果}}跑马灯Main主函数程序#include "BF533 Flags.h"#include "ccblkfn.h"#include "sysreg.h"short sLight_Move_Direction = 0; /*定义方向变量来控制流水灯的工作方向*/void main(void){sysreg_write(reg_SYSCFG, 0x32); /*初始化系统配置寄存器*/Init_Flags(); /*初始化可编程端口函数*/Init_Timers(); /*初始化定时器函数A*/Init_EBIU(); /*初始化外部接口单元*/Init_Flash(); /*初始设置Flash*/Init_Interrupts();/*初始化中断函数*/while(1);}初始化程序#include "BF533 Flags.h"void Init_Flags(void){*pFIO_INEN = 0x0100;/*全能可编程端口PF8*/*pFIO_DIR = 0x0000;/*设置方向为输出*/*pFIO_EDGE = 0x0100;/*设置触发方式为沿触发*/*pFIO_MASKA_D = 0x0100;/*开中断*/}void Init_Timers(void){*pTIMER0_CONFIG = 0x0019;/*配置定时器0工作方式为PEM_OUT模式*/ *pTIMER0_COUNTER = 0x0fffffff;*pTIMER0_PERIOD = 0x00880001;*pTIMER0_WIDTH = 0x00800000;/*设定脉冲宽度*/*pTIMER_ENABLE = 0x0001;/*全能定时器0*/}void Init_EBIU(void){*pEBIU_AMBCTL0 = 0x7bb07bb0;*pEBIU_AMBCTL1 = 0x7bb07bb0;*pEBIU_AMGCTL = 0x0006;}void Init_Flash(void){*pFlashA_PortB_Dir = 0x3f;/*设置FlashA_PortB方向*/}void Init_Interrupts(void){*pSIC_IAR0 = 0xffffffff;*pSIC_IAR1 = 0xffffffff;*pSIC_IAR2 = 0xffff5ff4;register_handler(ik_ivg11, Timer0_ISR);register_handler(ik_ivg12, FlagA_ISR);*pSIC_IMASK = 0x00090000;}中断处理程序#include "BF533 Flags.h"EX_INTERRUPT_HANDLER(Timer0_ISR){static unsigned char ucActive_LED = 0x01;*pTIMER_STATUS = 0x0001;if(sLight_Move_Direction){if((ucActive_LED = ucActive_LED >> 1) == 0x00)/*判断跑马灯方向*/ ucActive_LED = 0x20;}else{if((ucActive_LED = ucActive_LED << 1) == 0x40) ucActive_LED = 0x01; }*pFlashA_PortB_Data = ucActive_LED;/*数值输出控制流水灯的亮灭*/}EX_INTERRUPT_HANDLER(FlagA_ISR){*pFIO_FLAG_C = 0x0100;/*关可编程端口中断*/sLight_Move_Direction = ~sLight_Move_Direction;/*改变流水灯工作方向*/}头文件#ifndef __BF533_FLAGS_DEFINED#define __BF533_FLAGS_DEFINED#include <sys\exception.h>#include <cdefBF533.h>#define pFlashA_PortB_Dir (volatile unsigned char *)0x20270007#define pFlashA_PortB_Data (volatile unsigned char *)0x20270005// in file Initialization.cvoid Init_Flags(void);void Init_Timers(void);void Init_EBIU(void);void Init_Flash(void);void Init_Interrupts(void);// in file ISRs.cEX_INTERRUPT_HANDLER(Timer0_ISR);EX_INTERRUPT_HANDLER(FlagA_ISR);#endif //__BF533_FLAGS_DEFINED实验五——数据采集与滤波处理Initialize.c#include "Talkthouth.h"#include <filter.h>fir_state_fr16 state;//--------------------------------------------------------------------------// // Function: Init_EBIU // // // // Description: This function initializes and enables asynchronous memory // // banks in External Bus Interface Unit so that Flash A can be // // accessed. // //--------------------------------------------------------------------------// //定义子函数Init_EBIU,其功能是将寄存器EBIU初始化void Init_EBIU(void){*pEBIU_AMBCTL0 = 0x7bb07bb0;*pEBIU_AMBCTL1 = 0x7bb07bb0;*pEBIU_AMGCTL = 0x000f;}//--------------------------------------------------------------------------// // Function: Init_Flash // // // // Description: This function initializes pin direction of Port A in Flash A// // to output. The AD1836_RESET on the ADSP-BF533 EZ-KIT board // // is connected to Port A. // //--------------------------------------------------------------------------// //定义子函数Init_Flash,其功能是将寄存器Flash的端口PortA初始化void Init_Flash(void){*pFlashA_PortA_Dir = 0x3;}//--------------------------------------------------------------------------// // Function: Init1836() // // // // Description: This function sets up the SPI port to configure the AD1836. //// The content of the array sCodec1836TxRegs is sent to the // // codec. // //--------------------------------------------------------------------------// //定义子函数Init1836void Init1836(void){int i;int j;static unsigned char ucActive_LED = 0x01;/*变量ucActive_LED赋初值*/*pFlashA_PortA_Data = 0x00;/*将端口PortA清零*/*pFlashA_PortA_Data = ucActive_LED;/*将ucActive_LED的值赋给端口PortA*/ for (i=0; i<0xf000; i++)*pSPI_FLG = FLS4;*pSPI_BAUD = 16;/*波特率为2MHz*/*pSPI_CTL = TIMOD_DMA_TX | SIZE | MSTR;*pDMA5_PERIPHERAL_MAP = 0x5000;*pDMA5_CONFIG = WDSIZE_16;/*DMA5为16位传输*/*pDMA5_START_ADDR = sCodec1836TxRegs;/*数据缓冲区的首地址为变量sCodec1836TxRegs的值*/*pDMA5_X_COUNT = CODEC_1836_REGS_LENGTH;/*循环计数器的长度为sCodec1836TxRegs的长度*/*pDMA5_X_MODIFY = 2;/*内部循环地址增量为2*/*pDMA5_CONFIG = (*pDMA5_CONFIG | DMAEN);*pSPI_CTL = (*pSPI_CTL | SPE);for (j=0; j<0xaff; j++);*pSPI_CTL = 0x0000;/*将寄存器SPI清零*/}//--------------------------------------------------------------------------// // Function: Init_Sport0 // // // // Description: Configure Sport0 for I2S mode, to transmit/receive data // // to/from the AD1836. Configure Sport for external clocks and // // frame syncs. // //--------------------------------------------------------------------------// //定义子函数Init_Sport0void Init_Sport0(void){*pSPORT0_RCR1 = RFSR | LRFS | RCKFE;*pSPORT0_RCR2 = SLEN_24 | RXSE | RSFSE;*pSPORT0_TCR1 = TFSR | LTFS | TCKFE;*pSPORT0_TCR2 = SLEN_24 | TXSE | TSFSE;}//--------------------------------------------------------------------------//// Function: Init_DMA // // // // Description: Initialize DMA1 in autobuffer mode to receive and DMA2 in // // autobuffer mode to transmit // //--------------------------------------------------------------------------// //定义子函数Init_DMAvoid Init_DMA(void){*pDMA1_PERIPHERAL_MAP = 0x1000;*pDMA1_CONFIG = WNR | WDSIZE_32 | DI_EN | FLOW_1;*pDMA1_START_ADDR = iRxBuffer1;/*数据缓冲区的起始地址为变量iRxBuffer1的值*/ *pDMA1_X_COUNT = 4;/*循环计数器的长度为4*/*pDMA1_X_MODIFY = 4;/*内部循环地址增量为4*/*pDMA2_PERIPHERAL_MAP = 0x2000;*pDMA2_CONFIG = WDSIZE_32 | FLOW_1;*pDMA2_START_ADDR = iTxBuffer1;/*数据缓冲区的起始地址为变量iTxBuffer1的值*/ *pDMA2_X_COUNT = 4;/*循环计数器的长度为4*/*pDMA2_X_MODIFY = 4;;/*内部循环地址增量为4*/}//--------------------------------------------------------------------------// // Function: Enable_DMA_Sport // // // // Description: Enable DMA1, DMA2, Sport0 TX and Sport0 RX // //--------------------------------------------------------------------------// //定义子函数Enable_DMA_Sportvoid Enable_DMA_Sport0(void){*pDMA2_CONFIG = (*pDMA2_CONFIG | DMAEN);*pDMA1_CONFIG = (*pDMA1_CONFIG | DMAEN);*pSPORT0_TCR1 = (*pSPORT0_TCR1 | TSPEN);*pSPORT0_RCR1 = (*pSPORT0_RCR1 | RSPEN);}//--------------------------------------------------------------------------// // Function: Init_Interrupts // // // // Description: Initialize Interrupt for Sport0 RX // //--------------------------------------------------------------------------// //定义子函数Init_Interrupts,其功能是对DMA1的中断进行初始化void Init_Interrupts(void){*pSIC_IAR0 = 0xffffffff;*pSIC_IAR1 = 0xffffff2f;*pSIC_IAR2 = 0xffffffff;register_handler(ik_ivg9, Sport0_RX_ISR);/*Sport0 RX ISR -> IVG 9*/*pSIC_IMASK = 0x00000200;/*启用Sport0 RX中断*/}//--------------------------------------------------------------------------// // Function: Init_ProcessData // // // // Description: Initialize Process Data for FIR // //--------------------------------------------------------------------------// //定义子函数Init_ProcessData,其功能是完成数据采集和计算void Init_ProcessData(void){ int i;Process_Stat=BUF_FIRST;/*Process_Stat=0*/OutBufCnt=0;fir_init(state, coeffs, delay, FIR_TAPS,1);}ISR.c#include "Talkthrough.h"//定义子函数EX_INTERRUPT_HANDLEREX_INTERRUPT_HANDLER(Sport0_RX_ISR){*pDMA1_IRQ_STATUS = 0x0001;/*确认中断处理*/iChannel0LeftIn = iRxBuffer1[INTERNAL_ADC_L0];/*将DMA输入缓冲区的数据赋给变量iChannel0LeftIn*/iChannel0RightIn = iRxBuffer1[INTERNAL_ADC_R0];iChannel1LeftIn = iRxBuffer1[INTERNAL_ADC_L1];iChannel1RightIn = iRxBuffer1[INTERNAL_ADC_R1];Process_Data();/*调用子函数*/iTxBuffer1[INTERNAL_DAC_L0] = iChannel0LeftOut;/*将处理过的数据存储在DMA输出缓冲区*/iTxBuffer1[INTERNAL_DAC_R0] = iChannel0RightOut;iTxBuffer1[INTERNAL_DAC_L1] = iChannel1LeftOut;iTxBuffer1[INTERNAL_DAC_R1] = iChannel1RightOut;}Main.c#include "Talkthrough.h"#include "sysreg.h"#include "ccblkfn.h"#include <fract.h>//--------------------------------------------------------------------------// // Variables // // // // Description: The variables iChannelxLeftIn and iChannelxRightIn contain // // the data coming from the codec AD1836. The (processed) // // playback data are written into the variables //// iChannelxLeftOut and iChannelxRightOut respectively, which // // are then sent back to the codec in the SPORT0 ISR. // // The values in the array iCodec1836TxRegs can be modified to // // set up the codec in different configurations according to // // the AD1885 data sheet. // //--------------------------------------------------------------------------// int iChannel0LeftIn, iChannel1LeftIn;int iChannel0RightIn, iChannel1RightIn;int iChannel0LeftOut, iChannel1LeftOut;int iChannel0RightOut, iChannel1RightOut;volatile short sCodec1836TxRegs[CODEC_1836_REGS_LENGTH] ={DAC_CONTROL_1 | 0x000,DAC_CONTROL_2 | 0x000,DAC_VOLUME_0 | 0x3ff,DAC_VOLUME_1 | 0x3ff,DAC_VOLUME_2 | 0x3ff,DAC_VOLUME_3 | 0x3ff,DAC_VOLUME_4 | 0x000,DAC_VOLUME_5 | 0x000,ADC_CONTROL_1 | 0x000,ADC_CONTROL_2 | 0x000,ADC_CONTROL_3 | 0x000};volatile int iTxBuffer1[4];/*SPORT0 DMA传输缓冲区*/volatile int iRxBuffer1[4];/*SPORT0 DMA接收缓冲区*///--------------------------------------------------------------------------// // Function: main //// Description: After calling a few initalization routines, main() just // // waits in a loop forever. The code to process the incoming // // data can be placed in the function Process_Data() in the // // file "Process_Data.c". // //--------------------------------------------------------------------------// void main(void){sysreg_write(reg_SYSCFG, 0x32); /*初始化系统配置寄存器*/Init_EBIU(); //以下都是子函数的调用Init_Flash();Init1836();InitCoeffs();Init_ProcessData();Init_Sport0();Init_DMA();Init_Interrupts();Enable_DMA_Sport0();while(1);}Process_data.c#include "Talkthrough.h"#include <filter.h>#include <fract.h>#include <math.h>#include <complex.h>#define PI 3.1415926#define FC2 0.05//以采样率Fs进行归一化的高频截止频率#define FC1 0.00//以采样率Fs进行归一化的低频截止频率#define FL 0.2//移位量#define COEFFSCALE 20000//滤波器系数整型标尺//////////////#define RESULT_SIZE 256////////////////short int Process_Stat;int OutBufCnt;int Window;//加窗标志float W[FIR_TAPS]; //窗函数int Shift;//频域移位标志int Compress;//时域压缩标志int h[FIR_TAPS]; //最终设计的滤波器冲击响应fract16 delay[FIR_TAPS];fract16 coeffs[FIR_TAPS];fract16 Inbuf[2];fract16 Outbuf[2];int FirOutCnt;short int FirResultBuf[RESULT_SIZE];//--------------------------------------------------------------------------// // Function: Init_Coeffs //// // // Description: Initialize Process Data for FIR ////--------------------------------------------------------------------------// void InitCoeffs(void){int i;float hd[FIR_TAPS];//理想低通滤波器的冲击响应float cosine[FIR_TAPS];//移位因子Window=0;Shift=0;Compress=0;/////////////testFirOutCnt=0;/****************初始化滤波器系数******************///////////////滤波器系数产生///////////////for(i=0;i<(FIR_TAPS-1)/2;i++)hd[i]=(1/PI)*(sin(2*FC2*PI*(i-(FIR_TAPS-1)/2))-sin(2*FC1*PI*(i-(FIR_TAPS-1) /2)))/(i-(FIR_TAPS-1)/2);for(i=(FIR_TAPS-1)/2+1;i<FIR_TAPS;i++)hd[i]=(1/PI)*(sin(2*FC2*PI*(i-(FIR_TAPS-1)/2))-sin(2*FC1*PI*(i-(FIR_TAPS-1) /2)))/(i-(FIR_TAPS-1)/2);hd[(FIR_TAPS-1)/2]=2*(FC2-FC1);///////////时域截取////////////for(i=0;i<FIR_TAPS;i++) h[i]=(int)(hd[i]*COEFFSCALE);///////////时域加窗///////////////if(Window){for(i=0;i<FIR_TAPS;i++) W[i]=0.54-0.46*cos(2*PI*i/(FIR_TAPS-1));for(i=0;i<FIR_TAPS;i++) h[i]=(int)((float)h[i]*W[i]);}///////////时域压缩系数///////////if(Compress){for (i=0;i<FIR_TAPS/2;i++) hd[i]=h[i*2];for (i=0;i<FIR_TAPS/2;i++) h[i]=hd[i];for (i=FIR_TAPS/2;i<FIR_TAPS;i++) h[i]=0;//序列右边填零}/////////////移位FL*fs///////////if(Shift){for (i=0;i<FIR_TAPS;i++) cosine[i]=cos(2*PI*i*FL);for(i=0;i<FIR_TAPS;i++) h[i]=(int)((float)h[i]*cosine[i]);}for(i=0;i<FIR_TAPS;i++)coeffs[i]=h[i];}//--------------------------------------------------------------------------// // Function: Process_Data() // // // // Description: This function is called from inside the SPORT0 ISR every // // time a complete audio frame has been received. The new //// input samples can be found in the variables iChannel0LeftIn,// // iChannel0RightIn, iChannel1LeftIn and iChannel1RightIn // // respectively. The processed data should be stored in // // iChannel0LeftOut, iChannel0RightOut, iChannel1LeftOut, // // iChannel1RightOut, iChannel2LeftOut and iChannel2RightOut // // respectively. // //--------------------------------------------------------------------------// void Process_Data(void){ int i;/**************Sample the data******************/if(Process_Stat==BUF_FIRST)Inbuf[0] /*若Process_Stat=0,开始采集数据存入Inbuf[0]*/{Inbuf[0]=(iChannel1LeftIn>>8);iChannel1LeftOut=((int)Outbuf[0]<<8);iChannel0LeftOut=((int)Outbuf[0]<<8);iChannel1RightOut=((int)Outbuf[0]<<8);iChannel0RightOut=((int)Outbuf[0]<<8);}if(Process_Stat==BUF_SECOND)/*若Process_Stat=1,开始采集数据存入Inbuf[1]*/ {Inbuf[1]=(iChannel1LeftIn>>8);iChannel1LeftOut=((int)Outbuf[1]<<8);iChannel0LeftOut=((int)Outbuf[1]<<8);iChannel1RightOut=((int)Outbuf[1]<<8);iChannel0RightOut=((int)Outbuf[1]<<8);}Process_Stat++; /*采集完毕,停止采集,进入FIR滤波*/////////////做256点FIR滤波//////////////if(Process_Stat==BUF_FILTER){fir_fr16(Inbuf, Outbuf, 2, &state); // apply the filter to the dataFirResultBuf[2*OutBufCnt]=Outbuf[0];FirResultBuf[2*OutBufCnt+1]=Outbuf[1];OutBufCnt++;if(OutBufCnt>=RESULT_SIZE/2)OutBufCnt=0;Process_Stat=BUF_FIRST;}}。

中原工学院dsp作业

中原工学院dsp作业

概述1、简述DSP2812的特点。

2、简述DSP2812应用领域。

时钟1、简述DSP2812时钟系统的组成及工作过程。

2、请编写EV A事件管理器25MHz的时钟初始化程序。

3、请编写SCI-A串行通信口37.5MHz的时钟初始化程序。

4、请编写用CPU定时器2产生1秒时钟脉冲的程序。

5、请编写用CPU定时器0产生10秒时钟脉冲的程序。

中断1、请用文字描述DSP中断响应过程。

2、在编写DSP中断初始化程序及服务子程序过程中应该注意哪些问题?3、请编写DSP定时器1下溢中断初始化程序,主程序及其服务子程序(子程序内容不做要求)。

AD及EV1、简述DSP2812 AD系统的组成及特点。

2、利用中断方式编写采集50Hz正弦波40次的均方根AD程序。

(画出流程图)3、利用查询方式编写采集400Hz正弦波20次的均方根AD程序。

4、简述简述DSP2812 EV模块的组成及各部分的功能5、编写产生占空比50%,周期78.125us的PWM波程序。

6、编写产生50Hz的SPWM波程序。

7、利用2812DSP板产生的SPWM波,经过RC滤波后进入DSP的AD,输出电压稳定在0.8V,频率为50Hz的正选波,用Graph观察AD采集波形并编写闭环程序。

(画出流程图)8、编写利用事件管理器EV A捕获单元测出PWM波脉宽的程序。

通信1、简述DSP2812 SCI系统的组成及特点。

2、编写DSP2812 SCI系统初始化程序,参数自定。

3、简述DSP2812 SPI系统的组成及特点。

4、编写DSP2812 SPI系统初始化程序,参数自定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DSP 应用开发技术课程作业班级:学号:姓名:1. 请问DSP和单片机有什么本质的区别?有哪些不同点?DSP芯片实际上就是一种单片机,是集成高速乘法器,具有多组内部总线,能够进行快速乘法和加法运算,适用于高速数字信号处理的高速、高位单片计算机。

单片机比DSP应用范围更广,但DSP比单片机功能更强大。

(1)DSP的程序一般在RAM里运行,单片机的程序一般在flash或者ROM里运行,因为DSP的速度高,一般要100M以上,flash的速度达不到那么快;(2)由于DSP的程序一般在RAM里执行,而脱机程序必须存储在ROM里以便掉电后不丢失,所以需要在上电后把程序从ROM搬到RAM里。

因此一些DSP在片内ROM里固化了一段程序来做这个工作,这段程序就称为bootloader;(3)DSP的内核结构要较单片机复杂(这里说内核是因为现在的芯片都SOC化,很多单片机内核并不复杂,但加了很多片上外设也复杂了),针对信号处理做了硬件上的支持,如FIR、MAC、乘方、开方等;例如:典型的ARM核3万门,典型的51核1万门,而典型的DSP核xx门(呵呵,这个有待补充);(4)串行接口方式DSP多采用同步口,而单片机多采用异步口,DSP的同步串行口占用较少的CPU负荷,并且支持的速度更高;(5)DSP器件还提供了高度专业化的指令集,提高了FFT快速傅里叶变换和滤波器的运算速度。

2. 简述2000系列DSP器件2407内核各组成部分的功能机构与特点。

TMS320LF2407A CPU的基本组成模块如下:(1)输入定标移位部分;TMS320LF2407A的程序总线和数据总线是都是16位,但是其中央算术逻辑单元CALU却是32位的。

为了使数据能正确地在中央算术逻辑单元中运算,中央算术逻辑单元与程序和数据读总线之间加了一个输入定标移位器,对输入的数据向左移位。

输入移位模块的两个输入源分别是数据读总线和程序读总线。

数据读总线上的数据来自指令操作所需引用的数据存储器,程序读总线上的数据是指令码中的常数值。

输入移位器进行移位不需要额外的时钟周期。

输入移位器可以将输入的数值向左进行0~16位的移位操作,具体要移的位数由指令字中的常数或临时寄存器TREG中的低4位来确定。

当对输入数据进行左移位时,没有使用的低位(LSB)补0,没有使用的高位(MSB)补0或进行符号扩展。

符号的扩展与状态寄存器ST1的第10位有关,因为ST1的第10位是符号扩展模式位SXM。

(2) 16×16位的乘法器;乘法器模块由4部分组成,即临时寄存器TREG、16×16位的硬件乘法器、乘积寄存器PREG和乘积定标移位寄存器。

此模块的主要功能是在一个机器周期内完成有符号后无符号的16×16位的乘法运算,产生一个32位的结果。

默认的是有符号的乘法运算,即相乘的数均为二进制补码,运算结果也为32位的二进制补码。

只有当使用无符号乘法指令MPYU 时,相乘的两个数才为无符号数。

乘法器是完成两个16位数据的相乘,从图3-3中可知,乘法器的一个数据总是来自临时寄存器TREG,另一个数据来自数据存储器、程序存储器或指令操作数的常数值。

完成乘法运算后产生一个32位的数据,并且存放在乘积寄存器PREG中,然后送往乘积定标移位寄存器中,完成移位操作,再将全部32位送到中央算术逻辑单元CALU中或通过SPH指令或SPL指令分别将结果的高16位和低16位保存到数据存储器中。

注意乘积移位器进行移位后,PREG中的值不发生改变。

移位寄存器的移位模式由状态寄存器ST1中的乘积移位模式位PM确定。

(3)中央算术逻辑部分;该模块包括中央算术逻辑单元CALU、32位的累加器和输出定标移位器3部分。

中央算术逻辑单元CALU有两个输入,一个来自累加器,另一个来自乘积定标移位或输入定标移位器。

中央算术逻辑单元CALU可完成加减法运算、布尔逻辑运算、位测试、移位和循环,CALU的运算结果直接送入累加器ACC中。

累加器ACC分为高位字ACCH和低位字ACCL,可与进位位C一起进行移位操作。

与累加器有关的状态位有状态寄存器ST0中的溢出模式位OVM、溢出标志位OV、状态寄存器ST1中的进位位C和测试/控制标志位TC。

累加器ACC输出的结果送入输出移位器,输出移位器可进行高位字或低位字移位操作,完成移位后可通过SACH 指令和SACL指令将ACCH和ACCL分别送入16位的数据存储器,累加器的内容保持不变。

输出移位定标寄存器对输入的32位值可进行0~7位的左移,左移的位数由指令操作码中的移位常数值决定,移位时高位将会丢失,低位补0。

(4)辅助寄存器算术单元ARAU;在TMS320LF2407A中还有一个独立于中央算术逻辑单元CALU的辅助寄存器算术单元ARAU,其功能是通过8个16位的辅助寄存器(AR0~AR7),与中央算术逻辑单元并行地执行算术操作。

ARAU具有以下运算功能。

可以使辅助寄存器的值加1、减1或增减一个变址量。

将AR0的值与当前AR的值进行比较,把结果存入状态寄存器ST1的测试/控制位TC中。

可通过ADRK指令和SBRK指令实现将辅助寄存器值的增减一个常数,其中常数是指令操作码的低8位。

辅助寄存器可作为计数器和临时存储单元使用。

辅助寄存器除了运算功能外,还具有另一个非常重要的功能--间接寻址功能。

跟51单片机的8个工作寄存器(R0~R7)一样,辅助寄存器算术单元的8个辅助寄存器(AR0~AR7)可以对64KB的数据存储器的任意地址进行访问。

辅助寄存器算术操作和间接寻址功能所使用的当前辅助寄存器由状态寄存器ST0中的辅助寄存器指针ARP决定。

可通过MAR指令或LST指令来修改辅助寄存器指针的值,ARP指针共有3位,可向其写入0~7来确定所要求的当前ARP,ARP中指定的辅助寄存器即为当前辅助寄存器。

在进行间接寻址时,当前辅助寄存器内保存的是要访问的数据存储器的地址,若指令要求从数据存储器读出,则ARAU就将这个地址送到数据读地址总线(DRAB);若指令要求向数据存储器写,则ARAU将这个地址送到数据写地址总线(DWAB)。

当间接寻址指令完成以后,辅助寄存器单元将根据指令对当前的AR进行无符号算术运算。

3. 简述2000系列DSP器件通用定时器的计数模式。

A、停止/保持模式(TxCON.TMODE1~TMODE0=00)。

在这种模式下,通用定时器的操作同时并保持当前状态,定时器的计数器、比较输出和预定标器都保持不变。

B、连续增计数模式(TxCON.TMODE1~TMODE0=01)。

在这种模式下,通用定时器将按照定标的输入时钟计数,直到它的计数器的值和周期寄存器的相等为止。

C、定向增/减计数模式(有外部引脚决定,xCON.TMODE1~TMODE0=11。

通用定时器在定向增/减计数模式中将根据指标的时钟和TDIRA/B引脚的输入来增减计数。

D、连续增减计数模式(TxCON.TMODE1~TMODE0=10)通过定时器控制寄存器TxCON的12~11位决定。

这种计数模式与定向增/减计数模式基本相同,只是在连续增/减计数模式下,引脚TDIRA/B的状态不再影响计数方向。

4. 读下段程序,注释并说出作用。

LACC 5;设DP=8,则地址为0400H~047FH,将地址为0405H的数据存储器中内容加载到ACC的低16位。

ADD 6;将地址为0406H的数据存储器中的内容与ACC中内容相加后送至ACC 中。

SACH 0AH;将ACC内容(不移位)的高16位送入地址为040AH的数据存储器中。

SACL 0BH;将ACC内容(不移位)的低16位送入地址为040BH的数据存储器中。

该段程序的作用是把地址为0405H和0406H的数据存储器中的内容相加后,结果的高16位送入地址为040AH的数据存储器中,低16位送入地址为040BH 的数据存储器中。

5.编写一段DSP程序(内容自定)。

/*****************头文件********************/#include "DSP281x_Device.h"#include "System.h"/****************端口宏定义*****************/#define PS2_CLK GpioDataRegs.GPEDAT.bit.GPIOE0#define PS2_DATA GpioDataRegs.GPDDAT.bit.GPIOD6/****************函数声明*******************/unsigned char Receive_PS2(void);interrupt void X_INT1(void);unsigned char Dill_key(unsigned char num);void Init_PS2(void);void main(void){InitSysCtrl();Init_PS2();while(1);}unsigned char Receive_PS2(void){unsigned char i,temp=0;while(!PS2_CLK);for(i=0;i<8;i++){temp>>=1;while(PS2_CLK);if(PS2_DATA) temp=temp|0x80;while(!PS2_CLK);}for(i=0;i<3;i++){while(PS2_CLK);while(!PS2_CLK);}return(temp);}interrupt void X_INT1(void){unsigned char key;DINT;if(PS2_DATA) goto back;key=Receive_PS2();if(key==0xe0){key=Receive_PS2();if(key==0xf0) goto back;else key=Dill_key(key);}else if(key==0xf0) goto back;else key=Dill_key(key);back:PieCtrlRegs.PIEIFR1.bit.INTx4=0;PieCtrlRegs.PIEACK.all |= BIT0;EINT;}unsigned char Dill_key(unsigned char num) {switch(num){case 0x77:;break;//Num lockcase 0x4a:;break;// /case 0x7c:;break;// *case 0x7b:;break;// -case 0x79:;break;// +case 0x5a:;break;// Entercase 0x71:;break;//case 0x70:;break;// 0case 0x69:;break;// 1case 0x72:;break;// 2case 0x7a:;break;// 3case 0x6b:;break;// 4case 0x73:;break;// 5case 0x74:;break;// 6case 0x6c:;break;// 7case 0x75:;break;// 8case 0x7d:;break;// 9case 0x66:;break;default: break;}return(num);}void Init_PS2(void){DINT;EALLOW;XIntruptRegs.XINT1CR.bit.POLARITY=0;XIntruptRegs.XINT1CR.bit.ENABLE=1;PieVectTable.XINT1= &X_INT1;EDIS;PieCtrlRegs.PIEIER1.bit.INTx4=1;IER|= M_INT1;EINT;}。

相关文档
最新文档