DSP实验报告2.doc

上传人:叶*** 文档编号:35165679 上传时间:2022-08-20 格式:DOC 页数:6 大小:27.50KB
返回 下载 相关 举报
DSP实验报告2.doc_第1页
第1页 / 共6页
DSP实验报告2.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《DSP实验报告2.doc》由会员分享,可在线阅读,更多相关《DSP实验报告2.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验报告2 DSP汇编语言编程基础一 实验目的 1、了解DSP 的寻址方式;2、了解DSP 的汇编语言与C 语言混合编程。二、 实验器材1、安装有CCS 的PC 机一台;三、 实验内容1、建立一个工程;2、用汇编语言编程实现一个可被C 程序调用的例程。四、 实验步骤1、汇编语言和C 语言混合编程: 运行CCS , 建立一个工程, 取名exp2a , 并保存到c:timyprojectsxxxExperiment2目录下。 编辑如下C 文件, 取名exp2a.c 并保存到c:timyprojectsxxxExperiment2exp2a目录。/* Assembly routine */exter

2、n int sum(int *);/* define x as global array */int x2=0x1234,0x4321;/* define result s as global variable */int s;void main()s = sum (x); /* return sum product */ 编辑如下汇编文件, 取名exp2_sum.asm 并保存到c:timyprojectsxxxExperiment2exp2a目录。* exp2_sum.asm SUM subroutine* called by exp2a.c* Input: Array pointer*

3、Output: Return sum result in T0.global _sum_summov *AR0+,AC0 ; AC0 = x1add *AR0+,AC0 ; AC0 = x1+x2mov AC0,T0ret ; Return T0.end 编辑如下链接命令文件, 取名link.cmd 并保存到c:timyprojectsxxxExperiment2exp2a目录。-c-stack 0x800-sysstack 0x200-m link.mapMEMORY DARAM: origin = 0x200, len = 0xfe00SARAM: origin = 0x10000, le

4、n = 0x30000VECT: origin = 0x100, len = 0x100SDRAM: origin = 0x80000, len = 0x380000Flash: origin = 0x400000, len = 0x3e0000CPLD: origin = 0x800000, len = 0x20000SECTIONS.vectors: VECT.cinit: SARAM.text: SARAM.stack: SARAM.sysstack SARAM.sysmem: SARAM.cio: SARAM.data: SARAM.bss: SARAM.const: SARAM.gb

5、linit: SARAMfrt: SARAM.pinit: SARAM.sysinit: SARAM.far: SARAM.switch: SARAM.MEM$obj: SARAM.sysheap: SARAM 选择Project-Options-Linker-Library 标签,添加实时支持库rts55.lib。经文件查找,得到多条rts55.lib路径,选其一。C:tic5500cgtoolslibrts55.lib 编译并链接工程,下载exp2a.out,并选择Go-Main 命令。 在File菜单里选择Load Program,在Debug文件夹中选择exp2a.out文件,打开。C

6、CS把程序加载到目标系统DSP上,并打开Disassemble窗口,该窗口显示反汇编指令。 选择Debug Go-Main,程序将从Main函数开始执行。 观察并记录CPU 寄存器窗口中AC0、AR0、T0 的值,观察memory 中s和x 的内容,并记录s 的值。AC0=0000008624;AR0=0085DA;T0=0000 重新单步执行C 代码和汇编代码,观察C 编译器产生的汇编代码exp2a.asm,注意汇编程序的返回值是如何被传递到C 调用程序的。2、寻址方式实验。 编辑如下C 文件, 取名为exp2b.c , 并保存到c:timyprojectsxxxExperiment2目录。

7、exp2b.cInterfacing C with Assembly Langugageand using Different Addressing Modesextern void exp2b_1(void);extern void exp2b_2(void);extern int exp2b_3(int *, int *);extern int exp2b_4(int *, int *);int Ai8;int Xi8;int result1,result2;void main()exp2b_1();exp2b_2();result1 = exp2b_3(Ai, Xi);result2 =

8、 exp2b_4(Ai, Xi); 编辑如下汇编程序exp2b_1.asm,采用绝对寻址对数组Ai 进行初始化,Ai8=1,2,3,4,5,6,7,8。并保存到c:timyprojectsxxxExperiment2目录。* exp2b_1: Absolute Addressing Mode.def _exp2b_1.ref _Ai.text_exp2b_1; (1) Absolute addressingmov #1,*(_Ai) ; Absolute addressing modemov #2,*(_Ai+1) ; Initialize Ai8=1,2,3,4,5,6,7,8mov #3,

