1、汕 头 大 学 实 验 报 告学院: 工学院 系: 电子系 专业: 电子信息工程 年级: 2009 姓名: 学号: 091410 实验时间: 2012-4-7 实验二、汇编寻址方式实验三、快速傅立叶变换(FFT)(1) 实验目的1、 了解DSP结构;2、 熟悉CCS开发环境;3、 熟悉DSP 54X EVM板的硬件环境;4、 掌握DSP 54X 汇编寻址方式;5、 熟悉汇编语言的逻辑和算术运算;6、 加深对DFT算法原理和基本性质的理解;7、 熟悉FFT的算法原理和FFT子程序的应用;8、 学习用FFT对连续信号和时域信号进行频谱分析的方法;9、 了解DSP针对FFT算法的特殊寻址方式。(2)
2、 实验原理1、 DSP 54X的寻址方式,指令的寻址方式是指:当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法;2、 FFT快速算法的特点3、 FFT的时间抽取法和蝶形运算的原理4、 DSP位码倒置的实现(3) 实验内容与基本要求1、 汇编寻址方式:(1) DSP 54X汇编初始化程序;(2) DSP 54X各种汇编寻址方式的源程序;(3) DSP 54X 汇编语言的逻辑和算术运算源程序。要求:运行程序,通过CCSViewCPU Registers, 观察各寄存器的 值,通过CCSViewMemory, 观察片内各数据地址的值。 2、快速傅立叶变换:1、初始化DSP2、编写位码倒置程序
3、3、编写蝶形运算程序4、编写功率谱计算程序5、FFT调用程序要求:对输入数据进行FFT变换,并计算功率谱,并将功率谱结果用CCS的观察图形工具来显示。(4) 实验程序框图 寻址方式: 主程序1 初始化程序 DSP初始化立即寻址绝对地址寻址累加器寻址直接寻址(DP指针)直接寻址(SP指针)间接寻址寄存器寻址堆栈寻址双操作数寻址程序存储器到数据存储器的复制(数据块移动)结束延时设置DP指针设置SP指针关中断设置SWWSR设置CLKMD结束 逻辑运算实验框图: 主程序2 初始化程序DSP初始化加法运算减法运算乘法运算除法运算平方运算逻辑与运算逻辑或运算逻辑异或运算双操作数寻址双操作数运算结束延时设置
4、DP指针设置SP指针关中断设置SWWSR设置CLKMD结束快速傅里叶变换(FFT)DSP初始化FFT数据输入位码倒置程序第一级蝶形运算第二级蝶形运算第三级至log2N级蝶形运算求功率谱运算用CCS仿真察看波形五、问题:1、解释addr程序中每一种寻址方式原理。T.set00EH ; .DSP 初始化,.set伪指令将00EH赋给T。BRC.set 01AH SWWSR.set028HCLKMD.set 058HDAT0.set000HDAT1.set001HDAT2.set002HDAT3.set003HDDAT0.set02104HDDAT1.set02105HDDAT2.set02106H
5、DDAT3.set03107HPDAT0.set01f00HPDAT1.set01f01HPDAT2.set01f02HPDAT3.set01f03H .def _main .def_c_int00.def _DELAY.text_c_int00:RPT#1000HNOPLD #40H,DP ;DP=40HSTM#4000H ,SP ;SP=4000HADDM#7FFH,*(SP) ; *(SP)= *(SP)+ #7FFHANDM#0FFFEH,*(SP) ; *(SP)= *(SP)& #0FFFEH SSBX INTM ;禁止中断STM #07FFFH,SWWSR;置外部等待时间 STM
6、#06004H,CLKMD ;设置时钟方式LD#0FFFFH,ACALL_DELAYSTM#087FBH,CLKMD ;设置时钟方式LD#0FFFFH,ACALL_DELAYB_main_main:RSBX CPLNOPNOPLD #1234h,A ;立即数寻址,把0x1234装入A,A=0x1234ST #5678h,*(DDAT1);DDAT1=0X2105,把0x5678装入DDAT1 指向的内存单元NOPNOPNOPLD #PDAT1,A;累加器寻址PDAT1=0X1F01,A=0X1F01READADAT2;DAT2=0X2002,把A所确定程序存储单元的一 个字,传送到DAT2所确
7、定的数据存储单元去NOPNOPNOPST #3210h,DAT3;直接寻址(DP指针)DAT3=0X2003,(0x2003)=0x3210NOPNOPNOPSSBX CPL ;CPL置1NOPNOPNOPST #9876h,DAT3 ;直接寻址(SP指针)SP=0X47FE+3=0x4801, (0x4801)=0x9876NOPNOPNOPRSBX CPL ;CPL置0NOPNOPNOPSTM #DDAT3,AR0;间接寻址DDAT3=0X3107,把0x3107装入AR0ST #9876h,*AR0 ;把9876H装入AR0指向的单元NOPNOPNOPMVDK DAT0,DDAT0 ;绝
8、对地址(dmad)寻址 DAT0=0X2000,DDAT0-0X2104,把 DAT0地址所指向的值装入DDAT0地址的值MVKD DDAT1,DAT1;DDAT1=0X2105,DAT1=0X2001,把 DDAT1 地址所指向的单元装入DAT1 地址的单元NOPNOPNOPMVDP DAT0,PDAT0;绝对地址(pmad)寻址PDAT0=0X1F00 把DAT0地址所指向的单元装入PDAT0 地址的单元MVDP DAT1,PDAT1; 把DAT1地址所指向的单元装入PDAT1 地址的单元NOPNOPNOPSTM #8888h,T;存储器映射寄存器寻址,T=8888H;NOPNOPNOPP
9、SHM T;堆栈寻址,先减小SP=SP-1,再把T值压入堆栈POPM T ;先从堆栈弹出数据,在增加SP值SP=SP+1。NOPNOPNOPSTM #4000h,AR0;程序存储器到数据存储器的复制RPT #0xff ;重复执行下一条指令FFH次MVPD 1000H,*AR0+ ;把1000H地址指向单元的值不断的赋给 (AR0+)NOPNOPNOPSTM#DDAT2,AR2 ;AR2=2106H; ST #1234h,*AR2 ;(2106H)=1234HSTM#DDAT3,AR3 ; AR3=3107H; ST #5678h,*AR3 ;(3107H)=5678HLD#0x1000,A ;
10、A=0000001000H SSBXFRCT ;FRCT=1,乘法器输出左移一位SSBXOVM ;OVM=1发出正数溢出目标累加器成正最大值(00 7FFF FFFFH)NOPNOP NOP NOPMAC *AR2+,*AR3+,A ;双操作数寻址,A=(AR2)*(AR3)+A;AR2和AR3地址加1NOPNOP NOPNOPNOPRSBXFRCT ;TRCT=0RSBXOVM ;OVM=0NOPNOPSSBX CPL ;CPL=1B$_DELAY:STLM A,BRCRPTB _DELAY1-1NOPNOPNOPNOP_DELAY1:RET.end2、通过查资料,以8点FFT为例,解释位倒序寻址。 位倒序表示:1010, 0101;0011,1100位倒序进位:进位不是加到左边一位,而是加到右边的那位。位倒序寻址其实是从高位加起的加法,所以要保证起始偏移地址是全0,怎么知道多少位的加法呢?AR0将能确定。fft变换一半是改进了的(速度快些),把2n点的数据组合成n个复数序列,偶地址作实部,虚地址作虚部。因此通常的fft的位倒序寻址是针对偶地址的数据,基地址跟着自己前面的偶地址走,紧跟在后面。可以看到是先排好0426 然后插入后面的1537,01 45 23 67 组成对。所以ar0的数值是n,因为000 100 010 加到110 就分配好地址了。