




免费预览已结束,剩余45页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DSP实验指导书及其思考题答案 DSP原理及应用实 验 指 导 书杨宣兵 编 写适用专业电子信息工程 _电子科学与技术 信息工程 通信工程 信息与通信工程学院72013 年 5 月前 言DSP原理与应用是电子信息类专业信号与信息处理方向的一门专业必修课同时也是其他电类专业的一门重要的选修课课程以为主要内容介绍了1基本算术运算的DSP实现41验证必修1CCS基本操作2DSP应用程序结构和开发流程3基于DSP开发环境Simulator完成16位定点加减乘除运算2数字振荡器的设计与实现41设计必修1CCS图形工具使用2基于C语言和汇编语言混合程序设计3定时器等外设资源的应用4简单算法迭代的实现3BSP串口通信实现42综合必修1McBSP串口操作2VC54XX片上ROM资源的使用4FIR数字滤波器设计与实现实现42设计选修1McBSP串口操作与串口中断服务程序编写2ADDA操作3FIR滤波器实现的特殊指令应用4CCS高级调试工具使用5TMS320VC5402的Bootloader设计与实现4510设计必修1编程完成对外设IO端口的控制实现流水灯功能2完成从COFF文件到启动表的转换3完成程序的固化与脱离上位机控制的独立运行6快速傅立叶变换实现42综合选修1辅助寄存器使用位倒序寻址方式应用等2FFT算法的编程实现3CCS探针和图形工具使用7外部设备控制实验41综合任选1熟悉外部中断使用与中断服务程序编写方法2掌握对外设端口的操作方法3掌握外设的控制方法包括键盘LED步进电机LCD等8双音多频9双音多频42设计选修掌握DTMF信号的解码算法原理掌握DTMF信号解码算法的DSP实现方法目 录实验一 基本算术运算的DSP实现1实验二 数字振荡器的设计与实现9实验三 BSP 串口通信实现16实验四 FIR 数字滤波器设计与实现25实验五 TMS320VC5402 的Bootloader设计与实现34实验六 快速傅立叶变换FFT的实现45实验七 外部中断按键LED控制实验67实验八 双音多频DTMF信号产生70实验九 双音多频DTMF信号解码76附录一 DES5402PP-U性能介绍82附录二CCS驱动程序的安装83附录三DES5402PP-U功能详细介绍87附录四 DES5402PP-U板上设置状态显示跳线一览表93实验一 基本算术运算的DSP实现 实验学时4实验类型验证实验要求必修一实验目的1掌握CCS的配置与基本使用方法2掌握C54X汇编语言程序结构掌握基于CCS开发平台Simulator采用汇编指令完成16位定点加减乘除运算程序设计并对运算结果进行评价二实验内容本实验学习使用定点DSP实现16位定点加减乘除运算的基本方法和编程技巧三实验原理方法和手段1、定点DSP中数据表示方法 C54X是16位的定点DSP一个16位的二进制数既可以表示一个整数也可以表示一个小数当它表示一个整数时其最低位D0表示D1位表示次高位D14表示如果表示一个有符号数时最高位D15为符号位0表示正数1表示负数例如07FFFH表示最大的正数32767十进制而0FFFFH表示最大的负数-1负数用2的补码方式显示当需要表示小数时小数点的位置始终在最高位后而最高位D15表示符号位这样次高位D14表示然后是最低位D0表示所以04000H表示小数0501000H表示小数而0001H表示16位定点DSP能表示的最小的小数有符号 0000030517578125在后面的实验中除非有特别说明我们指的都是有符号数在C54X中将一个小数用16位定点格式来表示的方法是用乘以该小数然后取整从上面的分析可以看出在DSP中一个16进制的数可以表示不同的十进制数或者是整数或者是小数如果表示小数必定小于1但仅仅是在做整数乘除或小数乘除时系统对它们的处理才是有所区别的而在加减运算时系统都当成整数来处理 2、实现16定点加法 C54X中提供了多条用于加法的指令如ADDADDCADDM和ADDS其中ADDS用于无符号数的加法运算ADDC用于带进位的加法运算如32位扩展精度加法而ADDM专用于立即数的加法在本实验中我们可以使用下列代码来说明加法运算ldtemp1a将变量temp1装入寄存器Aaddtemp2a将变量temp2与寄存器A相加结果放入A中stlaadd_result 将结果低16位存入变量add_result中注意这里完成计算temp3 temp1temp2我们没有特意考虑temp1和temp2是整数还是小数在加法和下面的减法中整数运算和定点的小数运算都是一样的3、实现16位定点减法C54X中提供了多条用于减法的指令如SUBSUBBSUBC和SUBS其中SUBS用于无符号数的减法运算SUBB用于带进位的减法运算如32位扩展精度的减法而SUBC为移位减DSP中的除法就是用该指令来实现的SUB指令与ADD指令一样有许多的寻址方式其详细使用说明请查阅TI文档在本实验中我们可以使用下列代码来说明减法运算stmtemp1ar3将变量temp1的地址装入ar3寄存器stmtemp3ar2将变量temp3的地址装入ar3寄存器subar2 ar3b 将变量temp3左移16位同时变量temp1也左移16位然后相减结果放入寄存器B高16位中同时ar2加1sthbsub_result将相减的结果高16位存入变量sub_result4、实现16定点整数乘法 在C54X中提供了大量的乘法运算指令其结果都是32位放在A或B寄存器中乘数在C54X的乘法指令很灵活可以是T寄存器立即数存贮单元和A或B寄存器的高16位在C54X中一般对数据的处理都当做有符号数如果是无符号数乘时请使用MPYU指令这是一条专用于无符号数乘法运算的指令而其它指令都是有符号数的乘法在本实验中我们使用下列代码来说明整数乘法运算rsbx FRCT清FRCT标志准备整数乘ldtemp1T将变量temp1装入T寄存器mpytemp2a完成temp2temp1结果放入A寄存器32位例如当temp1 1234H十进制的4660temp2 9876H十进制的-26506乘法的结果在A寄存器中为0F8A343F8H十进制的-123517960这是一个32位的结果需要两个内存单元来存放结果sthampy_I_h将结果高16位存入变量mpy_I_hstlampy_I_l将结果低16位存入变量mpy_I_l当temp1 10H十进制的16temp2 05H十进制的5乘法结果在A寄存器中为00000050H十进制的80对于这种情况仅仅需要保存低16位即可stlampy_I_l将结果低16位存入变量mpy_I_l5、实现16定点小数乘法 在C54X中小数的乘法与整数乘法基本一致只是由于两个有符号的小数相乘其结果的小数点的位置在次高的后面所以必须左移一位才能得到正确的结果C54X中提供了一个状态位FRCT将其设置为1时系统自动将乘积结果左移移位但注意整数乘法时不能这样处理所以上面的实验中一开始便将FRCT清除两个小数16位相乘后结果为32位如果精度允许的话可以只存高16位将低16位丢弃这样仍可得到16位的结果在本实验中我们使用下列代码来说明小数乘法运算ssbxFRCTFRCT 1准备小数乘法ldtemp116a将变量temp1装入寄存器A的高16位mpyatemp2完成temp2乘寄存器A的高16位结果在B中同时将temp2装入T寄存器sthbmpy_f将乘积结果的高16位存入变量mpy_f例如temp1 temp2 4000H十进制的05两数相乘后结果为20000000十进制的 025再如temp1 0ccdH十进制的01temp2 0599aH十进制的07两数相乘后B寄存器的内容为08f5f0a4H十进制的007000549323857如果仅保存结果的高16位08f5H十进制的006997680664063有时为了提高精度可以使用RND或使用MPYR指令对低16位做四舍五入的处理6、实现16定点整数除法 在C54X中没有提供专门的除法指令一般有两种方法来完成除法一种是用乘法来代替除以某个数相当于乘以其倒数所以先求出其倒数然后相乘这种方法对于除以常数特别适用另一种方法是使用SUBC指令重复16次减法完成除法运算下面我们以temp1temp2为例说明如何使用SUBC指令实现整数除法其中变量temp1为被除数temp2为除数结果即商存放在变量temp3中在完成整数除法时先判断结果的符号方法是将两数相乘保存A或B的高16位以便判断结果的符号然后只做两个正数的除法最后修正结果的符号为了实现两个数相除先将被除数装入A或B的低16位接着重复执行SUBC指令用除数重复减16次后除法运算的商在累加器的低16位余数在高16位详细代码如下ldtemp1T将被除数装入T寄存器mpytemp2A除数与被除数相乘结果放入A寄存器ldtemp2B将除数temp2装入B寄存器的低16位absB求绝对值stlBtemp2将B寄存器的低16位存回temp2ldtemp1B将被除数temp1装入B寄存器的低16位absB求绝对值rpt15重复SUBC指令16次subctemp2b使用SUBC指令完成除法运算bcddiv_endagt延时跳转先执行下面两条指令然后判断A若A 0则跳转到标号div_end结束除法运算stlBquot_i将商B寄存器的低16位存入变量quot_isthBremain_i将余数B寄存器的高16位存入变量remain_ixorB若两数相乘的结果为负则商也应为负先将B寄存器清0subquot_iB将商反号stlBquot_i存回变量quot_i中div_end上面给出的是整数除法的通用程序在实际应用中可以根据具体情况做简化如正数除法可以直接将被除数temp1装入B寄存器的低16位然后用SUBC指令循环减除数temp2减完后B寄存器中低16位为商高16位为余数不用判断符号从而节省时间例如temp1 10H十进制的16temp2 5两数相除后商为3在B寄存器的低16位余数为1在B寄存器的高16位7、实现16定点小数除法 在C54X中实现16位的小数除法与前面的整数除法基本一致也是使用循环的SUBC指令来完成但有两点需要注意第一小数除法的结果一定是小数小于1所以被除数一定小于除数这与整数除法正好相反所以在执行SUBC指令前应将被除数装入A或B寄存器的高16位而不是低16位其结果的格式与整数除法一样A或B寄存器的高16位为余数低16位为商第二与小数乘法一样应考虑符号位对结果小数点的影响所以应对商右移一位得到正确的有符号数其详细代码如下ldtemp1T将被除数装入T寄存器mpytemp2A除数与被除数相乘结果放入A寄存器ldtemp2B将除数temp2装入B寄存器的低16位absB求绝对值stlBtemp2将B寄存器的低16位存回temp2ldtemp116B将被除数temp1装入B寄存器的高16位absB求绝对值rpt15重复SUBC指令16次subctemp2b使用SUBC指令完成除法运算and0ffffhB将B寄存器的高16位清为0这时余数被丢弃仅保留商bcddiv_endagt延时跳转先执行下面两条指令然后判断A 若A 0则跳转到标号div_end结束除法运算stlB-1quot_f将商右移一位后存入变量quot_f右移是为了修正符号位xorB若两数相乘的结果为负则商也应为负先将B寄存器清0subquot_fB将商反号stlBquot_f存回变量quot_f中div_end 注意上面的C54X的16位定点有符号小数除法通用程序没有保留余数商保存在变量temp3中举一个例子当temp1 2cccH十进制的035temp2 55c2H十进制的067两数相除的结果为temp3 42dcH十进制的0x42dc052233四实验条件PC机 DES5402PP-U实验系统若使用需要将CCS配置为硬件仿真器五实验步骤本实验需要使用C54X汇编语言实现加减乘除的基本运算并通过DES的存贮器显示窗口观察结果实验分两步完成1编写实验程序代码本实验的汇编源程序代码主要分为六个部分加法减法整数乘法小数乘法整数除法和小数除法每个部分后面都有一条需要加断点的标志语句nop 当执行到这条加了断点的语句时程序将自动暂停这时你可以通过存贮器窗口检查计算结果当然你看到的结果都是十六进制的数 2在simulator上调试运行并观察结果 在完成实验程序代码的输入并在CCS集成开发环境采用编译器对各模块进行编译并连接后就可以在simulator上调试运行步骤如下将CCS配置为C5402 simulator启动CCS新建工程exer1prj将编写的主程序文件CMD文件中断向量表添加到工程对各模块进行编译然后rebuild生成out输出文件c在CCS界面单击菜单栏File下面的Load选项并在弹出的File Name对话框中选择Debug文件夹下面的exer1out装入基本算术运算实验程序这时应能在反汇编窗口看到程序代码d 用鼠标选中Memory窗口并在其中选择要查看的存贮器地址段0x0800x08ee 在反汇编窗口中在每个nop指令处都设一个断点方法有两种1用鼠标单击该指令将其点亮即可2在菜单栏中选择Break Add然后在弹出的对话框中键入欲加断点的地址即可f 单击菜单栏下的Run F5按钮启动执行基本算术运算程序程序在执行完加法运算后自动暂停通过CPU窗口可以看到寄存器AHL的内容为0x46这正是加法运算的结果同样在Memory窗口中可以看到0x810x820x88的内容为分别为001200340x46执行加法运算后将0x81和0x82的内容相加结果放在0x88单元g 在Memory窗口中用鼠标左键双击0x81单元这时可以修改该内存单元的内容输入新的数据0x0ffee十进制的-18编辑内容时请直接输入FFEE十六进制然后回车确认便完成对0x81单元的修改h 在CPU 窗口中修改PC值方法也是鼠标左键双击PC寄存器的内容输入新的PC值0x1805编辑内容时直接输入1805并用回车键确认i 单击菜单栏下的Run F5按钮程序从当前PC继续运行重新计算0x81和0x82的和结果在0x88中当程序再次暂停时可以看到AHL寄存器和0x88的内容为0x22十进制的34这正是我们希望的结果-1852 34 j 单击Run F5按钮程序从当前PC继续运行完成减法运算当程序再次暂时断点位于0x1813可以看到0x83和0x84单元的内容分别为FFEE和0012B寄存器的内容为ffdc0000而0x89的内容为ffdc十进制-36这正是我们希望的结果注意该减法操作使用了辅助寄存器寻址所以计算结果在B寄存器的高16位 k 单击Run F5按钮程序从当前PC继续运行完成整数乘法运算当程序再次暂时断点位于0x181d可以看到0x81和0x82单元的内容分别为0012和0034A寄存器的内容为000003A8这正是我们希望的结果1852 936 0x3a8 这时我们可以用1个16位的内容单元来保存结果如将A寄存器的低16位存入0x8b单元但如果将0x81的内容修改为0x2000十进制的8192在CPU窗口中将PC修改为1818然后继续运行重新计算乘法当程序完成乘法暂停时可以看到A寄存器的内容为00068000这也是一个正确的结果819252 4259840x68000此时将无法用一个16位的存贮单元来保存A寄存器中的结果l 单击Run F5按钮程序从当前PC继续运行完成小数乘法运算当程序再次暂停时断点位于0x1826可以看到0x83和0x84单元的内容分别为4000和b548A寄存器的内容为40000000乘法的结果在B寄存器中为daa40000这正是我们希望的结果05 -058374 -029187 0x0daa4 对于小数乘法一般情况都可以用1个16位的内容单元将B寄存器的高16保存如存入0x8c单元m 单击Run F5按钮程序从当前PC继续运行完成整数除法运算当程序再次暂时断点位于0x183b可以看到0x810x820x8d和0x8e单元的内容分别为00340012FFFE和0010这正是我们希望的结果52除以-18商为-2 0xfffe 余数为16 0x10 n 单击Run F5按钮程序从当前PC继续运行完成小数除法运算当程序再次暂停时断点位于0x1852可以看到0x810x82和0x8f单元的内容分别为40004ab8和6da3这正是我们希望的结果05058374 08565457 0x6da3 o 如果以上程序运行不正确请检查代码是否输入正确还可以在源代码中插入断点调试注意对中间结果的观察六实验报告要求1实验前进行预习初步编写相应实验程序代码2、实验时对实验代码进行调试并不断修改达到正确结果3、写出本次实验的心得体会七思考题1对直接寻址用法有什么体会如果在直接寻址前遗漏对DP初始化对结果有什么影响2在小数乘法中使用了置FRCT标志为1的指令如果将该语句取消那么B寄存器的结果是多少想想什么时候应该设置FRCT标志实验_2_数字振荡器的设计与实现实验学时 4实验类型设计实验要求必修一实验目的通过本实验的学习让学生掌握多模块程序设计方法掌握定时器使用掌握简单算法的DSP实现以及CCS环境下图形工具的简单应用二预习和参考1数字振荡器原理设一个传递函数为正弦序列sinkT其z变换为 H z 其中A 2cosT B -1 C sinT设初始条件为0求出上式的反Z变换得 yk Ayk-1Byk-2Cxk-1这是一个二阶差分方程其单位冲击响应即为sinkT利用单位冲击函数xk-1的性质即仅当k 1时xk-1 1代入上式得 k 0 y0 Ay-1 By-2 0 0 k 1 y1 Ay0 By-2 c c k 2 y2 Ay1 By0 0 Ay1 k 3 y3 Ay2 By1 k n yn Ayn-1 Byn-2在k 2以后yk能用yk-1和yk-2算出这是一个递归的差分方程 根据上面的说明我们可以开始数字振荡器的设计设该振荡器的频率为2kHz采样率为40kHz通过定时器设置每隔25us中断一次即产生一个yn则递归的差分方程系数为 A 2cosT 2cos 2 x PI x 2000 40000 2 x 095105652 B -1 C sinT sin 2 x PI x 2000 40000 030901699为了便于定点DSP处理我们将所有的系数除以2然后用16位定点格式表示为这便是本实验中产生2KHz正弦信号的三个系数在本实验中主程序在初始化时先计算出y1和y2然后开放定时器中断以后每次进入定时器中断服务程序时利用前面的y1和y2计算出新的有y0通过CCS提供的图形显示工具我们将在图形窗口中看到一个正弦信号波形下面是初始化和中断服务程序代码片段初始化y1和y2ssbxFRCT置FRCT 1准备进行小数乘法运算stINIT_AAA将常数A装入变量AAstINIT_BBB将常数B装入变量BBstINIT_CCC将常数C装入变量CCpshdCC将变量CC压入堆栈popdy2初始化y2 CCldAAT装AA到T寄存器mpyy2ay2乘系数A结果放入A寄存器sthay1将A寄存器的高16位存入变量Y1中断服务程序片段ldBBT将系数B装入T寄存器mpyy2ay2乘系数B结果放入A寄存器ltdy1将y1装入T寄存器同时复制到y2macAAa完成新正弦数据的计算a寄存器中为 y1AAy2BBstha1y1将新数据存入y1因所有系数都除过2所以在保存结果时转移一位恢复数据正常大小stha1y0将新正弦数据存入y0 2C54X的定时器操作 C54X的片内定时器利用CLKOUT时钟计数用户使用三个寄存器TIMPRDTCR来控制定时器参见表2-1在表2-2中列出了定时器控制寄存器的各个比特位的具体定义VC5402的另一个定时器定时器1的控制寄存器分别为0x30TIM10x31PRD10x32TCR1 表2-1 VC5402定时器0的相关寄存器寄存器地址名称用途0024hTIM定时器寄存器每计数一次自动减10025hPRD定时器周期寄存器当TIM减为0后CPU自动将PRD的值装入TIM0026hTCR定时器控制寄存器表2-2 定时器控制寄存器TCRbit概要比特 名称 功 能15-12 保留 读出时为011 Soft 该比特位与10位配合使用以决定定时器在使用仿真调试时状态 Soft 0 当进入仿真调试时定时器立即停止工作 Soft 1 当计数器被减为0后停止工作10 Free 该位与11位配合使用以决定定时器在使用仿真调试时状态 Free 0 根据11比特位决定定时器状态 Free 1 忽略11比特位定时器不受影响9-6 PSC 定时器预置计数器当PSC减为0后CPU自动将TDDR装入然后TIM开始减15 TRB 定时器复位当TRB 1时CPU将PRD寄存器的值装入TIM寄存器将TDDR的值装入PSC4 TSS 定时器启停控制位当系统复位时TSS被清除定时器立刻开始工作 TSS 0 表示启动定时器 TSS 1 表示停止定时器0-3 TDDR 定时器扩展周期当PSC减到0后CPU自动将TDDR的值装入PSC然后TIM减 1所以整个定时器的周期寄存器可以有20个比特PRDTDDR 从上面的介绍可以看到定时器实际上可以有20个比特的周期寄存器它对CLKOUT信号计数先将PSC减1直到PSC为0然后用TDDR重新装入PSC同时将TIM减1直到TIM减为0这时CPU发出TINT中断同时在TOUT引脚输出一个脉冲信号脉冲宽度为CLKOUT一致然后用PRD重新装入TIM重复下去直到系统或定时器复位因而定时器中断的频率由下面的公式决定 TINT的频率 其中tc表示CLKOUT的周期定时器当前的值可以通过读取TIM寄存器和TCR寄存器的PSC比特位得到下面是本实验中初始化定时器的程序片段 stm10hTCR停止定时器stm2499PRD设置PRD寄存器值为2499TINT中断频率为 Foutclk 24991 100MHz2500 40 KHzstm20hTCR 重新装入TIM和PSC然后启动定时器 3C54X中断的使用 在C54X中用户可以通过中断屏蔽寄存器IMR来决定开放或关闭一个中断请求图2-1给出了C5402的IMR寄存器的各个比特位的定义 图2-1 C5402的IMR寄存器其中HPINT表示HPI接口中断INT3-INT0为外部引脚产生的中断TXINT和TRINT为TDM串口的发送和接收中断BXINT0和BRINT0为BSP串口的发送和接收中断TINT0为定时器0中断在中断屏蔽寄存器IMR中1表示允许CPU响应对应的中断0表示禁止当然要CPU响应中断ST1寄存器中的INTM还应该为0允许所有的中断当DSP响应中断时PC指针指向中断向量表中对应中断的地址进入中断服务子程序中断向量表是C54X存放中断服务程序的一段内存区域大小为80H在中断向量表中每一个中断占用4个字的空间一般情况是将一条跳转或延时跳转指令存放于此当然如果中断服务程序很短小于或等于4个字可以直接放入该向量表中断向量表的位置可以通过修改基地址来改变其基地址由PMST寄存器中的IPTR15-7 bits决定中断向量表的各中断的偏移说明以及中断向量地址的形成请参考教材以及教材附录部分例如C54x复位后其IPTR全为1复位中断的偏移量为0所以中断向量表起始位置在0FF80H因而复位后程序从0FF80H开始运行本实验的初始化程序读取中断向量表的启始地址然后设置PMST的高9位以便DSP能正确响应中断代码如下 ld 0dp设置DP页指针 ssbx intm关闭所有中断 ld vector a读出中断向量地址vector在中断向量表程序中定义 and 0FF80h a保留高9位IPTR andm 007Fh pmst保留PMST的低7位 or pmst a stlm a pmst设置PMST其中包括IPTR三实验要求基于DSP的定时器产生2KHz正弦波采样率为40KHz或者自定义但必须满足采样定理采样CCS图形查看工具查看产生波形及其频谱图四实验条件PC机 DES5402PP-U实验系统五调试及结果测试本实验需要使用C54X汇编语言或C语言实现数字振荡器并通过CCS提供的图形显示窗口观察输出信号波形以及频谱实验分下面几步完成 1根据确定数字振荡器的频率计算并确定系数 2启动CCS新建工程文件如文件名为sinewaveprj选择Project菜单中的Add File to Project选项将所编写的汇编源程序exer2asmvec_tableasm和连接命令sinewavecmd文件依次添加到工程文件中注意你可以在添加文件对话框中选择显示不同的文件类型来加快文件选择速度你也可以使用鼠标右键单击工程文件名如sinewaveprj并选择Add Files项来添加需要的文件其中exer2asm包括初始化代码和中断服务程序而vec_talbeasm包含中断向量表 3选择Project菜单中的Options选项或使用鼠标右键单击工程文件名如sinewaveprj并选择Options项来修改或添加编译连接中使用的参数例如选择Assembler窗口选择Enable Symbolic Debug Infomation以便使用汇编源代码级调试你可以在汇编源程序设置断点等等选择Linker窗口在Output Filename栏中写入输出OUT文件的名字如sineout你还可以设置生成的MAP文件名 4完成编译连接正确生成OUT文件然后使用File菜单的Load Program选项将生成的OUT文件如sineout装入DSP的片内存储器这时CCS将显示程序的启始地址_c_int00 5选ViewGraphTimeFrequency打开图形显示设置窗口在弹出的对话框中按图2-2设置所示主要修改Start Address为y0y0为生成的正弦波输出变量Acquisition Buffer Size为1DSP Data Type为16-bit signed integer图2-2 CCS图形查看工具设置6在汇编源程序的中断服务程序_tint中的nop语句处设置断点该行被加亮为洋红色选择DebugAnimate运行程序观察输出波形数一数一个周期的正弦波有多少个点算算频率是否是2kHz另外想想Run和Animate两种运行方式的区别 7用右键单击图形显示窗口并选择Proporties项以便修改显示属性将Display Type项改为FFT Magnitude以便显示信号频谱修改Sampling Rate Hz 项为40000然后退出注意观察生成的正弦波频率 8清除所有断点关闭除波形显示窗口外的所有窗口并关闭工程文件9下面我们使用C语言完成本实验新建一个工程文件如sinewave_cprj并添加所编写的timercvec_tableasm源程序再添加timercmd再添加C使用的标准库rtslib该文件应该在CCS安装目录中例如若CCS安装在dti下则rtslib应该在dtic5400cgtoolslib下修改编译连接选项加入符号调试选项修改生成的OUT文件名如timerout 10完成编译连接正确生成OUT文件然后使用File菜单的Load Program选项将生成的OUT文件如timerout装入DSP的片内存储器这时CCS将显示程序的启始地址_c_int00 11 打开C源程序timerc窗口在中断服务程序函数tint 的con_buf 0语句处增加一个断点同样打开图形显示窗口并将Start Address改为bufAcquisition Buffer Size改为128Display Data Size改为128DSP Data Type为32-bit floating point12选择DebugAnimate运行程序观察输出波形数一数一个周期的正弦波有多少个点算算频率是否是2kHz同样用右键单击图形显示窗口显示信号频谱注意修改Sampling Rate Hz 项为40000然后退出注意观察生成的正弦波频率六实验报告要求1预习报告分析采用数字信号处理方法产生正弦波原理复习定时器工作原理及中断控制方法考虑主程序中断向量表以及CMD模块的编写2实习记录根据实习步骤记录实验结果图形考虑显示图形的设置3实验报告1汇出实验结果信号曲线图及其频谱图2进行本次实验总结七思考题1本实验程序产生了一个2kHz的正弦信号请修改程序产生一个频率相同的余弦信号为了验证产生的COS信号可以同时生成SIN和COS信号然后在两个图形窗口中显示波形它们应该正好相差 2相位重新设计和实现一个数字振荡器采样频率改为为20KHz输出正弦信号的频率为4KHz使用探针工具用文件保存产生的正弦波数据4在1题的基础上新建一个工程文件使用VC5402的定时器1产生COS信号同时使用定时器0产生SIN信号5在CCS中打开连接定位文件sinewavecmd看看中断向量表是如何安排的并使用MAP文件验证中断向量表的具体地址实验三 BSP串口通信实现 实验学时 4实验类型综合实验要求必修一实验目的1本实验的主要目的是学习C54xx的McBSP串口的控制和使用并利用VC5402的McBSP1串口实现数据的收发2学会编写串口通信程序包括串口的初始化和发送中断服务程序的编写二相关知识点串口结构与工作原理包括串口的初始化和发送中断服务程序的编写三实验原理方法和手段1McBSP概述 McBSP与外设进行数据传输是通过DX脚来发送RX脚来接收通信的时钟与帧信号是由CLKX CLKR FSX and FSR脚来控制DSP的CPU或DMA从数据接收寄存器DRR12读取接收数据发送时向数据发送寄存器 DXR12 写数据数据写入 DXR12 后通过传输移位寄存器 XSR12 移位输出到DX上同样从DR上接收的数据移位存储到接收移位寄存器 RSR12 并拷贝到接收缓存寄存器 RBR12 然后再由 RBR12 拷贝到DRR12DRR12就可以由CPU或DMA来读出多级寄存器允许在通信时内部和外部数据同时传输C54XX对McBSP的控制由16位的控制寄存器实现 2 McBSP控制寄存器 在图3-1中给出了McBSP串口的所有控制寄存器本实验使用VC5402的McBSP1串口下面的说明以McBSP1为例McBSP每个串口实际占用6个物理地址空间例如McBSP1串口中数据发送寄存器为两个 32bit 地址分别为0x42和0x43本实验通过0x43发送数据 16bit 数据接收寄存器为两个 32bit 地址分别为0x40和0x41本实验通过0x41读取串口接收数据 16bit 控制寄存器占用两个地址0x48和0x49而McBSP串口控制寄存器总共有14个所以在访问这些控制寄存器时先将要访问的寄存器编号子地址写入地址寄存器寄存器0x48然后在将数据写入0x49或从0x49读出相应的数据若要访问另一个控制寄存器又得些修改地址寄存器串口控制寄存器1的详细说明SPCR1子地址 - 0x0 SPCR1设置McBSP串口的数字环回模式 接收符号扩展和校验模式Clock Stop模式DX是否允许A-bis 模式接收中断模式等并给出接收同步错误接收移位寄存器 RSR12 空接收准备好等状态本实验RJUST 01 即接收数据不足16BIT时采用右对齐且符号位扩展方式另外接收中断由RRDY信号RINTM 00DLB 0表示不使用数字环路CLKSTP 0X 表示时钟停止模式用于非SPI模式DXENA 0 表示禁止延时发送ABIS 0表示不使用A-bis模式RSYNCERR 0 表示不检测同步错误该寄存器初始化值为0x2000在启动串口接收工作前应将RRST为置1即该寄存器为0x2001图3-1 McBSP串口控制寄存器图3-2 串口控制寄存器1串口控制寄存器2的详细说明SPCR2子地址 - 0x1 SPCR2设置McBSP自由运行模式SOFT 模式发送中断模式并给出发送同步错误发送移位寄存器 XSR12 空发送准备好等状态此外可以进行发送复位采样率发生器复位帧同步发生电路复位本实验中FREE 0 SOFT 1 表示若使用仿真器调试时串口在发送完当前字后暂停工作若连续运行这两个BIT位没有影响FRST 0表示帧同步发生器复位该BIT位工作时应设为1GRST 0表示采样率发生器即串口工作的时钟电路复位工作中若该串口需要提供时钟信号时应设置为1XINTM 00表示串口的发送中断由XRDY产生XSYNCERR 0表示不检测同步错该寄存器初始化值为0x100当串口工作时应将XRST为置1即该寄存器为0x1c1图3-3 串口控制寄存器2 5 引脚控制寄存器的详细说明PCR子地址 - 0x0e PCR设置McBSP传输帧同步模式接收帧同步模式发送时钟模式接收时钟模式发送帧同步信号的极性接收帧同步信号的极性发送时钟极性接收时钟极性并给出CLKSDXDR脚的状态此外PCR还定义发送和接收部分在复位时相应引脚是否配置为通用 IO本实验中XIOEN和RIOEN 0表示DXFSXCLKXDRFSRCLKRCLKS都配置为串口而非通用IO引脚FSXM 1表示发送帧同步由采样率发生器产生请参考SRGR2寄存器的FSGM位FSRM 0 表示接收帧同步由外部提供因为DES5402PP实验板的FSXM与FSRM相连CLKXM 1 表示发送时钟由内部采样率发生器产生CLKRM 0 表示接收时钟由外部提供同样因为CLKRM与CLKXM连在一起FSXP 1 表示发送帧同步低有效FSRP 1 表示接收帧同步低有效CLKXP 1 表示CLKX的上升沿发送数据 CLKRP 0 表示CLKR的下降沿接收数据该寄存器初始化值为0x0a0e图3-4 串口引脚控制寄存器PCR 6 接收控制寄存器1RCR1说明子地址 - 0x02RCR1设置McBSP接收时第一相FIRST PHASE的接收帧长度从1个字到128个字接收字长度81216202432bits本实验中设置位每帧1个字字长16 bits初始值为0x0040图3-5 串口接收控制寄存器1 7 接收控制寄存器2RCR2说明子地址 - 0x03 RCR2设置McBSP接收时是否允许第二相RPHASE 1如果允许设置McBSP接收时第二相的接收帧长度从1个字到128个字接收字长度81216202432bits此外 RCR2设置McBSP接收时的接收压缩模式接收同步帧忽略模式接收数据延迟在本实验中RPHASE 0 表示只使用单相帧RCOMPAND 00表示接收数据不压扩且高位在前RFIG 0 表示不忽略接收帧同步信号该寄存器初始化设置为0x0040或0x0图3-6 串口接收控制寄存器2 8 发送控制寄存器1XCR1说明子地址 - 0x04 XCR1设置McBSP发送时第一相FIRST PHASE的发送帧长度从1个字到128个字发送字长度81216202432bits本实验中设置位每帧1个字字长16 bits初始值为0x0040图3-7 串口发送控制寄存器1 9 发送控制寄存器2XCR2说明子地址 - 0x05 XCR2设置McBSP发送时是否允许第二相XPHASE 1如果允许设置McBSP时第二相的发送帧长度从1个字到128个字发送字长度81216202432bits此外 XCR2设置McBSP发送时的发送压缩模式发送同步帧忽略模式发送数据延迟本实验不允许使用第二相XPHASE 0初始设置为 0x0图3-8 串口发送控制寄存器2 10 采样率发生器串口时钟产生寄存器SRGR1子地址 - 0x06 采样率发生器寄存器1SRGR1设置帧正脉冲宽度和数据位时钟分频 CLKG与输入CLK频率之比约定值为1本实验中虽然将FWID设置为1即帧同步脉冲宽度 2但被忽略了参见后面帧同步发生控制寄存器设置时钟分频寄存器 200 0xC8 表示设置串口时钟为CLKG 100M 200 500K Hz本实验中设置为0x1c8图3-9 串口采样率控制寄存器1 11 采样率发生器帧同步信号产生控制寄存器SRGR2子地址 - 0x07 采样率发生器寄存器2SRGR2设置采样率发生器时钟同步模式CLKS的极性采样率发生器输入时钟选择帧周期分频本实验中GSYNC 0 表示采样率发生器是否同步因CLKSM 1固该bit不用CLKSP 0表示 CLKS的上升沿产生CLKG和FSG因CLKSM 1该BIT也不用CLKSM 1表示采样率发生器由CPU时钟驱动FSGM 0表示帧同步信号由发送位移寄存器自动产生忽略FPER和FWID固FPER 0所以该寄存器初始化值为0x2000图3-10 串口采样率控制寄存器2 12 串口的初始化 本实验的串口初始化包括两个部分串口收发中断的设置和串口寄存器的初始化根据前面的介绍DES5402PP实验板的串口1设置为单相帧字长为16bit发送CLOCK由内部CPU时钟产生频率为500KHz并输出同时串口接收时钟也使用该信号发送帧同步信号由发送位移寄存器自动产生同时也提供给串口接收电路具体设置参见下面的代码 The following codes are used to initalize McBSP1 When Transmit this DES5402PP makes CLKFS the other DES5402PP receives the CLKFS stm 0MCBSP1_SPSA choose SPCR11 stm 2000hMCBSP1_SPSD receive sign_extend in DRR stm 1MCBSP1_SPSA choose SPCR20 stm 100hMCBSP1_SPSD stm 2MCBSP1_SPSA choose RCR10 stm 40hMCBSP1_SPSD 16 bits each word stm 3MCBSP1_SPSA choose RCR20 stm 40hMCBSP1_SPSD stm 4MCBSP1_SPSA choose XCR10 stm 40hMCBSP1_SPSD 16 bits each word stm 5MCBSP1_SPSA choose XCR20 stm 0MCBSP1_SPSD stm 6MCBSP1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年辽宁装备制造职业技术学院辅导员考试真题
- 信用行业管理制度
- 信访重点管理制度
- 修改单据管理制度
- 公司商务舱管理制度
- 加气站消防管理制度
- 售楼部设计管理制度
- 实验室养护管理制度
- 小公司报账管理制度
- 已耗品采购管理制度
- 北京市顺义区2023-2024学年五年级下学期数学期末试卷(含答案)
- 2025公基题库(附答案解析)
- 2025年宁夏银川灵武市选聘市属国有企业管理人员招聘笔试冲刺题(带答案解析)
- 机关内部制度管理制度
- 两办意见宣贯考试题及答案
- 2025年高纯硫酸锶项目市场调查研究报告
- 2025年汽车驾照考试科目一考试题库及参考答案
- 广东省广州市天河区2023-2024学年七年级下学期期末考试英语试题(含答案)
- 净水机服务合同协议书
- 古城煤矿压风系统远程监控改造技术协议
- 2025年上海市公务员录用考试《行测》真题及答案解析(B类)
评论
0/150
提交评论