9、*(_Ai+2)mov #4,*(_Ai+3)mov #5,*(_Ai+4)mov #6,*(_Ai+5)mov #7,*(_Ai+6)mov #8,*(_Ai+7)ret.end 编辑如下汇编程序exp2b_2.asm,采用间接寻址对数组X 进行初始化,Ai8=9,3,2,0,1,9,7,1。并保存到c:timyprojectsxxxExperiment2目录。* exp2b_2: Direct Addressing Mode.def _exp2b_2.ref _Xi.text_exp2b_2; Direct addressingbtstclr #14,*(ST1),TC1 ; Turn o

10、ff CPL bits for direct addressing modebclr C54CMamov #_Xi,XDP ; Load direct addressing data-page pointer.dp _Ximov #9,_Xi ; Direct addressing modemov #3,_Xi+1 ; Initialize Xi8=9,3,2,0,1,9,7,1mov #2,_Xi+2mov #0,_Xi+3mov #1,_Xi+4mov #9,_Xi+5mov #7,_Xi+6mov #1,_Xi+7xcc continue,TC1bset CPL ; Turn CPL b

11、it back oncontinueret.end 编辑如下汇编程序exp2b_3.asm,采用间接寻址实现Ai 和X 的点乘。并保存到c:timyprojectsxxxExperiment2目录。* exp2b_3: Indirect Addressing Mode.def _exp2b_3.text_exp2b_3; Indirect addressingmpym *AR0+,*AR1+,AC0add AC1,AC0mpym *AR0+,*AR1+,AC1add AC1,AC0mpym *AR0+,*AR1+,AC1add AC1,AC0mpym *AR0+,*AR1+,AC1add AC

12、1,AC0mpym *AR0+,*AR1+,AC1add AC1,AC0mpym *AR0+,*AR1+,AC1add AC1,AC0mpym *AR0+,*AR1+,AC1add AC1,AC0mpym *AR0+,*AR1+,AC1add AC1,AC0mov AC0,T0ret.end 编辑如下汇编程序exp2b_4.asm,采用间接寻址,使用并行指令和重复指令提高代码的效率, 减少代码长度。并保存到c:timyprojectsxxxExperiment2目录。* exp2b_4: Paralle Processing.def _exp2b_4.text_exp2b_4; Indirec

13、t addressing with paralle processingmpym *AR0+,*AR1+,AC0| rpt #6macm *AR0+,*AR1+,AC0mov AC0,T0ret.end 在c:timyprojectsxxxExperiment2目录下建立工程exp2b,将link.cmd、exp2b.c、exp2b_1.asm、exp2b_2.asm、exp2b_3.asm 和exp2b_4.asm 加入工程,编译、连接工程,并下载exp2b.out。 在memory watch 窗口观察Ai 和Xi 的初始化值,在CPU 寄存器窗口观察点乘的计算过程。 对exp2b_3.a

14、sm 和exp2b_4.asm 的性能进行分析。五、 实验报告1、简述C 和汇编混合编程中的参数是如何传递的。 C 和汇编混合编程中有 C程序变量与汇编程序变量的共用问题。为了使程序更易于接口和维护,可以在汇编程序中引用与C程序共享的变量: .ref_to_dce_num,_to-dte_num,_to_dce_buff,_to_dte_buff 在汇编程序中引用而在C程序可直接定义的变量: unsigned char to_dte_buffBUFF_SIZE; /DSP发向PC机的数据 int to_dte_num; /缓冲区中存放的有效字节数 int to_dte_store; /缓冲区的

15、存放指针 int to_dte_read; /缓冲区的读取指针 这样经过链接就可以完成对应。 C 和汇编混合编程中有程序入口问题。在C程序中,程序的入口是main()函数。而在汇编程序中其入口由*.cmd文件中的命令决定,如:-e main_start;程序入口地址为 main _start。这样,混合汇编出来的程序得不到正确结果。因为C到ASM的汇编有默认的入口c-int00,从这开始的一段程序为C程序的运行做准备工作。这些工作包括初始化变量、设置栈指针等,相当于系统壳不能跨越。这时可在*.cmd文件中去掉语句:-e main_start。如仍想执行某些汇编程序,可以C函数的形式执行,如: main_start(); /其中含有其他汇编程序 但前提是在汇编程序中把_main_start作为首地址,程序以rete结尾(作为可调用的函数)的程序段,并在汇编程序中引用_main_start,即.ref _main_start。 2、对本次实验作出小结。 实验2中,建立了两个工程;并用汇编语言编程实现了一个可被C 程序调用的例程。通过实验,粗略了解了DSP 的寻址方式以及DSP 的汇编语言与C 语言的混合编程。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