DSP 实用技术课程
实验报告
课程名称:
实验名称:
姓 名:
学 号:
班 级:
指导老师:
实验时间:
实验二 CCS操作
一、实验目的
1. 掌握TMS320C00系列汇编语言程序的基本格式
2. 掌握程序编译、连接、运行和调试的基本过程
3. 熟悉Code Composer Studio的使用
二、实验设备
1. 集成开发环境Code Composer Studio(以下简称CCS)
2. 实验代码ccs_basic.s、ccs_basic.cmd和ccs_basic.gel
三、实验主要内容 及结果提示
1.基本操作:
1. 建立项目,并加入文件
a 运行CCS setup,选择C02 Simulator,选择Project→New菜单项,建立一个新的项目ccs_basic.pjt(注意建立路径,并选择Project→add files to new project 菜单项,加入文件ccs_basic.s和ccs_basic.cmd;
b 在工程视图中选中GEL files文件夹,单击鼠标右键,在弹出的菜单中选择Load GEL选项,载入ccs_basic.gel;
2. 编译和连接
a 编译:选择Project-->Build Option,在Compile表单的Category列表中,选择Basic选项,并设置Generate debug info为full symbolic debug选项,选择Files选项,并在设置Asm File Ext 中写入“s”为汇编语言扩展名;
b 连接:选择Project-->Build Option,在linker表单中的Autoinit mode选项中选择no autointialization模式,Output Filename中输入.\\debug\\ ccs_basic.out,Code Entry Point 中输入main,Map Filename中输入ccs_basic.map,然后保存选项设置。
c 选择Project→Build构建整个项目,产生可执行文件ccs_basic.out;
d 选择File->Load Program,装载可执行文件ccs_basic.out。
2.练习
1 观察存储器映象文件ccs_basic.Map,理解存储器的配置情况;
2 观察和修改存储器单元的内容
具体实验步骤如下:
1. 观察存储器映象Map文件
选择File→Open打开ccs_basic.Map文件,可观察
a 存储器的配置情况:页面0为程序空间,页面1为数据空间;
b 程序文本段:起始地址0x1000,存储区长度为0x0021;
c 数据段:其中需初始化数据段.data起始地址0x2005,存储区长度为4;
d 不需初始化数据段.bss起始地址0x2000,存储区长度为5;
e 堆栈段:起始地址0x0100,存储区长度为0x0400;
f 向量段:起始地址0x0080,存储区长度为0x0080;
g 全局符号在存储器中的位置:共14个符号,如符号.bss在存储器中的位置为0x2000。
将上述信息与cmd文件中的设置比较,理解cmd文件和连接器的关系。
2. 输出文件ccs_basic.out的运行和调试
a 运行程序:将可执行文件装载到simulator中,选择Debug→Run 或按F5键运行程序,按shift F5键可中止程序的运行;选择Debug→Step into或按F8键可实现程序的单步执行。
b 设置断点:把光标移到某一行,按F9键,这一行将会以红色高亮显示,表示在该行加了一个断点.
3. 观察和修改存储器单元的内容
a 点击CCS操作界面左侧调试工具栏图标,出现寄存器窗口,在该窗口查看存储器的地址
b 选择View→memory 或点击CCS操作界面左侧调试工具栏图标,在弹出的菜单中输入存储器地址,可观察存储器的内容。如存储器地址为0x2005中内容为0x000A。
c 修改源汇编程序中数据段内容,可查看存储器单元内容的变化。在数据表格复制到数组a[]后,如果把a[0]的值由10改为1(修改文件时注意去掉其只读属性,后面类似),那么求和的结果将变为0x0026。
3.实验代码
本次实验采用汇编语言进行编程实现功能为 y=a1*x1+a2*x2
实验程序如下:
STACK_ADDR .set 0x0500 ;bottom of stack
;allocate data in .bss section
.bss a,2 ;allocate 5 word for variates
.bss x,2
.bss y,1
;allocate data in .data section
.data
table: ;data follows ...
.word 10,5
.word 8,6
.mmregs ;enable memory mapped registers
.global main ;define global symbols
.text
main:
stm #STACK_ADDR, SP ;set stack
stm #0x00a8, PMST ;relocate Interrupt Vector Table
stm #0x0000, SWWSR ;no software wait for all memory
stm #a, AR2 ;AR1 point to a
stm #table, AR3
rpt #1 ;move 2 ai values
mvdd *AR3+, *AR2+ ;from data memory into data memory
stm #x, AR2 ;AR1 point to a
rpt #1 ;move 2 xi values
mvdd *AR3+, *AR2+ ;from data memory into data memory
call SUM ;call function to do sum
;dead loop part to lock PC in a know area when program ends
dead_loop:
nop
nop
nop
b dead_loop
; y=a1*x1+a2*x2
SUM:
stm #a, AR3
stm #x, AR4
rptz A, #1
mac *AR3+, *AR4+, A
stl A, *(y
ret
;Interrupt Vector Table, for simplicity Only RESET interrupt is defined
.sect \"vectors\"
int_RESET:
b main ;when reset, jump to main
nop
nop
.space 124*16 ;no other interrupt used, keep them space
;end of lab1.s
4.实验结果描述:
本次实验是实现两个含有两个数的数组的乘加运算,即y=a1*x1+a2*x2。未修改前程序代码为“ .word 10,5”,存放在0x2004中的内容为0x006E,即结果y=0x006E,将程序中a[0]的值由10改为1运行后,即程序代码变为“ .word 1,5”,,再次观察结果发现存放在0x2004中的内容变为0x0026,即结果y=0x0026,存放在存储单元0x2004中。
四、实验结果与心得体会
本次实验使我对于CCS操作过程有了进一步的了解与熟悉,同时掌握了程序编译、连接、运行和调试的基本过程和TMS320C00系列汇编语言程序的基本格式,使我加深了对所学DSP知识的理解。
由于对于CCS使用还没有很熟练,在实验过程中还是遇到了一些关于CCS 操作上的问题,由于没有成
功的载入ccs_basic.gel,在编译,连接完成后,运行时没有产生可执行文件ccs_basic.out,在仔细检查后发现在工程视图中选中GEL files文件夹里没有载入ccs_basic.gel,重新载入并重新编译连接后就出来结果了。在观察存储器映象Map文件时,我按照要求将Map文件中的信息与cmd文件中的设置比较,并修改cmd中的内容保存后,再观察Map文件的信息,发现Map中的信息也有相应的改变,这表明存储器中的配置也发生了相应的改变。本次实验中实验代码ccs_basic.s是汇编程序,经过仔细阅读并结合教材读懂程序后,对其编译连接运行后,通过选择View→memory弹出的菜单中输入存储器地址观察其内容,本次实验是实现两个含有两个数的数组的乘加运算,未修改前,存放在0x2004
中的内容为0x006E,即结果Y=0x006E,将程序中a[0]的值由10改为1运行后,再次观察结果发现存放在0x2004中的内容变为0x0026,即结果Y=0x0026,存放在存储单元0x2004中。
本次实验我熟练掌握了CCS的操作过程,并对于TMS320C00系列汇编语言程序的基本格式以及汇编程序有了一定的掌握,同时巩固了所学知识,对于以后的学习打下了一定的基础。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务