DSP硬件实验报告北邮
北邮 DSP硬件实验报告

目录第三章 (2)实验一 (2)实验二 (3)实验三 (4)实验四 (5)实验五 (9)实验六 (13)实验七 (17)第四章 (35)实验一 (35)第三章实验一.mmregs ;定义存储器映像寄存器.global _main ;全局符号,可在外部定义_main:stm #3000h,sp ;设置堆栈指针寄存器的值为3000hssbx xf ;置位状态寄存器xf=1,灯亮call delay ;调用延时子程序,延时rsbx xf ;将xf置0call delay ;调用delay函数b _main ;程序跳转到"_MAIN"nopnop;延时子程序delay:stm 270fh,ar3 ;设置辅助寄存器ar3值为9999loop1:stm 0f9h,ar4 ;设置辅助寄存器ar4值为249loop2:banz loop2,*ar4- ;寄存器ar4值减一,当其值不为0时跳转到loop2 banz loop1,*ar3- ;寄存器ar3值减一,当其值不为0时跳转到loop1 ret ;可选择延迟的返回nop ;空指令nop.end.mmregs.global _main_main:;store data 存入数据stm 1000h,ar1 ;address of internal memory 寄存器ar1地址1000hrpt #07h ;循环执行下一条指令8次st 0aaaah,*ar1+ ;将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中.;;read data then re-store 读取数据再存到别的寄存器中stm 7h,ar3 ; 寄存器ar3地址7hstm 1000h,ar1 ; 寄存器ar1地址1000hstm 1008h,ar2 ; 寄存器ar2地址1008hloop: ;循环的将1000H~1007H的八个单元中的数据COPY到1008H~100F的;八个存储单元中.ld *ar1+,t ;,把地址为ar1 的数据单元中的数据装到累加器t 中,ar1 = ar1 +1 st t,*ar2+banz loop,*ar3-here: ;死循环.b here.end.mmregs ;定义映像寄存器.global _main ;声明全局符号.text_main:stm 3100h,sp ;设置堆栈指针寄存器的值为3100hstm 1000h,ar1 ;设置辅助寄存器ar1值为1000hportr 8000h,*ar1 ;读入I/O 8000H数据,将其存储到数据空间的1000H nop ;NOP为空操作,起延时作用.nopportw *ar1,8001h ;将数据空间的1000H单元的数据,写出到I/O 8000H nopnop 5b _main ;程序跳转到"_MAIN"执行.nopnop.end.global _c_int00,_timer0 ;引用函数c_int00,引用了c中的函数.sect ".vecs" ;自定义一个已初始化段.vecsreset: b _c_int00 ;复位中断向量,跳转到主程序nopnopnmi: rete ;非屏蔽外部中断的输入引脚nopnopnop; software interruptssin17: .space 4*16 ;软件中断,内部中断,保留出中断向量的地址空间,将4*16的地址;存储在sin17~sin30sin18: .space 4*16sin19: .space 4*16sin20: .space 4*16sin21: .space 4*16sin22: .space 4*16sin23: .space 4*16sin24: .space 4*16sin25: .space 4*16sin26: .space 4*16sin27: .space 4*16sin28: .space 4*16sin29: .space 4*16sin30: .space 4*16int0: rete ;此处int0中断响应为0,设置rete响应中断并返回nopnopnopint1: rete ;此处int1中断响应为0,设置rete响应中断并返回nopnopnopint2: rete ;此处int2中断响应为0,设置rete响应中断并返回nopnopnoptint0: b _timer0 ;同步串口0(McBSP0)接受中断,直接返回nopnopbrint0: rete ;同步串口0(McBSP1)发送中断,直接返回nopnopnopbxint0: rete ;同步串口0(McBSP1)发送中断,直接返回nopnopnopdmac0: rete ;RESERVED OR DMA CHANNEL0 INTERRUPTnopnopnoptint1_dmac1: rete ;TIMER1 INTERRUPT OR DMA CHANNEL1 INTERRUPTnopnopnopint3: rete ;外部中断int3,允许中断并返回nopnopnophpint: rete ;HPI INTERRUPTnopnopnopbrint1_dmac2: rete ;McBSP1 RECEIVE INTERRUPT OR DMA CHANNEL 2 INTERRUPT nopnopnopbxint1_dmac3: rete ;McBSP1 TRANSMIT INTERRUPT OR DMA CHANNEL 3 INTERRUPT nopnopnopdmac4: rete ;DMA CHANNEL 4 INTERRUPTnopnopnopdmac5: rete ;DMA CHANNEL 5 INTERRUPTnopnopnop; ****************************结束*****************************;*************************************************************//*;* 文件名称: exp04.c;* 适用平台: EXPIII+实验系统;* CPU类型: DSP TMS320VC54X;* 软件环境: CCS3.1 (5000系列);* 试验接线: 1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54x CPU板的跳线J2的1、2短接;* (HPI 8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;;* CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);;* 试验现象: LED灯(LED1~LED8)以一定的间隔时间不停闪亮变化;;*************************************************************//************************文件预处理***************************/#include "tms320uc5402.h"/*************************************************************//********************全局变量定义与初始化*********************/ioport unsigned port8001;unsigned int show=0x00aa;unsigned int num=0x0000;/*************************************************************//*******************函数、子程序声明与定义********************/void sys_ini() //系统初始化子程序{asm(" ssbx INTM"); //全局禁止所有可屏蔽中断PMST&=0x00FF; //(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间SWWSR=0x7000; //io空间7个等待周期,程序与数据空间0个等待周期CLKMD=0x17FA; //CLKOUT=2*CLKIN=2*10M=20M,自动延时最长时间}void timer0_ini() //定时器0初始化子程序{TCR|=0x0010; //停止定时器0PRD=0x2710; //PRD=10000(D)TCR|=0x000A; //TDDR=10(D),所以定时器时钟=1/(20M/10/10000)=5msIMR=0x0008; //使能定时器0中断IFR=0xFFFF; //清除所有中断标志位asm(" rsbx INTM"); //全局使能可屏蔽中断TCR&=0xFFEF; //开始定时器0TCR|=0x0020; //复位定时起0}/*************************************************************//*****************中断服务子程序声明与定义********************/interrupt void timer0() //定时器0中断子程序{if(num==200) //记200次定时器中断,时间=200*5ms=1s{show=~show; //取反num=0;}elsenum++;return;}/*************************************************************//**************************主程序*****************************/ void main(void){sys_ini();timer0_ini();for(;;){port8001=show;}}/***************************结束******************************/实验五Initial.asm.mmregs.global _initial.text_initial:NOPLD #0, DP ;重置数据指针,为DP寄存器赋值0;DP是状态寄存器ST0 的低9 位,和7 位(数据存储器地址)构成16 位数据存储区地址STM #0, CLKMD ;设置时钟模式寄存器的值为0;可通过调整CLKMD 寄存器改变CPU 时钟。
北京邮电大学_dsp_matlab实验报告

