2. 如果当前CCS中装载了gel文件,
那么就会出现相应的菜单项,如图3-1所示。
图3-1 GEL菜单
3. 添加代码后,重新装载Gel文件将出现新的子菜单,如图3-2所示,并测试新菜单的功能。
图3-2 新的子菜单
四、实验心得
此次实验做得比较顺利,主要是得益于实验指导书的详细指导。我明白,实验的目地不在于你做这个时候有多快有多顺利,而是我们究竟学了多少东西。此次实验增加菜单栏时,我把应用于DSK板子的也添加进去了,导致GEL文件不能识别,这是我的粗心所致。我认为此次实验重点在于教我们怎么写cmd和gel文件,这是一个理论与实验结合的关键点。通过此次实验我明白了CMD文件其实就是一个配置文件。它是用来具体说明对储存空间的配置情况的。通常的配置是第0页存放程序,第1页存放数据,第2页存放I/O空间,数据段必须从0060H开始。其它段意义不大,但是在仿真时不一致。DSP芯片的储存空间包含有ROM和RAM两种存储空间。
实验四、正弦信号发生器
一、 实验目的
1. 掌握利用DSP产生正弦信号的原理 2. 熟悉子程序调用的程序结构以及堆栈的使用 3. 掌握CCS的图形输出操作
二、 实验设备
1. 集成开发环境Code Composer Studio(简称CCS) 2. 实验代码Sin.s54、Lab.cmd和Lab.gel 三、实验内容
1. 阅读理解多项式逼近正弦的文档 2. 阅读和理解Sin.s54 3. 调试正弦波发生器
4. 加入断点,并选取图形观测,利用动画及时更新 5. 试利用迭代的方法来实现正弦信号发生器 四、实验结果和分析 1.
第一象限内的弧度值。因为度,规定弧度值从
,为
,所以只需将第二,
=0x8000。利用级
三,四象限内的弧度值转换到第一象限即可计算出相应的正弦函数值。由于有限精
,其中=0x7FFF,/2=0x4000,
数展开产生正弦波,必须在调用计算子程序之前备份好累加器A中的当前弧度值,以便计算结束后实现增量。正弦波的频率可以通过增幅的大小来进行控制,
如果假定程序循环一次为一个时间单位,则正弦波的周期为65536/步长,频率为周期倒数。自动增长时要注意当超过后必须调整到计算子程序,即若
。
的范围内才能调用
2. 需要使用临时数据时,必须用frame语句留出所需空间,使用结束后要将堆栈指针还原以防堆栈内存泄漏。要注意的是frame的下一条指令不能使用直接寻址。 打开sin_out的MAP文件。如下图:
3. 注意事项:利用累加器写乘法寄存器T(stlm)之后的下一条指令不能使用T;条件转移指令xc在指令访问阶段判断条件,该条件必须在先于xc指令的2个指令之前产生;条件转移指令bc是在指令执行阶段判断条件,不存在这方面的问题。具体细节请参见《数字信号处理系统的应用和设计》3.6节和4.5节。 4. 图形观测时选择菜单View->Graph->Time/Frequency,然后设置如下图:
确定并设置好断点后(断点位置要设置对,几个地方都可以,可多尝试几次使用Debug->Animate就可以观察到动画输出的结果如图:
start address中用sin_out时可得如下图:
从图中可以观察到正弦波的周期。改变的增量步长观察不同频率的正弦波输出有何不同。
改变步长,将步长改为0X f100,得到如下图。
比较上述两图可以发现,当步长增大时,正弦波的周期变小了。原因在于周期等于65536/步长。
start address中用AR6测试时,可得如下图:
start address中用0x2000测试时,可
得如下图: