DSP实验:常用指令及数据存储实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP实验一:常用指令及数据存储实验
一、实验目的
1、了解DSP开发系统的组成和结构;
2、熟悉DSP开发系统的连接;
3、熟悉CCS的开发界面;
4、熟悉C54X系列的寻址系统;
5、熟悉常用C54X系统指令的用法
6、掌握TMS320C54的程序空间和数据空间的分配
7、熟悉操作TMS320C54数据空间的指令
二、实验设备
计算机、CCS2.0版软件,DSP仿真器、实验箱。
三、实验系统相关资源
1、DSP芯片引脚XF连接LED5,可通过ssbx,rsbx改变XF的值来控制LED5
2、系统时钟频率为10MHz
3、TMS320VC54存储器分配图
四、实验步骤
1、用仿真机将计算机与数字信号处理实验箱连接好,并依次打开实验箱电源、仿真机电源,然后运行CCS软件。
2、新建一个工程:点击Project-new,输入项目名Exp1, 并将工程文件保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS软件不能识别以中文命名的文件夹。
3、编写源程序:
3.1 新建一个源文件File-New-Source File,出现文本编辑窗口
3.2 复制以下代码到编辑窗口
;File Name:exp01.asm
;the program is compiled at no autoinitialization mode
.mmregs
.global _main
;声明_main可被其他模块引用,程序加载到目标板后,
;会自动跳转到标号为_main的汇编指令
STACK: .usect ".stack",10h
.text
_main:
stm #STACK+10h,sp ;设置堆栈指针
STM #0, CLKMD ; (to divider mode before setting) TstStatu1:
LDM CLKMD, A
AND #01b, A ;poll STATUS bit
BC TstStatu1, ANEQ
STM #0xF7FF, CLKMD ; set C5402 DSP clock to 10MHz loop:
ssbx xf ;将XF置1,熄灭LED5
call delay ;调用延时子程序,延时
rsbx xf ;将XF置0,点亮LED5
call delay ;调用延时子程序,
b loop ;程序跳转到"loop"
;延时子程序
delay:
stm 270fh,ar3 ; 270fh=9999
loop1:
stm 0f9h,ar4 ; 0f9h=249
loop2:
banz loop2,*ar4-
banz loop1,*ar3-
ret
.end
注意:
(1)源代码的书写有一定的格式,每一行代码分为三个区:标号区、指令区和注释区。标号区必须顶格写,主要是定义变量、常量、程序标识时的名称。指令区在标号区之后,以空格或TAB格开。如果没有标号,也必须在指令前面加上空格或TAB,不能顶格。注释区在标号区、程序区之后,以分号开始。注释区前面可以没有标号区或程序区。另外还有专门的注释行,以*打头,必须顶格开始。(2)一般区分大小写,除非加编译参数忽略大小写。
(3)标点符号有时不注意会打成中文全角版本号导致错误。
3.3 保存源程序在exp1目录下,文件名为exp1.asm,文件类型为asm文件
4、把exp1.asm加入工程Exp1:Project—Add File to Project,此时点击工程窗口Source,可以看到exp1.asm已在Project中。
5、把链接命令文件exp1.cmd保存到工程文件夹,并加入到工程中。
6、修改链接选项:
Project-Build option-Linker:Aotoinit Model: no autoinitialization mode
7、对项目进行编译和链接:Project-Build All,在项目编译链接成功之后,生成exp1.out文件,存储在工程文件子目录Debug下。
8、装载可执行文件:
要让程序代码在DSP内部运行必需将生成的*.OUT文件装载到DSP内部,装载方法是点击:File-Load Program再选择生成的exp1.out文件就可以将程序装载到DSP的内部存储器中。
9、单击Debug—RUN,运行程序并查看结果:
可见指示灯LED5以一定频率闪烁:单击“Halt”暂停程序运行,指示灯LED5停止闪烁,再单击“Run”,指示灯LED5又开始闪烁。
10、打开工程文件test1.pjt,编译、链接生成可执行代码,装载到目标板,运行程序并查看结果。查看存储器结果:View--Memory
五、思考题
1、系统时钟频率为10MHz,已知BANZ指令执行时间为4个时钟周期,计算延时程序的延时多少秒?
s T T clk
d 1)10
101(425010000]1)442502(100002[6=⨯⨯⨯⨯≈⨯++⨯+⨯+=
2、如何修改exp1.asm,使得LED5闪烁频率为原来的两倍。
把 stm 0f9h,ar4 ;0f9h=249 改为:
stm 07ch,ar4 ;07ch=125
3、工程test1实现的功能是什么,为test1.asm 添加注释?检查数据存储器的哪些单元可以验证程序的正确性?
①功能:把数据先存储到数据存储器Data1里,再将Data1里的数据存储到Data2里面。
②注释:
.title "test1.asm"
.mmregs
.def _main .data
table: .word 1,2,3,4,5,6,7,8,9,10
.bss DATA1,10 ;为Data1分配10个字节的存储空间
.bss DATA2,10
.text _main:STM #DATA1,AR1
RPT #9 ;重复执行下一条指令10次
MVPD table,*AR1+ ;程序存储器传送到数据存储器
STM #DATA1,AR2 ;将AR2指向DATA1地址
STM #DATA2,AR3
RPT #9 MVDD *AR2+,*AR3+ ;将Data1数据存储器传送到Data2数据存储器
end:
B end
.end