数字信号处理实验报告实验名称:数字信号处理实验学生姓名:班级:班内序号:1.实验要求假设信号x(n) 由下述信号组成:请选择合适的长度N 和窗函数,用DFT 分析其频谱,得到清楚的三根谱线。
2.实验代码和实验结果N = 1000; % Length of DFTn = [0:1:N-1];xn = 0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);Xk = fft(xn,N);k=[0:1:N-1];subplot(5,1,1);stem(k,abs(Xk(1:1:N)));title('DFT x(n)');xlabel('k');axis([140,240,0,6])subplot(5,1,2);stem(k, abs(Xk(1:1:N)),'r');%画出sin(0.3npi)-cos(0.302npi-pi/4) axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*n) ');xlabel('k');subplot(5,1,3);stem(k, 1000*abs(Xk(1:1:N)),'g');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n) ');xlabel('k');subplot(5,1,4);stem(k,0.01*abs(Xk(1:1:N)),'k');%画%sin(0.3npi)-cos(0.302npi-pi/4)axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*n) ');xlabel('k');subplot(5,1,5);stem(k, 10*abs(Xk(1:1:N)),'m');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n) ');xlabel('k');结论:由上图及过程可知,当DFT变换长度为1000时所得到的谱线非常理想。
DSP硬件实验报告-北邮

