当前位置:文档之家› DSP硬件实验报告北邮

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个地址空间。

在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的两倍时,就会发生频谱混叠现象。

相关主题