DSP硬件实验报告_第1页
DSP硬件实验报告_第2页
DSP硬件实验报告_第3页
DSP硬件实验报告_第4页
DSP硬件实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一:简单指令程序运行实验代码(含注释): .mmregs .global_main_main: stm #3000h,sp ;sp为堆栈指针寄存器,stm为存储器映射寄存器寻址 ssbx xf ;xf赋值为1,灯亮 call delay ;调用delay函数,延迟0.5秒 rsbx xf ;xf赋值为0,灯灭 call delay ;调用delay函数 b _main ;无条件调用_main函数 nop nop ;delay.5second ;延时5秒delay: stm 270fh,ar3;ar3赋值207fh,十进制为9999dloop1: stm 0f9h,ar4 ;ar4赋值0f9h,十进制为249dloop2: banz loop2,*ar4- ;若不为0,ar4减1 banz loop1,*ar3- ;若不为0,ar3减1,共进行10000*250次跳转 ret nop nop .end实验操作:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁。实验二:资料存储实验本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。代码(含注释): .mmregs .global_main_main:;storedata;存储数据 stm 1000h,ar1 ;将立即数1000h送入辅助寄存器ar1(内存地址) rpt #07h ;循环执行下一条指令,8次 st 0aaaah,*ar1+ ;将立即数0xaaaah赋给辅助寄存器ar1的1000h地址内,;之后ar1的地址加1,8次;ar1的地址变1008,内存0x1000--ox1007中的数据均为0xaaaah ;readdatathenre-store ;读入数据重新存储 stm 7h,ar3 ;令辅助寄存器ar3的初值为07h stm 1000h,ar1 ;重新将立即数1000h送入辅助寄存器ar1 stm 1008h,ar2 ;将立即数1008h送入辅助寄存器ar2loop: ;进入循环 ld *ar1+,t ;将辅助寄存器ar1的值0xaaaah存入T寄存器中,且ar1的地址加1 st t,*ar2+ ;将T寄存器内容0xaaaah存入辅助寄存器ar2,并且ar2的地址加1 banz loop,*ar3- ;寄存器ar3的值不为0时,执行循环loop,ar3的地址值减1直至为0时退出循环here: bhere .end ;结束(地址0x1000--0x100F,程序完成对16个内存单元赋值)实验操作:1.用“View”下拉菜单中的“Memory”查看内存单元;2.输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;3.查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;4.单击“Halt”暂停程序运行;5.查看0x1000H~0x100FH单元内数值的变化;6.关闭各窗口,本实验完毕。实验三:I/O实验代码(含注释): .mmregs .global _main .text_main: stm 3100h,sp stm 1000h,ar1 ;指定地址 portr00h,*ar1;读入开关状态,并存入辅助寄存器ar1中 nop nop portw *ar1,01h;将辅助寄存器ar1的内容即开关的状态写入到LED灯上 nop nopb_main ;循环执行nopnop.end实验操作:任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。关闭所有窗口,本实验完毕。实验四:定时器实验定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR定时器实验通过LED(LP1~LP7)来显示。在本系统中,时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。代码(含注释):【初始化程序】 .mmregs.global_initial_initial: stm 300h,ar1;初始化300h数据地址 st #00h,*ar1;辅助寄存器ar1指向#00h stm 302h,ar1;初始化302h数据地址 st #00h,*ar1 stm 200h,ar1 st #5555h,*ar1 stm 201h,ar1 st #0aaaah,*ar1 stm 202h,ar1 st #400h,*ar1 ssbx 1,11;将ST1.INTM置为1,停止所有中断 stm 0ffffh,ifr;清除所有中断标识ifr:中断标志寄存器 stm 00h,imr;将立即数寄存器置为0,停止所有中断 stm 410h,tcr;停止计时器 tcr:发送控制寄存器 stm 4e1fh,prd;将初始时间设为4e1fh stm 420h,tcr;开始计时器 stm 08h,imr;允许计时器中断 rsbx 1,11;将ST1.INTM置为0,开始所有中断 ret【端口程序】 .mmregs .global _porta .global _portb _porta: stm 304h,ar1 st 5555h,*ar1;辅助寄存器ar1指向5555h portw *ar1,01h ret _portb: stm 304h,ar1 st 0aaaah,*ar1;辅助寄存器ar1指向0aaaah portw *ar1,01h ret【向量程序】.sect".vectors".ref_c_int00;C程序入口.ref_timer;时间中断点.align0x80;必须被连结到页边界RESET:;重设向量BD_c_int00;到C入口点的分支STM#200,SP;堆栈大小为200 SP:堆栈寄存器nmi:RETE;启动中断并从一个返回NOPNOPNOP;软件中断sint17.space4*16sint18.space4*16sint19.space4*16sint20.space4*16sint21.space4*16sint22.space4*16sint23.space4*16sint24.space4*16sint25.space4*16sint26.space4*16sint27.space4*16sint28.space4*16sint29.space4*16sint30.space4*16int0:RETENOPNOPNOPint1:RETENOPNOPNOPint2:RETENOPNOPNOPtint:b_timerNOPNOPrint0:RETENOPNOPNOPxint0:RETENOPNOPNOPrint1:RETENOPNOPNOPxint1:RETENOPNOPNOPint3:RETENOPNOPNOP.end实验操作:1.单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动;2.单击“Halt”,暂停程序运行,LED灯停止闪烁;3.单击“Run”,运行程序,LED灯又开始闪烁;4.关闭所有窗口,本实验完毕。实验五:INT2中断实验本实验是进行C54芯片的INT2中断练习,C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7LED灯的输出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次;代码(含注释):【初始化程序】 .mmregs .global_initial.text_initial: stm 300h,ar3;初始化数据300har3:辅助寄存器 st #00h,*ar3 stm 302h,ar4;初始化数据300har4:辅助寄存器 st #00h,*ar4 ssbx 1,11;将m置为1,停止所有中断 stm 00h,imr;停止所有中断imr:立即数寄存器 stm 0ffffh,ifr;清除所有中断标志ifr:中断标志寄存器 stm 04h,imr;允许int2中断 rsbx 1,11;允许所有中断 ret .end 【端口程序】跟【向量程序】与实验四的相同,在此不再重复。实验操作:1.单击“Run”运行程序,反复拨动开关K0,观察LP1~LP7LED灯亮灭变化;2.单击“Halt”暂停程序运行,反复拨动开关K0,LP1~LP7LED灯亮灭不变化;3.关闭所有窗口,本实验完毕。实验六:A/D采样实验实验目的掌握利用TLV320AD50实现A/D转换的技术基本原理和常用方法。学会DSP的多信道缓冲串口的应用方法。掌握并熟练使用DSP和AD50的接口及其操作。通过实验加深对DSP系统频谱混叠认识。实验设备计算机,CCS2.0软件,DSP仿真器,实验箱,示波器,连接导线。实验步骤和内容实验连线用短接块短接SS1的1,2脚,设置输出低频信号;短接S2的Sin脚,设置输出正弦波信号,这时模拟信号产生单元SP1输出为低频正弦波。JD跳线断开,设置语音处理单元输入信号为交流;并用导线连接SP1脚和JAD3的1脚,将模拟低频正弦波信号接入语音处理单元。用导线连接JAD1的INP和INPF,以及JAD2的INM和INMF,将语音处理单元输出的差动模拟信号接入AD50输入端。运行CCS2.0软件,装入“exp06.pjt”工程文件,双击“exp06.pjt”及“Source”,打开各源程序;并阅读程序,明确多通道串口和AD50初始化程序,DSP串口采样程序使用。3.加载“exp06.out”示范程序,在“exp06.c”中“READAD50()”处,设置断点,运行程序,通过用下拉菜单中的View/Graph的“Time/Frequency”打开一个图形观察窗口;调节输入信号的频率或幅值,观察图形情况(幅值和频率);单击“Animate”运行程序,在图形观察窗口观察A/D转换后的采样波形;调节输入信号的频率或幅值,做同样的采样实验,观察采样结果。4.调节输入信号的频率或幅值,观察输入频率大于采样频率1/2时波形图形时,认识频谱混叠现象。5.Halt”暂停程序运行,6.“View”的下拉菜单中“Memory”打开内存资料观察窗口,设置该内存资料观察窗口的参数,运行“Animate”程序,通过内存观察窗口,观察数据存储器中的采样数值变化。用“View”的下拉菜单中“Memory”打开内存资料观察窗口。设置该内存资料观察窗口的参数,选择地址为0x1000H,资料格式C格式16进制数;单击“Animate”运行程序,调整内存资料观察窗口,并在该窗口中观察资料变化,A/D转换后的资料存储在地址为0x1000~0x10FFH单元内,变化资料将变为红色;单击“Halt”停止程序运行;C程序:externvoidInitC5402(void);/*创建初始化C5402的函数,返回值为空*/externvoidOpenMcBSP(void);/*创建打开McBSP端口的函数,返回值为空;*/externvoidCloseMcBSP(void);/*创建关闭McBSP端口函数*/externvoidREADAD50(void);/*创建从AD50的数据流中读取数据的函数;AD50:硬件端口*/voidmain(void)/*主函数开始*/{InitC5402();/*初始化C5402DSP*/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写入数据流) .includeMMRegs.h ;引入头文件MMRegs.h_InitC5402: NOPa LD#0,DP;重置数据存储器页指针 STM#0,CLKMD;对DSP时钟进行软件设置 STM#0,CLKMD;(在设置之前转到分线规模式) STM#0x4007,CLKMD;将C5402DSP时钟设置到40Hz *******ConfigureC5402SystemRegisters;(配置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*******SetupTimerControlRegisters;(设置时钟控制寄存器)******* STM#0x0010,TCR;停止on–chip计时TCR定时器控制寄存器;计时器0用作主循环的计时器 *******InitializeMcBSP2Registers;(初始化McBSP2(用来创建设备配置)寄存器)******* STMSPCR1,McBSP2_SPSA;设置SPCR1的寄存器地址 STM#0000h,McBSP2_SPSD;McBSP2recv=left–justify;通过框架同步产生接受中断 STMSPCR2,McBSP2_SPSA;设置SPCR2的寄存器地址;通过框架同步产生传输中断 STM#0000h,McBSP2_SPSD;McBSP2Tx(异步传输);在SW断点之后运行 STMRCR1,McBSP2_SPSA;设置RCR1的寄存器地址;RCR1:接收控制寄存器 STM#0040h,McBSP2_SPSD;接收框架1长度=16bits STMRCR2,McBSP2_SPSA;设置RCR2的寄存器地址 STM#0040h,McBSP2_SPSD;接收相位=1;设置框架2长度为16bits STMXCR1,McBSP2_SPSA;设置XCR1的寄存器地址 STM#0040h,McBSP2_SPSD;设置与接收(recv)相同 STMXCR2,McBSP2_SPSA;设置XCR2的寄存器地址 STM#0040h,McBSP2_SPSD;设置与接收(recv)相同 STMPCR,McBSP2_SPSA;设置PCR的寄存器地址 STM#000eh,McBSP2_SPSD;时钟和框架从外部产生(slave)*******FinishDSPInitialization;(结束DSP初始化)******* STM#0x0000,IMR;关闭外围中断 STM#0xFFFF,IFR;清除中断的标志 RET;返回主程序 NOP NOP *******WaitingforMcBSP0RXFinished;(等待McBSP0异步接收结束)*******IfRxRDY1: NOP STMSPCR1,McBSP2_SPSA;启动McBSP2Rx LDMMcBSP2_SPSD,A AND#0002h,A;隐藏已经接受到的bit(可以用来代替系列端口中断) BCIfRxRDY1,AEQ;继续寄存(checking) NOP NOP RET;返回 NOP NOP*******WaitingforMcBSP0TXFinished;(等待McBSP0异步传输结束)*******IfTxRDY1: NOP STMSPCR2,McBSP2_SPSA;启动McBSP2Tx LDMMcBSP2_SPSD,A AND#0002h,A;隐藏已经传输的bit BCIfTxRDY1,AEQ;继续寄存 NOP NOP RET;返回 NOP NOP************************************************************************************_OpenMcBSP: rsbxxf;寄存器xf复位为0 callwait;非条件调用等待状态 NOP STMSPCR1,McBSP2_SPSA;启动McBSP0RX以读入AD数据 LDMMcBSP2_SPSD,A OR#0x0001,A STLMA,McBSP2_SPSD;隐藏已经接受到的bit STMSPCR2,McBSP2_SPSA;启动McBSP0TX以DTMF输出 LDMMcBSP2_SPSD,A OR#0x0001,A STLMA,McBSP2_SPSD;隐藏已经输出的bit LD#0h,DP;装载数据页0 rpt#23;循环执行 NOP ssbxxf;寄存器xf置位为1 NOP NOP CALLIfTxRDY1;非条件调用IfTxRDY1 STM#0x0001,McBSP2_DXR1;请求二级传送 NOP CALLIfTxRDY1;非条件调用IfTxRDY1 STM#0100h,McBSP2_DXR1;将00h写入到寄存器1 CALLIfTxRDY1;非条件调用IfTxRDY1 STM#0000h,McBSP2_DXR1; NOP NOP rpt#20h nop CALLIfTxRDY1;非条件调用IfTxRDY1 STM#0x0001,McBSP2_DXR1;请求二级传送 CALLIfTxRDY1;非条件调用IfTxRDY1 STM#0200h,McBSP2_DXR1;将00h写入到寄存器2 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;请求二级传送 CALLIfTxRDY1 STM#0300h,McBSP2_DXR1;将00h写入到寄存器3 CALLIfTxRDY1 STM#0000h,McBSP2_DXR1CALLIfTxRDY1 STM#0x0001,McBSP2_DXR1;请求二级传送 CALLIfTxRDY1 STM#0490h,McBSP2_DXR1;将00h写入到寄存器4 ;通过内部DPLLbypassinternalDPLL ;并且选择抽样频率andselecttheSampleFrequency CALLIfTxRDY1 STM#0000h,McBSP2_DXR1 RET NOP NOP*********************_CloseMcBSP: STMSPCR1,McBSP2_SPSA;关闭McBSP0RX LDMMcBSP2_SPSD,A AND#0xFFFE,A STLMA,McBSP2_SPSD STMSPCR2,McBSP2_SPSA;关闭McBSP0TX LDMMcBSP2_SPSD,A AND#0xFFFE,A STLMA,McBSP2_SPSD RPT#5 RET NOP NOP_READAD50: stm 0x00ff,ar3 stm 0x1000,ar2 loopa: CALLIfRxRDY1 ldm McBSP2_DRR1,b stl b,*ar2+banzloopa,*ar3- nop nop ret nop nop _WRITEAD50: stm 0x037b,ar3 stm 0x38a3,ar2loopb: CALL IfTxRDY1 ldu *ar2+,B and#0fffeh,b;masktheLSB stlmB,McBSP2_DXR1 banz loopb,*ar3- nop nop ret nop nop wait: stm 20h,ar3loop1: stm 020h,ar4loop2: banz loop2,*ar4- banz loop1,*ar3- ret nop nop nop nop .end**************************************************************************EndofFile––InitC5402.asm*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论