北京邮电大学DSP硬件实验报告学院: 电子工程学院专业:姓名:学号:班级:实验一常用指令实验一、实验目的熟悉DSP开发系统的连接了解DSP开发系统的组成和结构和应用系统构成熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。
二、实验步骤与内容(一)简单指令程序运行实验源程序:;File Name:exp01.asm;the program is compiled at no autoinitialization mode --程序在非自动初始化模式下编译.mmregs --(enter memory-mapped registers into the symbol table) --进入记忆映射注册进入符号表.global _main --(identify one or more global(external)symbols)--定义一个或多个全局变量_main:stm(累加器的低端存放到存储器映射寄存器中) #3000h,sp(堆栈指针寄存器);堆栈指针的首地址设为#3000hssbx(状态寄存器位置位)xf ;状态寄存器位置位,灯亮call (非条件调用,可选择延迟)delay(存储器延时) ;调用delay函数延时rsbx(状态寄存器复位)xf ;状态寄存器位复位,灯灭call delay ;调用delay函数延时b (累加器)_main ;可选择延迟的无条件转移,循环执行nop(无操作)nop;delay .5 seconddelay: ;延迟0.5秒stm 270fh,ar3 (辅助寄存器3) ;把地址存放到存储器映射寄存器中loop1:stm 0f9h,ar4 (辅助寄存器4);把地址存放到存储器映射寄存器中loop2:banz loop2,*ar4- ;AR4不为0时转移,指针地址减一banz loop1,*ar3- ; 若不为0,ar3减1,共进行10000*250次跳转ret (可选择延迟的返回 pc=sp++) ;return,返回nopnop;stm 2 cycles;banz when TRUE 4 cycles; FALSE 2 cycles;0f9h=>249d;270fh=>9999d.end实验现象XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;(二)资料存储实验源程序:*File Name:exp02.asm;get some knowledge of the cmd file;the program is compiled at no autoinitialization mode.mmregs.global _main_main:;store datastm 1000h,ar1 ;ar1映射到内存1000h位; stm 5000h,ar1 ;address of exterior memoryrpt(循环执行下一条指令,计数为短立即数) #07h ;循环执行下一条指令8次st(存储T寄存器的值) 0aaaah,*ar1+ ;data 存储寄存器的值;read data then re-storestm 7h,ar3 ;设置ar3; stm 5000h,ar1 ;address of exterior memory; stm 5008h,ar2 ;address of exterior memorystm 1000h,ar1 ;设置ar1为1000hstm 1008h,ar2 ;设置ar2为1008hloop:ld *ar1+,t ;把单数据存储操作数装入T寄存器中st t,*ar2+ ;存储T寄存器的值banz loop,*ar3- ;循环7次here:b here ;可选择延迟的无条件转移,循环执行.end实验目的:;本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
北邮电子DSP硬件报告

DSP硬件课程实验报告学院:电子工程学院班级: 2011211203学号: 2011210876姓名:孙月鹏班内序号: 04实验一:常规指令实验一、 实验目的1.熟悉DSP 开发系统的连接2.了解DSP 开发系统的组成和结构和应用系统构成3.熟悉常用C54X 系列指令的用法(程序寻址,寄存器,I/O 口,定时器,中断控制)。
二、 实验设备计算机,CCS 2.0版软件,DSP 仿真器,实验箱。
三、 实验操作方法1、系统连接进行DSP 实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP 开发系统与计算机连接有问题。
2、运行CCS 程序先实验箱上电,然后启动CCS ,此时仿真器上的“绿色小灯”应点亮,并且CCS 正常启动,表明系统连接正常;否则仿真器的连接、JTAG 接口或CCS 相关设置存在问题,掉电,检查仿真器的连接、JTAG 接口连接,或检查CCS 相关设置是否正确。
四、代码注释与实验结果1)简单指令程序运行实验①代码及注释.mmregs ;定义储存器映像寄存器.global _main ;全局符号_main:stm #3000h,sp ;3000h 放入堆栈指针寄存器的首地址中 ssbx xf ;将对外接口XF 置1,此时灯亮call delay ;调用延时子程序,延时rsbx xf ;将XF 置0,call delay ;调用延时子程序,b _main ;程序跳转到"_MAIN"nop ;无任何操作nop;延时子程序delay:PCI/USB/EPP 接口 JTAG 接口 计 算 机 仿 真 器 用户 开发板;2*16*16*16+7*16*16+15=9999loop1: ;循环1stm 0f9h,ar4 ;将ar4的值赋为15*16+9=249loop2: ;循环2banz loop2,*ar4- ;指针地址每次减1,ar4不为0时重复执行loop2 banz loop1,*ar3- ;同上ret ;可选择延迟的返回nop ;无操作nop②程序运行原理:此程序为灯闪烁程序。
北邮 DSP 实验二实验报告

实验二:数字信号的 FFT 分析题目1假设信号 x(n) 由下述信号组成:()0.001*cos(0.45)sin(0.3)cos(0.302)4x n n n n ππππ=+-- 这个信号有两根主谱线 0.3pi 和 0.302pi 靠的非常近,而另一根谱线 0.45pi 的幅度很小,请选择合适的长度 N 和窗函数,用 DFT 分析其频谱,得到清楚的三根谱线。
步骤:1.编写离散傅里叶变换DFT 函数:function [Xk] = dft(xn,N)% Computes Discrete Fourier Transform Coefficients% [Xk] = dft(xn,N)% Xk = DFT coeff. array over 0 <= k <= N-1% xn = input signal% N = length of DFTn = [0:1:N-1]; % row vector for nk = [0:1:N-1]; % row vecor for kWN = exp(-j*2*pi/N); % Wn factornk = n'*k; % creates a N by N matrix of nk valuesWNnk = WN .^ nk; % DFT matrixXk = xn * WNnk; % row vector for DFT coefficients2.代码实现:n=0:1:999;x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-0.25*pi);stem(n,x);title('signal x(n), 0<=n<=999');xlabel('n');X=dft(x,1000);% 计算1000点DFT magX=abs(X(1:1:501));% 镜像对称,只画出一半 k=0:1:500;w=2*pi*k/1000;stem(w/pi,magX);title('DTFT Magnitude');xlabel('frequency in pi units');axis([0.29,0.31,0,500]);xlabel('frequency between 0.29pi and 0.31pi');axis([0.44,0.46,0,0.5]);xlabel('frequency between 0.44pi and 0.46pi');3.图片:4.分析:x(n)由3个正弦函数叠加而成,周期分别是40, 20, 1000。
北邮信号与信息处理DSP实验二

