DSP流水灯程序设计电子6班张明渝2012210979采用芯片:TMS320VC54X程序运行环境:CodeComposerStudio3.1设计思路:通过芯片内置中断实现计时,其中系统初始化子程序是借鉴CCS自带的初始化程序,可以系统的初始化,重置计时器的计时起点。设计的子程序有定时器初始化子程序和定时器中断子程序,可以分别实现定时器的复位和开始计时,以及定时器的中断计时。目标现象:通过定时器中断方式控制LED灯(LED1~LED8)以一定的间隔时间不停闪亮变化主程序(C语言):Exp.c/************************文件预处理***************************/#includetms320uc5402.h/*************************************************************//********************全局变量定义与初始化*********************/ioportunsignedport8001;unsignedintshow=0x00aa;unsignedintnum=0x0000;/*************************************************************//*******************函数、子程序声明与定义********************/voidsys_ini()//系统初始化子程序{asm(ssbxINTM);//全局禁止所有可屏蔽中断PMST&=0x00FF;//(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间SWWSR=0x7000;//io空间7个等待周期,程序与数据空间0个等待周期CLKMD=0x17FA;//CLKOUT=2*CLKIN=2*10M=20M,自动延时最长时间}voidtimer0_ini()//定时器0初始化子程序{TCR|=0x0010;//停止定时器0PRD=0x2710;//PRD=10000(D)TCR|=0x000A;//TDDR=10(D),所以定时器时钟=1/(20M/10/10000)=5msIMR=0x0008;//使能定时器0中断IFR=0xFFFF;//清除所有中断标志位asm(rsbxINTM);//全局使能可屏蔽中断TCR&=0xFFEF;//开始定时器0TCR|=0x0020;//复位定时起0}/*************************************************************//*****************中断服务子程序声明与定义********************/interruptvoidtimer0()//定时器0中断子程序{if(num==200)//记200次定时器中断,时间=200*5ms=1s{show=~show;//取反num=0;}elsenum++;return;}/*************************************************************//**************************主程序*****************************/voidmain(void){sys_ini();timer0_ini();for(;;){port8001=show;}}/***************************结束******************************/向量程序(汇编语言):vector.asm.global_c_int00,_timer0.sect.vecsreset:b_c_int00;RESETVECTORSnopnopnmi:rete;NMInopnopnop;softwareinterruptssin17:.space4*16sin18:.space4*16sin19:.space4*16sin20:.space4*16sin21:.space4*16sin22:.space4*16sin23:.space4*16sin24:.space4*16sin25:.space4*16sin26:.space4*16sin27:.space4*16sin28:.space4*16sin29:.space4*16sin30:.space4*16int0:rete;EXTERNALINT0nopnopnopint1:rete;EXTERNALINT1nopnopnopint2:rete;EXTERNALINT2nopnopnoptint0:b_timer0;TIMER0INTERRUPTnopnopbrint0:rete;BcBSP0RECEIVEINTERRUPTnopnopnopbxint0:rete;BcBSP0TRANSMITINTERRUPTnopnopnopdmac0:rete;RESERVEDORDMACHANNEL0INTERRUPTnopnopnoptint1_dmac1:rete;TIMER1INTERRUPTORDMACHANNEL1INTERRUPTnopnopnopint3:rete;EXTERNALINT3nopnopnophpint:rete;HPIINTERRUPTnopnopnopbrint1_dmac2:rete;McBSP1RECEIVEINTERRUPTORDMACHANNEL2INTERRUPTnopnopnopbxint1_dmac3:rete;McBSP1TRANSMITINTERRUPTORDMACHANNEL3INTERRUPTnopnopnopdmac4:rete;DMACHANNEL4INTERRUPTnopnopnopdmac5:rete;DMACHANNEL5INTERRUPTnopnopnop实验总结:本程序是我结合DSP实验课和DSP硬件实验中学习的内容设计的,部分借鉴了系统自带的例程,目标是实现LED灯(LED1~LED8)以一定的间隔时间不停闪亮变化。综合本学期的两门课程的内容,我学会了用基本的汇编语言设计程序,以及设计基本的c语言为基础的dsp程序,并在dsp硬件实验课上进行了实验并观察了现象。通过本学期的学习,我对dsp程序设计有了基本的了解,对dsp理论课的内容也有了更深刻的理解,总而言之,我获益良多,感谢老师一个学期以来的授课指导。