郑州航空工业管理学院电子通信工程系DSP原理及应用课程设计报告设计题目:基于TMS320F2812DSP处理器的信号仪的设计与实现学号:姓名:专业:通信工程设计日期:2012年6月14日指导老师:赵成张松炜目录一、引言二、设计目的三、设计要求四、总体设计4.1硬件部分4.1.1数模转换操作的应用基础4.1.2AD7303简介4.1.3应用AD7303的DAC电路设计4.2软件部分4.2.1程序流程图4.2.2在CCS集成开发环境下新建工程4.2.3在Simulator环境下观察信号的时域及FFTMagnitude波形4.2.4程序清单4.3调试部分4.3.1硬件调试4.3.2软件调试4.3.3SCI串行数据传输(选做)五、总结六、参考文献一、引言随着现代科学技术的发展和计算机技术的普及,信号处理系统已应用于越来越多的场合,如无线通信、语音识别、机器人、遥感遥测和图像处理领域,数字信号处理器芯片在高速信号处理方面具有速度快、运算性能好等优点,本文设计了一种基于TI公司的TMS320F812的信号处理系统,将数据通过串行异步通信接口传到PC机,由PC机的串口调试工具对接收信号进行显示和具体分析并将结果传给反馈给DSP进行控制,文章对硬件和软件进行了详细描述。二、设计目的1、编写串行外设接口SPI的驱动程序;2、了解数模转换的基本操作,设计基于数模转换芯片AD7303的正弦信号发生电路;3、编写TMS320F2812利用SPI接口驱动AD7303输出正弦信号波形的应用程序。三、设计要求1、熟悉CCS集成开发环境的使用,能对程序进行跟踪,分析结果;2、熟悉SPI外设接口的相关知识,能通过SPI接口与外围电路(芯片)进行通信。四、总体设计4.1硬件部分4.1.1数模转换操作的应用基础利用专用的数模转换芯片,可以实现将数字信号转换成模拟量输出的功能。在EXPIV型实验箱上,使用的是AD7303数模芯片,它可以实现同时转换2路模拟信号数出,并有8位精度,DA转换时间1.2μs。其控制方式较为简单:首先将需要转换的数值及控制指令同时通过SPI总线传送到AD7303上相应寄存器,经过一个时间延迟,转换后的模拟量就从AD7303输出引脚输出。4.1.2AD7303简介AD7303是一款双通道、8位电压输出DAC,采用+2.7V至+5.5V单电源供电。它内置片内精密输出缓冲,能够实现轨到轨输出摆幅。这款器件采用多功能三线式串行接口,能够以最高30MHz的时钟速率工作,并与QSPI、SPI、MICROWIRE以及数字信号处理器接口标准兼容。串行输入寄存器为16位,其中8位用作DAC的数据位,其余8位组成一个控制寄存器。图1数字量与输出模拟量换算表图2输入移位寄存器图3AD7303输入移位寄存器位定义及设置方式4.1.3应用AD7303的DAC电路设计图4AD7303电路设计4.2软件部分4.2.1程序流程图4.2.2在CCS集成开发环境下新建工程1.在SetupCCS2中对它进行设置,如图5所示图5CCS设置驱动界面2.打开CCS,在Projiect下拉菜单中选择Open添加程序,进处理器上电复位CPU及串行外设接口初始化产生128个点的正弦信号波形按AD7303输入移位寄存器的位定义,传输数据,进行数模转换双路波形输出无限循环①单击清除原先配置②单击选择此配置③单击输入配置④单击完成和保存设置行编译,无错误。如图6所示图63.执行FileLoadProgram,在随后打开的对话框中选择刚刚建立的后缀名为.out文件,点击“打开”按钮,如图7所示。为了快速地运行到主函数调试自己的代码,可以先使用Debug下的Gomain命令图7图84.2.3在Simulator环境下观察信号的时域及FFTMagnitude波形(1)选菜单View→Graph→Time/Frequency。(2)在GraphPropertyDialog对话框中,修改StartAddress为curve,AcquisitionBufferSize为128,DisplayDataSize为128,DSPDataType为16-bitunsignedinteger,Autoscale为Off,MaximumY-value为300,如图8所示;波形如图9所示图94.2.4程序清单*-----------------------文件信息----------------------------;*;*文件名称:Example_DSP281x_da.c;*适用平台:DSP专家4实验箱;*CPU类型:DSPTMS320F2812;*软件环境:CCS2.20(2000系列);*试验接线:1、F2812CPU板的JUMP1的2和3脚短接,JUMP2的1和2脚短接;;*2、实验箱底板的开关K9拨到右侧,选择CPU2.;*试验现象:设置好CCS的环境,打开本工程,编译、下载、运行。;*利用示波器观察实验箱DA单元的二号孔输出1有正弦波输出。;*地址译码说明:基地址(0x80000)*//***************************头文件*******************************/#includeDSP281x_Device.h//DSP281xHeaderfileIncludeFile#includeDSP281x_Examples.h//DSP281xExamplesIncludeFile#includemath.h#definepi3.1415926/********全局变量******/unsignedintcurve[128];unsignedintcurve1[128];unsignedintcurve2[128];//Prototypestatementsforfunctionsfoundwithinthisfile.//interruptvoidISRTimer2(void);voidspi_init(void);//voidspi_fifo_init(void);voiddelay(void);voidmain(void){inti,p,data;//Step1.InitializeSystemControl://PLL,WatchDog,enablePeripheralClocks//ThisexamplefunctionisfoundintheDSP281x_SysCtrl.cfile.InitSysCtrl();//Step2.InitalizeGPIO://ThisexamplefunctionisfoundintheDSP281x_Gpio.cfileand//illustrateshowtosettheGPIOtoit'sdefaultstate.//InitGpio();//Skippedforthisexample//SetuponlytheGPI/OonlyforSPIfunctionalityEALLOW;GpioMuxRegs.GPFMUX.all=0x000F;//SelectGPIOstobeSPIpins//PortFMUX-x000000000001111EDIS;//Step3.ClearallinterruptsandinitializePIEvectortable://DisableCPUinterruptsDINT;//InitializePIEcontrolregisterstotheirdefaultstate.//ThedefaultstateisallPIEinterruptsdisabledandflags//arecleared.//ThisfunctionisfoundintheDSP281x_PieCtrl.cfile.InitPieCtrl();//禁止CPU中断清楚中断标志位IER=0x0000;IFR=0x0000;//InitializethePIEvectortablewithpointerstotheshellInterrupt//ServiceRoutines(ISR).//Thiswillpopulatetheentiretable,eveniftheinterrupt//isnotusedinthisexample.Thisisusefulfordebugpurposes.//TheshellISRroutinesarefoundinDSP281x_DefaultIsr.c.//ThisfunctionisfoundinDSP281x_PieVect.c.InitPieVectTable();//Step4.InitializealltheDevicePeripherals://ThisfunctionisfoundinDSP281x_InitPeripherals.c//InitPeripherals();//Notrequiredforthisexample//spi_fifo_init();//InitializetheSpiFIFOspi_init();//initSPIfor(i=0;i128;i++){/*产生128个点的正弦信号波形*/data=(int)(127.5*(1+sin(2*pi*i/127)));curve[i]=data;/*将数据打包成“从移位寄存器到DACA数据寄存器*/curve1[i]=data&0x00ff|0x0100;/*将数据打包成“从移位寄存器到DACB数据寄存器且用数据寄存器同时更新A和B两个DA的值*/curve2[i]=data&0x00ff|0x2500;}//进入无限循环for(;;){for(p=0;p128;p++){/*将数据写入AD7303*/SpiaRegs.SPITXBUF=curve1[p];delay();/*将数据写入AD7303*/SpiaRegs.SPITXBUF=curve2[p];delay();}}}voidspi_init(){SpiaRegs.SPICCR.bit.SPISWRESET=0;//复位SPISpiaRegs.SPICCR.all=0x000F;//Reseton,risingedge,16-bitcharbitsSpiaRegs.SPICTL.all=0x000E;//是能主模式,一般SpiaRegs.SPISTS.all=0x0080;//使能talk,禁止SPI中断SpiaRegs.SPIBRR=0x0000;//波特率设置为LSPCLK/4;SpiaRegs.SPIPRI.bit.FREE=1;//Setsobreakpointsdon'tdisturbxmission自由运行SpiaRegs.SPICCR.bit.SPISWRESET=1;//使能SPI}voiddelay(void)//延时子程序{unsignedintk;for(k=0;k50;k++);}4.3调试部分4.3.1硬件调试进行硬件调试时要先进行安装,如下图10所示图10(1)将CCS设置Emulator的方式(通过硬件仿真调试器XDS510连接C2000开发板进行硬件仿真调试的方式),并且指定通过XDS510USB接口仿真器C2000硬件评估电路板。(2)把U盘中的程序文件复制到C盘中的ti文件中myprojects目录中,在CCS2窗口中的菜单中选择Project,在出现的窗口的查找范围中选择C盘中的ti文件中的工程文件,然后打开。(3)编译链接工程。选择菜单“Project”的“RebuildAll”项,或单击工具条中的按钮。注意编译过程中CCS主窗口下部“Build”提示窗中显示编译信息,最后将给出错误和警告的统计数。(4)下载程序。执行FileLoadProgram,在随后打开的对话框中选择刚刚建立的C:\ti\myprojects\SPI_DA\Debug\Example_281x_da.out文件,点击“打开”按钮。CCS将程序加载到硬①单击清除原先配置③单击输入配置②单击