北邮信号与信息处理DSP实验二信号与信息综合处理实验报告学院:班级:姓名:学号:实验二 FFT 实现1. 实验目的进一步熟悉CCS v5的开发环境,掌握调试的要素,并理解FFT 的过程。
2. 实验原理2.1FFT 变换(1) FFT 算法:[]122()()(/2)0,1,...,1()()(/2)N n Nx n x n x n N n x n x n x n N W =++⎧⎪=-⎨=-+⎪⎩,/2111/20/2122/20()(2)()()(21)()N nr N n N nr N n X k X r x n W X k X r x n W -=-=⎧==⎪⎪⎨⎪=+=⎪⎩∑∑(2) 蝶形运算图:(3) 实现函数:DSP_fft(w, N, x, y)。
2.2IFFT变换(1)算法实现:(2)实现流程:2.3SDRAM(1)EMIFA_Config:在csl_emifa.h中声明了一个结构体EMIFA_Config,用来配置EMIFA。
结构体中声明的12个32位无符号整形变量为EMIFA总线的12个接口寄存器;(2)指定SDRAM数据空间:#pragmaDATA_SECTION(sdram_data,".off_ram");unsigned int sdram_data[0x10000];上述代码含义为定义一个全局变量sdram_data[0x10000],将它指定到自定义的数据空间段off_ram中,其中函数具体用法为#pragma DATA_SECTION(函数名或全局变量名,"用户自定义在数据空间的段名";(3)CMD文件:DSP系统中存在大量的存储器,CMD文件描述物理存储器的管理、分配和使用情况,用于DSP 代码的定位。
3.程序功能3.1FFT变换通过给定的旋转因子,利用DSP_fft (w, N, x, y ) 函数,对给定64点序列进行FFT变换,其中N 为变换点数,具体说明如下:(1)w[64]为64点FFT的旋转因子,由tw_fft16x16.exe生成;(2)x[128]内存放原序列,即输入时域信号的实部虚部按顺序排列;(3)y[128]内存放FFT变换后的序列,实部虚部按顺序排列;(4)m[64]内存放FFT变换后64点模值的平方。
第二次DSP上机实验报告 MATLAB实验报告

第二次DSP上机实验报告 MATLAB实验报告第二次DSP上机实验报告 MATLAB实验报告北京邮电大学信息与通信工程学院DSP--MATLAB实验报告实验名称:学生姓名:班级:班内序号:学号:日期:1.实验要求与目的要求:(1)用DFT分析频谱,得到高分辨率频谱清楚的谱线;(2)利用基2时间抽选的FFT算法,计算有限点的DFT,并与理论值相比较。
目的:掌握(a)用傅立叶变换进行信号分析时基本参数的选择。
(b)经过离散时间傅立叶变换(DTFT)和有限长度离散傅立叶变换(DFT)后信号频谱上的区别,前者DTFT时间域是离散信号,频率域还是连续的,而DFT在两个域中都是离散的。
(c)离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。
(d)获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。
2关键算法分析第1页北京邮电大学信息与通信工程学院代码的重点是利用fft函数计算离散序列的DFT,难点是矩阵的加减乘除及乘方中所涉及的matlab语句的特点。
实验代码如下:(1)N=1000;n=(0:N-1);y=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);y=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);XK=fft(y,N);--fft函数两个参数分别是进行DFT变换的序列,及DFT 的长度subplot(3,1,1);stem(n,y);title("时域波形");xlabel("n");ylabel("y");subplot(3,1,2);stem(abs(XK),".");axis([0,500,0,600]);--限定x 轴与y轴的范围title("频域前500点波形");xlabel("k");ylabel("XK");subplot(3,1,3);stem(abs(XK),".");axis([800,900,0,600]);--x轴的范围很小,目的是能看到两条很近的谱线title("频域后500点部分波形");xlabel("k");ylabel("XK");(2)N=25;Q=0.9+j*0.3;n=(0:24);x=Q.^n;WN=exp(-j*2*pi/N);k=(0:24);WK=WN.^k;XK=(1-Q.^N)./(1-Q*WK);stem(XK);---理论值的计算XK1=fft(x,32);--32点基2时间抽选法的计算subplot(3,1,1);stem(n,x);title("时域波形");xlabel("n");ylabel("x");subplot(3,1,2);stem(XK);title("频域理论值");xlabel("k");ylabel("XK");subplot(3,1,3);stem(XK1);title("频域波形");xlabel("k");ylabel("XK1");第2页北京邮电大学信息与通信工程学院3.程序运行结果(1)(2)第3页北京邮电大学信息与通信工程学院4.问题分析这次实验的题目相对简单,编程过程中遇到的问题主要是矩阵的加减乘除及乘方运算所对应的matlab语句的规则和fft函数的使用,fft函数的使用方法通过help语句便可查得,其两个参数:第一个是指进行fft运算的序列,第二个值fft运算的长度。
北邮信号与信息处理DSP实验三剖析

