1第一章绪论1什么是DSP?答:DSP是数字信号处理器(DigitalSignalProcessor),是特别适合于实现各种数字信号处理运算的微处理器。主要应用场合:(1)数字信号处理运算,(2)通信,(3)网络控制及传输设备,(4)语音处理,(5)电机和机器人控制,(6)激光打印机、扫描仪和复印机,(7)自动测试诊断设备及智能仪器仪表、虚拟仪器,(8)图像处理,(9)军事,(10)自动控制等。2.DSP芯片的特点有哪些?答:(1)采用改进的哈佛结构;(2)采用流水线技术;(4)配有专用的硬件乘法-累加器;(5)具有特殊的DSP指令;(6)快速的指令周期;(7)硬件配置强;(8).支持多处理器结构;(9)省电管理和低功耗。3.DSP采用改进的哈佛总线结构,画出改进的哈佛总线结构示意图。答:改进的哈佛结构如下:程序存储器CPU数据存储器ABDBABDB改进的哈佛结构4.DSP中由哪些地址和数据总线组成多总线结构?答:存储器接口有三条地址总线:(1)PAB(ProgramAddressBus(22))程序地址总线,用来传送来自程序空间的读写地址。PAB是一个22位的总线。(2)DRAB(Data-readAddressBus(32))数据读地址总线。32位的DRAB用来传送来自数据空间的读地址。(3)DWAB(Data-writeAddressBus(32))数据写地址总线。32位的DWAB用来传送来自数据空间的写地址。存储器接口还有三条数据总线:(1)PRDB(Program-readDataBus(32))程序读数据总线,PRDB在读取程序空间时用来传送指令或数据。(2)DRDB(Data-readDataBus(32))数据读数据总线。32位的DRDB在读取数据空间时用来传送数据。(3)DWDB(Data/Program-writeDataBus(32))数据/程序写数据总线。32位的DWDB在对数据空间写数据时用来传送数据。5.DSP芯片的选型一般是从哪几个方面进行考虑?答:并不存在最好的DSP,正确的DSP选择取决于具体的应用场合。没有任何DSP能够满足所有的,或者大多数应用的需要。对于一种应用来说是好的选择,对另外的应用则可能是很差的选择。2一般从数据格式、数据宽度、速度、存储器的安排、开发的难易程度、功耗和电源管理、器件的封装等方面考虑选择DSP。6.简述TI公司的DSP三大平台和它们各自的应用场合。答:(1)最佳控制:TMS320C2000DSP平台TMS320C2000DSP平台将各种高级数字控制功能集成于一颗IC上。强大的数据处理和控制能力可大幅提高应用效率和降低功耗。(2)最低功耗:TMS320C5000DSP平台TMS320C5000DSP专门针对消费类数字市场而设计。(3)最佳处理能力:TMS320C6000DSP平台TMS320C6000DSP是处理能力最强,易于采用高级语言编程的DSP。定点及浮点DSP市场定位在网络交换,图像处理,雷达信号处理等高端应用领域。7.DSP芯片发展趋势应该朝着哪些方面发展?答:(1)系统级集成DSP是潮流(2)DSP和微处理器的融合(3)DSP和FPGA的融合(4)可编程DSP是主导产品(5)追求更高的运算速度(6)定点DSP是主流第二章CCS软件应用基础1如何对CCS3.3的单处理器目标系统进行配置?答:(1)运行桌面上的CodeComposerStudioSetup应用程序,出现系统配置窗口。(2)在配置前可以通过选择File-Removeall清除以前的设置。(3)在AvailableFactoryBoards栏中选择需要调试的目标板或仿真器。为了方便找到相应的硬件配置,可以在右上侧的过滤栏中根据需用的处理器所属系列(Family)、处理器平台类型(Platform)、字节模式(Endian)等进行过滤。确定相应的配置后直接拖到左侧的SystemConfiguration栏中,或者选中需要的目标配置文件后单击下面的Add按钮添加,如果AvailableFactoryBoards栏中不存在用户需要的标准配置,可以自己创建配置文件进行配置。(4)选择SystemConfiguration栏中的系统硬件,单击右键并选择属性,可以查看和编辑相关属性,根据需要可以针对不同的选型作适当的调整。(5)选择系统平台下的CPU,单击右键并选择属性,可以查看和编辑CPU的属性文件。主要包括的GEL文件、主/从设置、启动模式(实时或停止模式)等。(6)单击Save衣(luit按钮保存配置并退出配置程序,下次选用相同的平台开发时不需要重新配置。(7)退出配置程序后弹出CodeComposerStudioIDE启动的判断按钮,选择Yes即可运行CCS。如果配置的是硬件平台,在运行CCSIDE之前,应该检查硬件系统的莽接状况和目标系统的供电情况。2简单程序的开发步骤有哪些?答:(1)如果已经在C:\CCStudio_v3.1目录下安装了CCS开发环境,则在C:\CCStudio_v3.1\MyProjects目录下创建开发文件夹sinewave。(2)C:\CCStudio_v3.1\tutorial\dsk2812\sinewave目录下的.c,.cmd以及.h文件复制到创建的目录,然后运行CCS。3(3)依据工程的创建方法,创建新的工程(参考2.4.1小节)(4)选择Project-AddFilestoProiect,添加.C、cmd以及rt_2800m1.lib文件。(5)双击项目管理窗口下的sine.c一文件浏览程序源代码,单击RebuildAll编译程序。(6)编译、链接通过后,CCS下面的状态输出窗口将显示相应的状态。(7)选择File-LoadProgram装载应用程序。(8)运行程序。3DSP探针的作用有哪些?答:探针主要用来从PC机的数据文件中读取数据,提供给算法或其他程序使用,从而有利于DSP的算法开发或参考数据的生成。可以使用探针完成下列任务:(1)从主机的数据文件中读取数据,然后传送到目标处理器的存储缓冲,以便算法程序使用主机的数据;(2)从目标处理器的存储缓冲中读取数据并存放到PC机的指定文件中,以便进一步分析;(3)刷新带有数据的图形窗口。第三章C/C++程序编写基础1.TMS320X28xx采用C/C++编程时,采用位定义和寄存器文件结构方法有什么好处?答:(1)TI公司为用户提供写好的文件结构体和位区定义,可以在其网站下载。C281xC/C++HeaderFilesandPeripheralExamples(SPRC097)C280x,C2801xC/C++HeaderFilesandPeripheralExamples(SPRCl91C2804xC/C++HeaderFilesandPeripheralExamples(SPRC324)(2)使用位区方便编写代码,可读性强,易升级。(3)位区定义可以充分利用CodeComposerStudio编辑器的自动代码输入功能,方便用户输入代码。当使用寄存器文件结构和位区时,很多变量名很长,难于记忆而且输入非常困难。当输入代码时,CodeComposerStudio编辑器提供可能的结构体或位区列表,这样用户可以很容易地使用输入编辑程序代码。CPU定时器的TCR寄存器自动输入。(4)方便CodeComposerStudio的Watch窗口观察变量。用户可以在CodeComposerStudio的Watch窗口增加扩展寄存器文件结构体,直接观察相应的位区定义的参数值,2.什么是定点数据,什么是浮点数据?TMS320X28xx是定点还是浮点处理器?它是如何实现浮点数据处理的?答:小数点固定的数据称为定点数据,小数点浮动的数据称为发浮点数据,TMS320X28xx是定点处理器,它通过TMS320X28xxIqmath库实现浮点处理。第6章TMS320F2812的时钟和看门狗1.如果要使系统时钟为输入时钟的5倍频,同时使能所有的外设时钟,将高速外设的时钟设置为系统时钟的1/10,低速外设的时钟设置为系统时钟的1/12,应该如何设置相关的寄存器?答:PLLCR=0x000A;PCLKCR=0xFFFF,HISPCP=0x0005,LOSPCP=0x0006第7章可编程数字量通用I/O1.八个帖片LED由GPIOA0-GPIOA7驱动,画出电路图,编写C语言源程序,实现如下功能:4(1)使八个二极管全亮。(2)使八个二极管一半亮(GPIOA0-GPIOA3所接二极管亮),一半暗(GPIOA4-GPIOA7所接二极管暗)。答:电路图如下:(1)使八个二极管全亮,程序如下:#includeDSP28_Device.hvoidIOinit(){EALLOW;对保护空间的访问使能GpioMuxRegs.GPAMUX.all=0xFF00;将GPIOA0~GPIOA7配置为一般I/O端口,GpioMuxRegs.GPADIR.all=0x00FF;将GPIOA0~GPIOA7配置为输出EDIS;禁止对保护空间的访问}voidmain(void){InitSysCtrl();//系统初始化子程序,在DSP28_sysctrl.c中DINT;//关闭总中断IER=0x0000;//关闭外设中断IFR=0x0000;//清中断标志IOinit();//I/O初始化子程序while(1){GpioDataRegs.GPADAT.all=0xFF00;将GPIOA0~GPIOA7输出为全0}}(2)使八个二极管一半亮(GPIOA0-GPIOA3所接二极管亮),一半暗(GPIOA4-GPIOA7所接二极管暗),程序如下:#includeDSP28_Device.h5voidIOinit(){EALLOW;对保护空间的访问使能GpioMuxRegs.GPAMUX.all=0xFF00;将GPIOA0~GPIOA8配置为一般I/O端口,GpioMuxRegs.GPADIR.all=0x00FF;将GPIOA0~GPIOA8配置为输出EDIS;禁止对保护空间的访问}voidmain(void){InitSysCtrl();//系统初始化子程序,在DSP28_sysctrl.c中DINT;//关闭总中断IER=0x0000;//关闭外设中断IFR=0x0000;//清中断标志IOinit();//I/O初始化子程序while(1){GpioDataRegs.GPADAT.all=0xFFF0;}}第八章1.F28x器件有大量的外设模块,由此会产生大量的中断,F28x是如何管理这些中断的?用图示说明。答:F28x器件有大量的外设模块,每一个外设模块都可以产生一个或多个对应于外设模块事件的外设模块级中断。由于CPU没有能力在CPU级处理所有的外设中断请求,因此需要外设中断扩展(PIE)控制器去集中和仲裁不同来源的中断请求。PIE向量表用来存储各个中断服务程序的入口地址。所有复用和非复用在内的每个中断都有一个向量。F28x器件的PIE中断管理原理图如下:62.若要禁止所有的外设中断,IER的值设置为多少?答:IER=0x0000。3.若要清除所有的中断标志,IFR的值设置为多少?答:IFR=0x0000。4画出PIE外设中断扩展模块结构图,并简单说明它的功能。答:PIE外设中断扩展模块结构图如下图:功能同第1题。5用CPU定时器0实现100ms的定时,晶振频率30MHz,锁相环PLL是5倍频,编写ConfigCpuTimer(structCPUTIMFR_VARS*Timer,floatFreq,floatPeriod)函数,并写出ConfigCpuTimer()函数的实际参数值。答:voidConfigCpuTimer(structCPUTIMFR_VARS*Timer,floatFreq,floatPeriod)7{Uint32temp;//初始化周期Timer-CPUFreqInMHz=Freq;Timer-PeriodInUSec=Pe