实验一:简单指令程序运行实验代码(含注释):.mmregs.global_main_main:stm#3000h,sp;sp为堆栈指针寄存器,stm为存储器映射寄存器寻址ssbxxf;xf赋值为1,灯亮calldelay;调用delay函数,延迟0.5秒rsbxxf;xf赋值为0,灯灭calldelay;调用delay函数b_main;无条件调用_main函数nopnop;delay.5second;延时5秒delay:stm270fh,ar3;ar3赋值207fh,十进制为9999dloop1:stm0f9h,ar4;ar4赋值0f9h,十进制为249dloop2:banzloop2,*ar4-;若不为0,ar4减1banzloop1,*ar3-;若不为0,ar3减1,共进行10000*250次跳转retnopnop.end实验操作:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁。实验二:资料存储实验本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。代码(含注释):.mmregs.global_main_main:;storedata;存储数据stm1000h,ar1;将立即数1000h送入辅助寄存器ar1(内存地址)rpt#07h;循环执行下一条指令,8次st0aaaah,*ar1+;将立即数0xaaaah赋给辅助寄存器ar1的1000h地址内,;之后ar1的地址加1,8次;ar1的地址变1008,内存0x1000--ox1007中的数据均为0xaaaah;readdatathenre-store;读入数据重新存储stm7h,ar3;令辅助寄存器ar3的初值为07hstm1000h,ar1;重新将立即数1000h送入辅助寄存器ar1stm1008h,ar2;将立即数1008h送入辅助寄存器ar2loop:;进入循环ld*ar1+,t;将辅助寄存器ar1的值0xaaaah存入T寄存器中,且ar1的地址加1stt,*ar2+;将T寄存器内容0xaaaah存入辅助寄存器ar2,并且ar2的地址加1banzloop,*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:stm3100h,spstm1000h,ar1;指定地址portr00h,*ar1;读入开关状态,并存入辅助寄存器ar1中nopnopportw*ar1,01h;将辅助寄存器ar1的内容即开关的状态写入到LED灯上nopnopb_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:stm300h,ar1;初始化300h数据地址st#00h,*ar1;辅助寄存器ar1指向#00hstm302h,ar1;初始化302h数据地址st#00h,*ar1stm200h,ar1st#5555h,*ar1stm201h,ar1st#0aaaah,*ar1stm202h,ar1st#400h,*ar1ssbx1,11;将ST1.INTM置为1,停止所有中断stm0ffffh,ifr;清除所有中断标识ifr:中断标志寄存器stm00h,imr;将立即数寄存器置为0,停止所有中断stm410h,tcr;停止计时器tcr:发送控制寄存器stm4e1fh,prd;将初始时间设为4e1fhstm420h,tcr;开始计时器stm08h,imr;允许计时器中断rsbx1,11;将ST1.INTM置为0,开始所有中断ret【端口程序】.mmregs.global_porta.global_portb_porta:stm304h,ar1st5555h,*ar1;辅助寄存器ar1指向5555hportw*ar1,01hret_portb:stm304h,ar1st0aaaah,*ar1;辅助寄存器ar1指向0aaaahportw*ar1,01hret【向量程序】.sect.vectors.ref_c_int00;C程序入口.ref_timer;时间中断点.align0x80;必须被连结到页边界RESET:;重设向量BD_c_int00;到C入口点的分支STM#200,SP;堆栈大小为200SP:堆栈寄存器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:stm300h,ar3;初始化数据300har3:辅助寄存器st#00h,*ar3stm302h,ar4;初始化数据300har4:辅助寄存器st#00h,*ar4ssbx1,11;将st1.intm置为1,停止所有中断stm00h,imr;停止所有中断imr:立即数寄存器stm0ffffh,ifr;清除所有中断标志ifr:中断标志寄存器stm04h,imr;允许int2中断rsbx1,11;允许所有中断ret.end【端口程序】跟【向量程序】与实验四的相同,在此不再重复。实验操作:1.单击“Run”运行程序,反复拨动开关K0,观察LP1~LP7LED灯亮灭变化;2.单击“Halt”暂停程序运行,反复拨动开关K0,LP1~LP7LED灯亮灭不变化;3.关闭所有窗口,本实验完毕。实验六:A/D采样实验一、实验目的1.掌握利用TLV320AD50实现A/D转换的技术基本原理和常用方法。2.学会DSP的多信道缓冲串口的应用方法。3.掌握并熟练使用DSP和AD50的接口及其操作。4.通过实验加深对DSP系统频谱混叠认识。二、实验设备计算机,CCS2.0软件,DSP仿真器,实验箱,示波器,连接导线。三、实验步骤和内容1.实验连线用短接块短接SS1的1,2脚,设置输出低频信号;短接S2的Sin脚,设置输出正弦波信号,这时模拟信号产生单元SP1输出为低频正弦波。JD跳线断开,设置语音处理单元输入信号为交流;并用导线连接SP1脚和JAD3的1脚,将模拟低频正弦波信号接入语音处理单元。用导线连接JAD1的INP和INPF,以及JAD2的INM和INMF,将语音处理单元输出的差动模拟信号接入AD50输入端。2.运行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_O