实验二:数据存取实验.doc
4页实验二 数据存取实验一、 实验目的1、 了解 TMS320VC5416 内部存储器空间的分配及指令寻址方式;2、 学习使用 Code Composer Studio 修改、填充 DSP 内存单元的方法;3、 重点掌握直接寻址和间接寻址的相关指令及使用方法二 实验工具计算机、Code Composer Studio开发系统三.实验原理1、TMS320VC54x DSP 内部存储器资源介绍:C54x 片内有8 条16 位主总线: 4 条程序/ 数据总线和4 条地址总线,功能如下:-程序总线(PB )传送取自程序存储器的指令代码和立即操作数3 条数据中线(CB,DB,EB )将内部各单元连接在一起4 个地址总线(PAB 、CAB、DAB、EAB)传送执行指令所需的地址‘C54x 的总存储空间为192K 字,分成3 个可独立选择的空间:程序存储空间(64K 字),数据存储空间(64K 字),输入/输出(I/O)空间( 64K 字)程序区:0000-007Fh: OVLY 位= 1,保留空间OVLY 位=0,片外扩展存储器0080-7FFFh: OVLY 位= 1,片上DARAM0-3OVLY 位=0,片外扩展存储器8000-BFFFh: 片外扩展存储器C000-FEFFh: MP/MC 位=0 片上ROM ,4Kx16 位MP/MC 位=1 片外扩展存储器FF00-FF7Fh: MP/MC 位=0,保留空间MP/MC 位=1,片外扩展存储器FF80-FFFFh: MP/MC 位=0,片上中断向量表MP/MC 位=1,片外扩展中断向量表*数据区:0000-005Fh: 寄存器映射地址0060-007Fh: 暂存器 SPRAM0080-7FFFh: 片上 DARAM0-3,32Kx16 位8000-FFFFh: DROM 位=1,片上DARAM4-7DROM 位=0 ,片外扩展存储器*I/O 区:0000-FFFFh: 片外扩展区*扩展程序存储器空间:扩展程序存储器空间采用分页扩展方法,使程序空间可扩展到 8192K 字。
2.TMS320C54x 数据寻址方式介绍’C54x 共有7 种有效的寻址方式:*立即寻址:主要用于初始化例如:LD #10, A ;将立即数10 传送至累加器A*绝对寻址:利用16 位地址寻址存储单元例如:STL A,*(y) ; 将累加器的低16 位存放到变量与y 所在的存储单元中*累加器寻址:把累加器的内容作为地址例如:READA x ;按累加器A 作为地址读程序存储器,并存入变量 x 所在的数据存储器单元*直接寻址:利用数据页指针或堆栈指针寻址例如:LD @x,A ;(DP+x 的低 7 位地址)A*间接寻址:利用辅助寄存器作为地址指针例如:LD *AR1,A ; AR1为地址的存储单元中的数据加载到累加器A中*存储器映象寄存器寻址:快速寻址存储器映象器存器例如:LDM ST1,B ; ST1的内容加载到累加器 B中*堆栈寻址:压入/弹出数据存储器和 MMR(存储器映象寄存器)例如:PSHM AG ;(SP)-1=>(SP),(AG)=>TOS5.实验程序分析源程序 Memory.asm.global start ; 定义全局标号.mmregs.textstart:nopld #4,dp ;直接寻址,装载DP 值,页指针指向片内数据区 DARAM B0st #1,1 ; 绝对地址201H 开始的四个单元存 1,2,3,4st #2,2st #3,3st #4,4stm #205h,ar1 ; 间接寻址,使用辅助寄存器1rpt #3 ; 循环重复执行下条语句4 次st #1234h,*ar1+ ; 将绝对地址205H 开始的4 个单元存成1234H; 下面将201H 开始的8 个数读出; 存到2000H 开始的8 个单元stm #7h,ar3 ; 循环计数器 =7( 8 次循环)stm #201h,ar1 ; 源起始地址stm #2000h,ar2 ; 目的起始地址loop:ld *ar1+,T ; 将 ar1 指向单元内容读入T 寄存器,ar1 的值 +1st T,*ar2+ ; 将T 寄存器的值转存到 ar2 指向的目的地址,ar2 的值+1banz loop,*ar3- ; ar3 的值-1 ,循环计数不等于0 则循环xh:b xh ; 空循环.end四.实验步骤1.实验准备 (1) 设置Code Composer Studio 为C5416 Device Simulator 方式;(2) 启动Code Composer Studio。
双击桌面上“CCS 2(‘C5000)”图标,启动Code Composer Studio 2.02.打开工程文件打开菜单“Project”的“Open”项;选择C:\ti\Lab03-Memory 目录中的“Memory.pjt ”3.观察修改程序区⑴显示程序:选择菜单“View”的“Memory…”项;在“Title”中输入PROG,在“Address”项中输入0x1000,选择“Page”项为“Program”;单击“OK ”按钮;“PROG” 窗口中显示了从地址1000H 开始的程序内存;根据 cmd 文件中的设置,下载后的机器代码的入口应从1000H 处存放⑵修改程序区存储单元程序区单元的内容由 CCS 的下载功能填充,但也能用手动方式修改;双击“PROG”窗口地址“0x1000:”后的第一个数,显示 “Edit Memory”窗口,在“Data”中输入0x1234,单击“Done”按钮,观察“PROG”窗口中相应地址的数据被修改3)观察修改数据区①显示片内数据存储区 DARAM0:选择菜单“View”的“Memory…”项;在“Title”中输入DARAM0,在“Address”项中输入0x200;单击“OK ”按钮; “DARAM0” 窗口中显示了从地址200H 开始的数据内存;这片地址属于片内DARAM0 。
②显示片内数据存储区 DARAM1:按照步骤⑴打开“DARAM1”窗口显示从地址0x2000开始的片内DARAM1 区的数据单元③修改数据单元:数据单元也可以单个进行修改,只需双击想要改变的数据单元即可;选择菜单“Edit”、“Memory ”、“Fill… ”,在“Address ”项中输入0x200,在“Length”中输入 16,在“Fill”中输入0x11,单击“OK”按钮,可在 200H 开始的数据区中的头16 个单元填充统一的数0x11;观察“DARAM0”窗口的变化;同样请将0x2000 开始的头8 个单元的值用0 填充④访问未扩展的区域:当访问未扩展的存储单元时,将不能正确修改内容;选择菜单“View”的“Memory…”项;在“Title”中输入NO EXIST,在“Address”项中输入0xA000,选择“Page”项为“I/O ”;单击“OK”按钮; “NO EXIST” 窗口中显示了未扩展而不存在的I/O 空间内存;试着修改其中的单元,然后在窗口中单击鼠标右键选择“RefreshWindow”,可发现其他地址的内容也改变了,这说明此区域没有相对应的存储器存在4.运行程序观察结果(1)编译和下载程序:单击菜单“Option”、“Customuze…”,选择“Program Load Options”卡片,在“Load Program After Build”之前加上选择符号,单击“OK ”按钮,此设置完成在每次编译完成后将程序自动下载到DSP 上;选择菜单“Project”、“Rebuild All”,编译、连结和下载程序;观察 “PROG”窗口中的变化。
2)打开CPU 寄存器观察窗口:选择菜单“View”、“CPU Registers ”、“CPU Register”3)单步执行程序并观察结果:按F10 键单步运行,直到程序尾部的空循环语句;观察CPU寄存器窗口中DP、ACC 、ST0、AR0、AR1、AR2 的变化;观察“DARAM0 ”和“DARAM1”中的显示;体会用程序修改数据区语句的使用方法五.实验结果*实验程序运行之后,位于数据区地址201H 开始的8 个单元的数值被复制到了数据区2000H开始的8 个单元中程序中使用了立即寻址、直接寻址和间接寻址方式寻址方式的运用还有许多方法,可以完成复杂的寻址如果在下载程序的过程中,Code Composer Studio 报告xxxx 地址出现校验错误,可以使用内存显示和修改的方法,验证一下是否是该单元不能正确读写,以确定错误原因通过改写内存单元的方式,我们可以手工设置DSP 的一些状态位,从而改变DSP 工作的状态。





