1、DSP作业秋副本第一章 绪 论1 什么是DSP?答:DSP是数字信号处理器(Digital Signal Processor ),是特别适合于实现各种数字信号处理运算的微处理器。主要应用场合:(1)数字信号处理运算,(2)通信,(3)网络控制及传输设备,(4)语音处理,(5)电机和机器人控制,(6)激光打印机、扫描仪和复印机,(7)自动测试诊断设备及智能仪器仪表、虚拟仪器,(8)图像处理,(9)军事,(10)自动控制等。2. DSP芯片的特点有哪些? 答: (1) 采用改进的哈佛结构;(2) 采用流水线技术;(4) 配有专用的硬件乘法-累加器;(5) 具有特殊的DSP指令;(6) 快速的指令周
2、期;(7) 硬件配置强;(8).支持多处理器结构;(9) 省电管理和低功耗。3. DSP采用改进的哈佛总线结构,画出改进的哈佛总线结构示意图。答:改进的哈佛结构如下:4. DSP中由哪些地址和数据总线组成多总线结构?答:存储器接口有三条地址总线:(1) PAB(Program Address Bus (22))程序地址总线,用来传送来自程序空间的读写地址。PAB是一个22位的总线。(2) DRAB(Data-read Address Bus (32))数据读地址总线。32位的DRAB用来传送来自数据空间的读地址。(3) DWAB( Data-write Address Bus (32))数据写
3、地址总线。32位的DWAB用来传送来自数据空间的写地址。存储器接口还有三条数据总线:(1) PRDB(Program-read Data Bus (32))程序读数据总线, PRDB 在读取程序空间时用来传送指令或数据。(2) DRDB( Data-read Data Bus (32) )数据读数据总线。32位的DRDB在读取数据空间时用来传送数据。(3) DWDB( Data/Program-write Data Bus (32))数据/程序写数据总线。 32位的DWDB在对数据空间写数据时用来传送数据。5. DSP芯片的选型一般是从哪几个方面进行考虑?答:并不存在最好的DSP,正确的DSP
4、选择取决于具体的应用场合。没有任何DSP能够满足所有的,或者大多数应用的需要。对于一种应用来说是好的选择,对另外的应用则可能是很差的选择。 一般从数据格式、数据宽度、速度、存储器的安排、开发的难易程度、功耗和电源管理、器件的封装等方面考虑选择DSP。6. 简述TI公司的DSP三大平台和它们各自的应用场合。答:(1) 最佳控制:TMS320C2000 DSP平台TMS320C2000 DSP平台将各种高级数字控制功能集成于一颗IC上。强大的数据处理和控制能力可大幅提高应用效率和降低功耗。(2) 最低功耗:TMS320C5000 DSP平台TMS320C5000 DSP专门针对消费类数字市场而设计
5、。(3) 最佳处理能力:TMS320C6000 DSP平台 TMS320C6000 DSP是处理能力最强,易于采用高级语言编程的DSP。定点及浮点DSP市场定位在网络交换,图像处理,雷达信号处理等高端应用领域。7. DSP芯片发展趋势应该朝着哪些方面发展?答:(1) 系统级集成DSP是潮流 (2) DSP和微处理器的融合 (3) DSP和FPGA的融合(4) 可编程DSP是主导产品 (5) 追求更高的运算速度 (6)定点DSP是主流 第二章 CCS软件应用基础1 如何对CCS3.3的单处理器目标系统进行配置?答:(1) 运行桌面上的Code Composer Studio Setup应用程序,
6、出现系统配置窗口。(2) 在配置前可以通过选择File-Remove all清除以前的设置。(3) 在Available Factory Boards栏中选择需要调试的目标板或仿真器。为了方便找到相应的硬件配置,可以在右上侧的过滤栏中根据需用的处理器所属系列(Family)、处理器平台类型(Platform)、字节模式(Endian)等进行过滤。确定相应的配置后直接拖到左侧的System Configuration栏中,或者选中需要的目标配置文件后单击下面的Add按钮添加,如果Available Factory Boards栏中不存在用户需要的标准配置,可以自己创建配置文件进行配置。(4)选择
7、System Configuration栏中的系统硬件,单击右键并选择属性,可以查看和编辑相关属性,根据需要可以针对不同的选型作适当的调整。(5)选择系统平台下的CPU,单击右键并选择属性,可以查看和编辑CPU的属性文件。主要包括的GEL文件、主/从设置、启动模式(实时或停止模式)等。(6)单击Save衣(luit按钮保存配置并退出配置程序,下次选用相同的平台开发时不需要重新配置。(7)退出配置程序后弹出Code Composer Studio IDE启动的判断按钮,选择Yes即可运行CCS。如果配置的是硬件平台,在运行CCS IDE之前,应该检查硬件系统的莽接状况和目标系统的供电情况。2 简
8、单程序的开发步骤有哪些?答:(1)如果已经在C: CCStudio_v3. 1目录下安装了CCS开发环境,则在C: CCStudio_v3. 1MyProjects目录下创建开发文件夹sinewave 。(2) C: CCStudio_v3. 1tutorialdsk2812sinewave目录下的.c,. cmd以及.h文件复制到创建的目录,然后运行CCS。(3) 依据工程的创建方法,创建新的工程(参考2.4.1小节)(4) 选择Project-Add Files to Proiect,添加.C、cmd以及rt_2800m1. lib文件。(5) 双击项目管理窗口下的sine.c一文件浏览程
9、序源代码,单击Rebuild All编译程序。(6) 编译、链接通过后,CCS下面的状态输出窗口将显示相应的状态。(7) 选择File-Load Program装载应用程序。(8) 运行程序。3 DSP探针的作用有哪些?答:探针主要用来从PC机的数据文件中读取数据,提供给算法或其他程序使用,从而有利于DSP的算法开发或参考数据的生成。可以使用探针完成下列任务:(1) 从主机的数据文件中读取数据,然后传送到目标处理器的存储缓冲,以便算法程序使用主机的数据;(2) 从目标处理器的存储缓冲中读取数据并存放到PC机的指定文件中,以便进一步分析;(3) 刷新带有数据的图形窗口。第三章 C/C+程序编写基
10、础1. TMS320X28xx采用C/C+编程时,采用位定义和寄存器文件结构方法有什么好处?答:(1) TI公司为用户提供写好的文件结构体和位区定义,可以在其网站下载。C281x C/C+ Header Files and Peripheral Examples (SPRC097)C280x, C2801x C/C+ Header Files and Peripheral Examples (SPRCl91C2804x C/C+ Header Files and Peripheral Examples (SPRC324)(2) 使用位区方便编写代码,可读性强,易升级。(3) 位区定义可以充分利
11、用Code Composer Studio编辑器的自动代码输入功能,方便用户输入代码。当使用寄存器文件结构和位区时,很多变量名很长,难于记忆而且输入非常困难。当输入代码时,Code Composer Studio编辑器提供可能的结构体或位区列表,这样用户可以很容易地使用输入编辑程序代码。CPU定时器的TCR寄存器自动输入。(4) 方便Code Composer Studio的Watch窗口观察变量。用户可以在Code Composer Studio的Watch窗口增加扩展寄存器文件结构体,直接观察相应的位区定义的参数值,2. 什么是定点数据,什么是浮点数据?TMS320X28xx是定点还是浮点
12、处理器?它是如何实现浮点数据处理的?答:小数点固定的数据称为定点数据,小数点浮动的数据称为浮点数据,TMS320X28xx是定点处理器,它通过TMS320X28xx Iqmath库实现浮点处理。3.以_iq24为例解释课本表3.4中的Q格式数据的范围和精度。答:本题不做要求。第6章 TMS320F2812的时钟和看门狗1.如果要使系统时钟为输入时钟的5倍频,同时使能所有的外设时钟,将高速外设的时钟设置为系统时钟的1/10,低速外设的时钟设置为系统时钟的1/12,应该如何设置相关的寄存器?答:PLLCR=0x000A;PCLKCR=0xFFFF,HISPCP=0x0005,LOSPCP=0x00
13、062.画出程序监视器内部结构图,对照图简要说明它的工作原理。答:当8位程序监视器增计数器计数到最大值时,程序监视器模块产生一个输出脉冲,脉宽为512个晶体振荡器时钟宽度(OSCCLK)。为了阻止程序监视器复位,用户必须禁止计数器或程序周期性地向程序监视器密钥寄存器写入0x55+0xAA序列,否则将复位程序监视器计数器。3. 试编写一段程序使程序监视器的计数器未溢出前,使程序监视器的计数器复位。void KickDog(void) EALLOW; SysCtrlRegs.WDKEY=0x0055; SysCtrlRegs.WDKEY=0x00AA; EDIS; 第7章 可编程数字量通用I/O1
14、. 八个帖片LED由GPIOA0-GPIOA7驱动,画出电路图,编写C语言源程序,实现如下功能:(1) 使八个二极管全亮。(2) 使八个二极管一半亮(GPIOA0-GPIOA3所接二极管亮),一半暗(GPIOA4-GPIOA7所接二极管暗) 。答:电路图如下:(1) 使八个二极管全亮,程序如下:#include DSP28_Device.hvoid IOinit()EALLOW; 对保护空间的访问使能GpioMuxRegs.GPAMUX.all = 0xFF00; 将GPIOA0GPIOA7配置为一般I/O端口,GpioMuxRegs.GPADIR.all = 0x00FF; 将GPIOA0G
15、PIOA7配置为输出EDIS;禁止对保护空间的访问void main(void)InitSysCtrl(); / 系统初始化子程序,在DSP28_sysctrl.c中DINT; / 关闭总中断IER = 0x0000; / 关闭外设中断IFR = 0x0000; / 清中断标志 IOinit(); / I/O初始化子程序 while (1)GpioDataRegs.GPADAT.all = 0xFF00; 将GPIOA0GPIOA7输出为全0 (2) 使八个二极管一半亮(GPIOA0-GPIOA3所接二极管亮),一半暗(GPIOA4-GPIOA7所接二极管暗),程序如下:#include DS
16、P28_Device.hvoid IOinit()EALLOW; 对保护空间的访问使能GpioMuxRegs.GPAMUX.all = 0xFF00; 将GPIOA0GPIOA8配置为一般I/O端口,GpioMuxRegs.GPADIR.all = 0x00FF; 将GPIOA0GPIOA8配置为输出EDIS;禁止对保护空间的访问void main(void)InitSysCtrl(); / 系统初始化子程序,在DSP28_sysctrl.c中DINT; / 关闭总中断IER = 0x0000; / 关闭外设中断IFR = 0x0000; / 清中断标志 IOinit(); / I/O初始化子
17、程序 while (1)GpioDataRegs.GPADAT.all = 0xFFF0; 第八章中断系统及其应用1. F28x器件有大量的外设模块,由此会产生大量的中断,F28x是如何管理这些中断的?用图示说明。答:F28x器件有大量的外设模块,每一个外设模块都可以产生一个或多个对应于外设模块事件的外设模块级中断。由于CPU没有能力在CPU级处理所有的外设中断请求,因此需要外设中断扩展(PIE)控制器去集中和仲裁不同来源的中断请求。 PIE向量表用来存储各个中断服务程序的入口地址。所有复用和非复用在内的每个中断都有一个向量。F28x器件的PIE中断管理原理图如下:2. 若要禁止所有的外设中断
18、,IER 的值设置为多少?答:IER=0x0000。3.若要清除所有的中断标志,IFR 的值设置为多少?答:IFR=0x0000。4 画出PIE外设中断扩展模块结构图,并简单说明它的功能。答:PIE外设中断扩展模块结构图如下图:功能同第1题。5 用CPU定时器0实现100ms的定时,晶振频率30MHz,锁相环PLL是5倍频,编写ConfigCpuTimer(struct CPUTIMFR_VARS *Timer, float Freq, float Period)函数,并写出ConfigCpuTimer()函数的实际参数值。答:void ConfigCpuTimer(struct CPUTIM
19、FR_VARS *Timer, float Freq, float Period) Uint32 temp; /初始化周期 Timer-CPUFreqInMHz=Freq; Timer-PeriodInUSec=Period; temp=(long) (Freq*Period); Timer-RegsAddr-PRD. all=temp; /设置预定标参数(SYSCLKOUT): Timer-RegsAddr-TPR. all=0;Timer-RegsAddr-TPRH. all = 0 ;/初始化定时器控制寄存器 Timer-RegsAddr-TCR.bit.TSS=1; /1=Stop t
20、imer, 0=Start/Restart TimerTimer-RegsAddr-TCR. bit.TRB=1; / 1=reload timerTimer-RegsAddr-TCR. bit. SOFT =1; Timer-RegsAddr-TCR.bit.FREE = 1; /Timer Free RunTimer-RegsAddr-TCR.bit.TIE=1; /0=Disable/ 1=Enable Timer Interrupt /复位中断计数Timer-InterruptCount=0;实际参数值ConfigCpuTimer(&CpuTimer0,150,100000);第九章
21、事件管理器及其应用1.利用GP定时器1在GPIOF8引脚上产生0.2s的方波,用一个贴片LED闪烁来表示。系统时钟150MHz,高速外设时钟25MHz,定时器1预分频因子W为128分频,试编写相关程序。答:系统时钟150MHz,通过高速外设时钟预定标器(HISPCP)得到25MHz的高速外设时钟,再通过定时器1预分频因子的128分频,得到定时周期为5.12us。定时周期= 0.2s/2=0.1s;0.1/(5.1210-6)=0x4C4B周期寄存器T1PR=0x4C4B -1=0x4C4A。程序如下:#include DSP28_Device.hinterrupt void eva_timer
22、1_isr(void);void EVA_Timer1() EvaRegs.GPTCONA.all = 0; / 初始化 EVA Timer 1 EvaRegs.T1PR = 0x4C4A; / 定时周期为5.12us*(T1PR+1)=0.1s EvaRegs.EVAIMRA.bit.T1PINT = 1; /使能定时器1的周期中断 EvaRegs.EVAIFRA.bit.T1PINT = 1; /写1清除定时器1的周期中断标志 EvaRegs.T1CNT = 0x0000; EvaRegs.T1CON.all = 0x1740; /连续增计数,128分频,打开定时器void main(vo
23、id)InitSysCtrl(); /初始化系统控制寄存器, 时钟频率150MEALLOW; SysCtrlRegs.HISPCP.all = 0x0003;/高速时钟的工作频率25MEDIS;DINT; /关闭总中断,清除中断标志IER = 0x0000; /关闭外围中断IFR = 0x0000; /清中断标志InitPieCtrl(); /初始化PIE控制寄存器InitPieVectTable(); EVA_Timer1();EALLOW; GpioMuxRegs.GPFMUX.bit.MCLKXA_GPIOF8=0; /把GPIOF8设置为一般I/O口,输出GpioMuxRegs.GPF
24、DIR.bit.GPIOF8=1; PieVectTable.T1PINT = &eva_timer1_isr; /中断服务程序入口地址放入中断向量表EDIS; /依次使能各级中断:外设中相应中断位-PIE控制器-CPU PieCtrlRegs.PIEIER2.all = M_INT4; /GP定时器1使能位于PIE第2组第4个,将其使能IER |= M_INT2; /PIE第2组对应于CPU的可屏蔽中断2(INT2),将其使能EINT; /开总中断for(;); interrupt void eva_timer1_isr(void) GpioDataRegs.GPFDAT.bit.GPIOF
25、8=GpioDataRegs.GPFDAT.bit.GPIOF81; /产生方波EvaRegs.EVAIMRA.bit.T1PINT = 1 /使能定时器1的周期中断 EvaRegs.EVAIFRA.bit.T1PINT = 1 /写1清除定时器1的周期中断标志PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; /清零 PIEACK中的第2组中断对应位 2通用定时器应用举例P193.第十四章 A/D转换单元1 已知XCLKIN=30MHz,要使ADC模块的时钟ADC CLK为3.125MHz,应该对哪些寄存器中的哪些段进行设置,设置的数值分别为多少?(P409表14
26、.8)答:应该对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。2 假设用SEQ1完成5个通道的自动连续转换。ADCINA2和ADCINA1转换两次;ADCINA6转换一次,请编
27、程序配置ADC。答:/ 配置 ADC AdcRegs.ADCMAXCONV.all = 0x0004; / 设置SEQ1的2个转化通道AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2; / 设置SEQ1的 ADCINA2 作为第一转换通道AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; / 设置SEQ1的 ADCINA1 作为第二转换通道 AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; / 设置SEQ1的 ADCINA2 作为第三转换通道AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1
28、; / 设置SEQ1的 ADCINA1 作为第四转换通道AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x6; / 设置SEQ1的 ADCINA6作为第五转换通道AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; / 使能 EVASOC 去启动 SEQ1 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; / 使能 SEQ1 中断 (每次 EOS)3. 假设用SEQ1完成6个通道的自动连续转换。ADCINA3和ADCINA 5转换两次;ADCINA6、ADCINA7转换一次,问MAX CONV1的值为多少?CHESELQn寄
29、存器应该填入什么值?答:MAX CONV1的值为5;CHESELQ1=0x5353;CHESELQ2=0xXX76;CHESELQ3=0xXXXX;CHESELQ4=0xXXXX;4. 如果需要进行8个通道的转换,则MAX CONVn应设为多少?若是双排序器模式使用SEQ1或者级连模式使用SEQ,排序器指针应该如何设置?转换结果存放在哪些结果寄存器中?若是双排序器模式使用SEQ2,排序器指针又应该如何设置?转换结果存放在哪些结果寄存器中?答:若是双排序器模式使用SEQ1或者级连模式使用SEQ,MAX CONV1的值为7;排序器指针从CONV00到CONV07依次设置。转换结果依次存放在结果寄存器00到07中。若是双排序器模式使用SEQ2,MAX CONV2的值为7;排序器指针从CONV08到CONV15依次设置。转换结果依次存放在结果寄存器08到15中。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1