信号与信息综合处理实验报告学院:信息与通信工程学院班级:2013211124姓名:王丹頔学号:2013210659实验三FIR滤波器实现1.实验目的进一步熟悉CCS v5的开发环境,掌握调试的要素,并理解FIR的过程。
2.实验原理2.1AIC23(1)AIC23相关介绍图1 AIC23结构图图2 AIC23编码器控制寄存器图3 AIC23寄存器集合图4 采样速率设置图5 采样率可配参数(2)void DSK6416_init()-设置所有的CPLD寄存器到上电状态,初始化内部BSL数据结构;-在使用任何BSL函数之前都必须调用。
(3)DSK6416_AIC23_openCodec函数-DSK6416_AIC23_CodecHandle DSK6416_AIC23_openCodec (int id, DSK6416_AIC23_Config *Config);-id:指定使用哪个编码器,DSK6416上为id=0;-Config:指向包含编码器寄存器值的结构,以该结构中的值初始化寄存器;-调用成功:返回编码器句柄;失败:返回INV常数(-1)。
(4)DSK6416_AIC23_write函数-Int16 DSK6416_AIC23_write(DSK6416_AIC23_CodecHandle hCodec, Int32 val);-hCodec, Val:编码器句柄,写入编码器的值;- 返回TRUE :数据成功写入; - 返回FALSE :数据端口忙。
(5) DSK6416_AIC23_closeCodec 函数- DSK6416_AIC23_closeCodec(DSK6416_AIC23_CodecHandle hCodec); - 关闭编码器。
2.2 FIR 滤波器实现(1) FIR 滤波器介绍滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京邮电大学DSP硬件实验报告学院: 电子工程学院专业:姓名:学号:班级:实验一常用指令实验一、实验目的熟悉DSP开发系统的连接了解DSP开发系统的组成和结构和应用系统构成熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。
二、实验步骤与内容(一)简单指令程序运行实验源程序:;File Name:exp01.asm;the program is compiled at no autoinitialization mode --程序在非自动初始化模式下编译.mmregs --(enter memory-mapped registers into the symbol table) --进入记忆映射注册进入符号表.global _main --(identify one or more global(external)symbols)--定义一个或多个全局变量_main:stm(累加器的低端存放到存储器映射寄存器中) #3000h,sp(堆栈指针寄存器);堆栈指针的首地址设为#3000hssbx(状态寄存器位置位)xf ;状态寄存器位置位,灯亮call (非条件调用,可选择延迟)delay(存储器延时) ;调用delay函数延时rsbx(状态寄存器复位)xf ;状态寄存器位复位,灯灭call delay ;调用delay函数延时b (累加器)_main ;可选择延迟的无条件转移,循环执行nop(无操作)nop;delay .5 seconddelay: ;延迟0.5秒stm 270fh,ar3 (辅助寄存器3) ;把地址存放到存储器映射寄存器中loop1:stm 0f9h,ar4 (辅助寄存器4);把地址存放到存储器映射寄存器中loop2:banz loop2,*ar4- ;AR4不为0时转移,指针地址减一banz loop1,*ar3- ; 若不为0,ar3减1,共进行10000*250次跳转ret (可选择延迟的返回 pc=sp++) ;return,返回nopnop;stm 2 cycles;banz when TRUE 4 cycles; FALSE 2 cycles;0f9h=>249d;270fh=>9999d.end实验现象XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;(二)资料存储实验源程序:*File Name:exp02.asm;get some knowledge of the cmd file;the program is compiled at no autoinitialization mode.mmregs.global _main_main:;store datastm 1000h,ar1 ;ar1映射到内存1000h位; stm 5000h,ar1 ;address of exterior memoryrpt(循环执行下一条指令,计数为短立即数) #07h ;循环执行下一条指令8次st(存储T寄存器的值) 0aaaah,*ar1+ ;data 存储寄存器的值;read data then re-storestm 7h,ar3 ;设置ar3; stm 5000h,ar1 ;address of exterior memory; stm 5008h,ar2 ;address of exterior memorystm 1000h,ar1 ;设置ar1为1000hstm 1008h,ar2 ;设置ar2为1008hloop:ld *ar1+,t ;把单数据存储操作数装入T寄存器中st t,*ar2+ ;存储T寄存器的值banz loop,*ar3- ;循环7次here:b here ;可选择延迟的无条件转移,循环执行.end实验目的:;本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
在CCS 中可以观察DATA内存空间地址0X1000~0X100F值的变化。
实验现象:在CCS的“View”下拉菜单中的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;单击“Halt”暂停程序运行。
(三):I/O实验源程序:;File Name :exp03.asm;learn how to operate the I/O ports;get some knowledge of the rts.lib file;in the I/O space 0x0000=>8 switches; 0x0001=>8 LEDs.mmregs.global _main.text_main:stm 3100h,sp ;堆栈指针的首地址设为#3100hstm 1000h,ar1 ;define the address,定义ar1的地址;define the addressportr 00h,*ar1 ;从端口00h读出开关状态,存入ar1中。
*ar1=port(00h)nopnopportw *ar1,01h ;将ar1的内容(开关状态)写入到led灯上(输入到01h),控制灯的亮灭nopnopb _main ;寻循环执行nopnop.end;实验现象;任意调整K0—K7开关,可以观察到对应LP0—LP7灯“亮”或“灭”(四):定时器实验源程序【初始化程序】.mmregs.global _initial_initial:stm 300h,ar1 ;初始化300h 数据地址,设置ar1的地址st #00h,*ar1 ;辅助寄存器ar1指向#00hstm 302h,ar1 ;初始化 302h 数据地址,设置ar2的地址st #00h,*ar1 ;辅助寄存器ar1指向#00hstm 200h,ar1st #5555h,*ar1stm 201h,ar1st #0aaaah,*ar1stm 202h,ar1st #400h,*ar1ssbx 1,11 ;将ST1.INTM置为1,停止所有中断stm 0ffffh,ifr ;清除所有中断标识 ifr:中断标志寄存器stm 00h,imr ;将立即数寄存器(imr)置为0,停止所有中断stm 410h,tcr ;停止计时器tcr:发送控制寄存器stm 4e1fh,prd ;将初始时间设为4e1fhstm 420h,tcr ;开始计时器stm 08h,imr ;允许计时器中断rsbx 1,11 ;将ST1.INTM置为0,开始所有中断ret【端口程序】(定义管脚).mmregs.global _porta.global _portb_porta:stm 304h,ar1 ;设置ar1地址st 5555h,*ar1 ;辅助寄存器ar1指向5555hportw *ar1,01h ;ar1的值做输出控制小灯亮灭ret_portb:stm 304h,ar1 ;设置ar1地址st 0aaaah,*ar1 ;辅助寄存器ar1指向0aaaahportw *ar1,01h ;ar1的值控制亮灭ret【向量程序】.sect ".vectors".ref _c_int00 ;C程序入口.ref _timer ;时间中断点.align 0x80 ; 必须被连结到页边界RESET: ; 重设向量BD _c_int00 ;到C入口点的分支STM #200,SP ;堆栈大小为200 SP:堆栈寄存器nmi: RETE ;启动中断并从一个返回NOPNOPNOP; 软件中断sint17 .space 4*16sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETENOPNOPNOPint1: RETENOPNOPNOPint2: RETENOPNOPNOPtint: b _timer ;设置实用time中断 NOPNOPrint0: RETENOPNOPNOPxint0: RETENOPNOPNOPrint1: RETENOPNOPNOPxint1: RETENOPNOPNOPint3: RETENOPNOPNOP.end实验现象单击“Run”运行,可观察到LED灯(LP0—LP7)以一定的间隔时间不停摆动;单击“Halt”,暂停程序运行,LED灯停止闪烁;.单击“Halt”,暂停程序运行,LED灯停止闪烁。
(五):INT2中断实验源程序【初始化程序】.mmregs.global _initial.text_initial:stm 300h,ar3 ;初始化数据 300h ar3:辅助寄存器st #00h,*ar3 ;辅助寄存器ar3指向#00hstm 302h,ar4 ;初始化数据 300h ar4:辅助寄存器st #00h,*ar4ssbx 1,11 ;将st1.intm置为1,停止所有中断stm 00h,imr ;将立即数置0,停止所有中断 imr:立即数寄存器stm 0ffffh,ifr ;清除所有中断标志 ifr:中断标志寄存器stm 04h,imr ;允许int2 中断rsbx 1,11 ;允许所有中断ret.end【端口程序】与【向量程序】参见实验四。
.实验现象单击“Run”运行程序,反复拨动开关K0,观察LP1—LP7 LED灯亮灭变化;单击“Halt”暂停程序运行,反复拨动开关K0,LP1—LP7 LED灯亮灭不发生变化。
实验二:A/D采样实验实验目的1.掌握利用TLV320AD50实现A/D转换的技术基本原理和常用方法。
2.学会DSP的多信道缓冲串口的应用方法。
3.掌握并熟练使用DSP和AD50的接口及其操作。
4.通过实验加深对DSP系统频谱混叠认识.源程序:【C程序】extern void InitC5402(void); /*创建初始化C5402的函数,返回值为空*/extern void OpenMcBSP(void); /*创建打开McBSP端口的函数,返回值为空;*/extern void CloseMcBSP(void); /*创建关闭McBSP端口函数*/extern void READAD50(void); /*创建从AD50的数据流中读取数据的函数;AD50:硬件端口*/void main(void) /*主函数开始*/{InitC5402(); /* 初始化 C5402 DSP */OpenMcBSP(); /*调用函数,打开McBSP端口*/while (1){READAD50(); /*从AD50的数据流中读取数据,完成AD转换 */}}【汇编程序】.global _InitC5402 ;全局符号定义_InitC5402(初始化C5402).global _OpenMcBSP ;全局符号定义_OpenMcBSP(打开McBSP).global _CloseMcBSP ;全局符号定义_CLoseMcBSP(关闭McBSP).global _READAD50 ;全局符号定义_READAD50(读取AD50数据流).global _WRITEAD50 ;全局符号定义_WRITEAD50(向AD50写入数据流).include MMRegs.h ;引入头文件MMRegs.h _InitC5402:NOPLD #0, DP ; 重置数据存储器页指针STM #0, CLKMD ; 对DSP时钟进行软件设置STM #0, CLKMD ; (在设置之前转到分线规模式)STM #0x4007, CLKMD ; 将C5402 DSP时钟设置到40Hz******* Configure C5402 System Registers *******;配置C5402系统寄存器STM #0x2000, SWWSR ; 为IO空间设置两个等待周期;SWWSR:外部总线S/W等待状态寄存器;为数据和监督空间设置0个等待周期STM #0x0000,BSCR ; 为堆栈转换寄存器设置等待状态; BSCR:外部总线块转换控制寄存器; 堆栈空间为64k,之间没有多余的循环; 连续的监督/数据读取STM #0x1800,ST0 ; 为状态寄存器0进行预设值STM #0x2900,ST1 ; 为状态寄存器1进行预设值(note:INTX=1)STM #0x00A0,PMST ; PMST:处理器方式状态寄存器;OVLY=1,向量指向0080h******* Set up Timer Control Registers *******;(设置时钟控制寄存器)STM #0x0010, TCR ; 停止on–chip计时T C R定时器控制寄存器; 计时器0用作主循环的计时器******* Initialize McBSP2 Registers *******;(初始化 McBSP2 (用来创建设备配置)寄存器)STM SPCR1, McBSP2_SPSA ; 设置SPCR1的寄存器地址STM #0000h, McBSP2_SPSD ; McBSP2 recv = left–justify ; 通过框架同步产生接受中断STM SPCR2, McBSP2_SPSA ; 设置SPCR2的寄存器地址; 通过框架同步产生传输中断STM #0000h, McBSP2_SPSD ; McBSP2 Tx(异步传输); 在SW断点之后运行STM RCR1, McBSP2_SPSA ; 设置RCR1的寄存器地址 ;RCR1:接收控制寄存器STM #0040h, McBSP2_SPSD ; 接收框架1长度=16 bitsSTM RCR2, McBSP2_SPSA ; 设置RCR2的寄存器地址STM #0040h, McBSP2_SPSD ; 接收相位=1; 设置框架2长度为16bitsSTM XCR1, McBSP2_SPSA ; 设置XCR1的寄存器地址STM #0040h, McBSP2_SPSD ; 设置与接收(recv)相同STM XCR2, McBSP2_SPSA ; 设置XCR2的寄存器地址STM #0040h, McBSP2_SPSD ; 设置与接收(recv)相同STM PCR, McBSP2_SPSA ; 设置PCR的寄存器地址STM #000eh, McBSP2_SPSD ; 时钟和框架从外部产生(slave) ******* Finish DSP Initialization *******;(结束DSP初始化)STM #0x0000, IMR ; 关闭外围中断STM #0xFFFF, IFR ; 清除中断的标志RET ; 返回主程序NOPNOP******* Waiting for McBSP0 RX Finished *******;(等待McBSP0异步接收结束)IfRxRDY1:NOPSTM SPCR1, McBSP2_SPSA ; 启动 McBSP2 RxLDM McBSP2_SPSD, AAND #0002h, A ; 隐藏已经接受到的bit(可以用来代替系列端口中断)BC IfRxRDY1, AEQ ; 继续寄存(checking)NOPNOPRET ; 返回NOPNOP******* Waiting for McBSP0 TX Finished *******;(等待McBSP0异步传输结束)IfTxRDY1:NOPSTM SPCR2, McBSP2_SPSA ; 启动 McBSP2 TxLDM McBSP2_SPSD, AAND #0002h, A ; 隐藏已经传输的bitBC IfTxRDY1, AEQ ; 继续寄存NOPNOPRET ; 返回NOPNOP******************************************_OpenMcBSP:rsbx xf ;寄存器xf复位为0call wait ;非条件调用等待状态NOPSTM SPCR1, McBSP2_SPSA ; 启动 McBSP0 RX 以读入 AD 数据LDM McBSP2_SPSD,AOR #0x0001, ASTLM A, McBSP2_SPSD ;隐藏已经接受到的bitSTM SPCR2, McBSP2_SPSA ; 启动 McBSP0 TX 以 DTMF 输出LDM McBSP2_SPSD,AOR #0x0001, ASTLM A, McBSP2_SPSD ;隐藏已经输出的bitLD #0h, DP ; 装载数据页0rpt #23 ;循环执行NOPssbx xf ;寄存器xf置位为1NOPNOPCALL IfTxRDY1 ;非条件调用 IfTxRDY1 STM #0x0001, McBSP2_DXR1 ;请求二级传送NOPCALL IfTxRDY1 ; 非条件调用 IfTxRDY1STM #0100h, McBSP2_DXR1 ;将00h写入到寄存器1CALL IfTxRDY1 ;非条件调用 IfTxRDY1STM #0000h, McBSP2_DXR1;NOPNOPrpt #20hnopCALL IfTxRDY1 ;非条件调用 IfTxRDY1STM #0x0001, McBSP2_DXR1 ;请求二级传送CALL IfTxRDY1 ;非条件调用 IfTxRDY1STM #0200h, McBSP2_DXR1 ;将00h写入到寄存器2CALL IfTxRDY1STM #0000h, McBSP2_DXR1CALL IfTxRDY1STM #0x0001, McBSP2_DXR1 ;请求二级传送CALL IfTxRDY1STM #0300h, McBSP2_DXR1 ;将00h写入到寄存器3CALL IfTxRDY1STM #0000h, McBSP2_DXR1CALL IfTxRDY1STM #0x0001, McBSP2_DXR1 ;请求二级传送CALL IfTxRDY1STM #0490h, McBSP2_DXR1 ;将00h写入到寄存器4;通过内部DPLL bypass internal DPLL;并且选择抽样频率and select the Sample FrequencyCALL IfTxRDY1STM #0000h, McBSP2_DXR1RETNOPNOP*********************_CloseMcBSP:STM SPCR1, McBSP2_SPSA ; 关闭 McBSP0 RXLDM McBSP2_SPSD,AAND #0xFFFE, ASTLM A, McBSP2_SPSDSTM SPCR2, McBSP2_SPSA ; 关闭 McBSP0 TXLDM McBSP2_SPSD,AAND #0xFFFE, ASTLM A, McBSP2_SPSDRPT #5RETNOPNOP_READAD50:stm 0x00ff,ar3stm 0x1000,ar2loopa:CALL IfRxRDY1ldm McBSP2_DRR1,bstl b,*ar2+banz loopa,*ar3-nopnopretnopnop_WRITEAD50:stm 0x037b,ar3stm 0x38a3,ar2loopb:CALL IfTxRDY1ldu *ar2+,Band #0fffeh,b ;mask the LSBstlm B, McBSP2_DXR1banz loopb,*ar3-nopnopretnopnopwait:stm 20h,ar3loop1:stm 020h,ar4loop2:banz loop2,*ar4-banz loop1,*ar3-retnopnopnopnop.end************************************************************* ************* End of File –– InitC5402.asm************************************************************* **在图形编辑窗口观察到的A/D转化后的采样波形实验分析:频谱混叠产生的原因:根据抽样定理,当取样频率fs大于等于两倍的频谱最高频率分量fm的两倍时,就可以从离散序列中准确的回复出信号,但当取样频率fs小于于频谱最高频率分量fm的两倍时,就会发生频谱混叠现象。