课程设计报告_电子信息工程1
目 录
一、引言 二、设计目的 三、设计要求 四、总体设计 4.1硬件部分
4.1.1数模转换操作的应用基础 4.1.2 AD7303简介
4.1.3 应用AD7303的DAC电路设计 4.2 软件部分 4.2.1 程序流程图
4.2.2 在CCS集成开发环境下新建工程
4.2.3在Simulator环境下观察信号的时域及FFT Magnitude波形 4.2.4 程序清单 4.3 调试部分 4.3.1 硬件调试 4.3.2 软件调试 4.3.3 SCI串行数据传输 五、总结 六、参考文献
一、引言
随着现代科学技术的发展和计算机技术的普及,信号处理系统已应用于越来越多的场合,如无线通信、语音识别、机器人、遥感遥测和图像处理领域,数字信号处理器芯片在高速信号处理方面具有速度快、运算性能好等优点,本文设计了一种基于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.2 AD7303简介
AD7303是一款双通道、8位电压输出DAC,采用+2.7 V至+5.5 V单电源供电。它内置片内精密输出缓冲,能够实现轨到轨输出摆幅。这款器件采用多功能三线式串行接口,能够以最高30MHz的时钟速率工作,并与QSPI、SPI、MICROWIRE以及数字信号处理器接口标准兼容。串行输入寄存器为16位,其中8位用作DAC的数据位,其余8位组成一个控制寄存器。
图1 数字量与输出模拟量换算表
图2 输入移位寄存器
图3 AD7303输入移位寄存器位定义及设置方式
4.1.3 应用AD7303的DAC电路设计
图4 AD7303电路设计
4.2 软件部分 4.2.1 程序流程图
4.2.2 在CCS集成开发环境下新建工程 1.在Setup CCS2中对它进行设置,如图5所示
图5 CCS设置驱动界面
2.打开CCS,在Projiect下拉菜单中选择Open添加程序,进
行编译,无错误。如图6所示
图6
3. 执行File Load Program,在随后打开的对话框中选择刚刚建立的后缀名为.out文件,点击“打开”按钮,如图7所示。为了快速地运行到主函数调试自己的代码,可以先使用Debug下的Go main命令
图7 图8
4.2.3在Simulator环境下观察信号的时域及FFT Magnitude波形 (1)选菜单View→Graph→Time/Frequency。
(2) 在Graph Property Dialog对话框中,修改Start Address
为curve,Acquisition Buffer Size为128,Display Data Size为128,DSP Data Type为16-bit unsigned integer,Autoscale为Off,Maximum Y-value为300,如图8所示;波形如图9所示
图9 4.2.4 程序清单
*----------------------- 文件信息 ---------------------------- ;*
;* 文件名称 : Example_DSP281x_da.c ;* 适用平台 : DSP专家4实验箱 ;* CPU类型 : DSP TMS320F2812 ;* 软件环境 : CCS2.20 (2000系列)
;* 试验接线 : 1、F2812CPU板的JUMP1的2和3脚短接,JUMP2的1和2脚短接; ;* 2、实验箱底板的开关K9拨到右侧,选择CPU2.
;* 试验现象 : 设置好CCS的环境,打开本工程,编译、下载、运行。
;* 利用示波器观察实验箱DA单元的二号孔"输出1"有正弦波输出。 ;* 地址译码说明:基地址(0x80000)
*/
/***************************头文件*******************************/ #include "DSP281x_Device.h" // DSP281x Headerfile Include File #include "DSP281x_Examples.h" // DSP281x Examples Include File #include "math.h" #define pi 3.1415926
unsigned int curve[128]; unsigned int curve1[128];
unsigned int curve2[128];
// Prototype statements for functions found within this file. // interrupt void ISRTimer2(void);
void spi_init(void); //void spi_fifo_init(void); void delay(void); void main(void) {
int i,p,data;
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl();
// Step 2. Initalize GPIO:
// This example function is found in the DSP281x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // Skipped for this example // Setup only the GP I/O only for SPI functionality EALLOW;
GpioMuxRegs.GPFMUX.all=0x000F; // Select GPIOs to be SPI pins // Port F MUX - x000 0000 0000 1111 EDIS;
// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT;
// Initialize PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared.
// This function is found in the DSP281x_PieCtrl.c file. InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR).
// This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP281x_DefaultIsr.c. // This function is found in DSP281x_PieVect.c. InitPieVectTable();
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP281x_InitPeripherals.c // InitPeripherals(); // Not required for this example
// spi_fifo_init(); // Initialize the Spi FIFO spi_init(); // init SPI for(i=0; i
/*产生128个点的正弦信号波形*/ data=(int)(127.5*(1+sin(2*pi*i/127)));
curve[i]=data;
/*将数据打包成“从移位寄存器到DAC A数据寄存器*/ curve1[i]=data&0x00ff|0x0100;
/*将数据打包成“从移位寄存器到DAC B数据寄存器 且用数据寄存器同时更新A和B两个DA的值*/ curve2[i]=data&0x00ff|0x2500; } for(;;)
{
for(p=0;p
/*将数据写入AD7303*/
SpiaRegs.SPITXBUF=curve1[p]; delay();
/*将数据写入AD7303*/
SpiaRegs.SPITXBUF=curve2[p]; delay(); } } }
void spi_init()
{ SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SCI SpiaRegs.SPICCR.all =0x000F; // Reset on, rising edge, 16-bit char bits SpiaRegs.SPICTL.all =0x000E; // Enable master mode, normal phase, SpiaRegs.SPISTS.all=0x0080; // enable talk, and SPI int disabled. SpiaRegs.SPIBRR =0x0000; // Baud rate;
SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI }
void delay(void) //延时子程序 {
unsigned int k;
for(k=0;k
4.3 调试部分 4.3.1 硬件调试
进行硬件调试时要先进行安装,如下图10所
示
图 10
(1)将CCS设置Emulator的方式(通过硬件仿真调试器XDS510连接C2000开发板进行硬件仿真调试的方式),并且指定通过XDS510 USB接口仿真器C2000硬件评估电路板。
(2)把U盘中的程序文件复制到C盘中的ti文件中myprojects目录中,在CCS 2窗口中的菜单中选择Project,在出现的窗口的查找范围中选择C盘中的ti文件中的工程文件,然后打开。
(3)编译链接工程。选择菜单“Project”的“Rebuild All”项,或单击工具条中的按钮。注意编译过程中CCS主窗口下部“Build”提示窗中显示编译信息,最后将给出错误和警告的统计数。 (4)下载程序。执行FileLoad Program,在随后打开的对话框中选择刚刚建立的C:\ti\myprojects\ SPI_DA \Debug\ Example_281x_da.out文件,点击“打开”按钮。CCS
将程序加载到硬
件仿真器上,并打开Disassembly窗口,该窗口显示反汇编指令。(注意,CCS还会自动打开窗口底部一个标有Stdout的区域,该区域用以显示程序送往Stdout的输出。)
(5)运行程序。先使用DebugGo main命令,然后点击工具栏按钮 或选择Debug→Run。可快速地运行主函数调试自己的代码。
当运行程序时,可在Stdout窗口中看到程序运行时输出的“Example example started”消息。
(6)测试输出信号。先将示波器一信号输入线接在实验板上的END上,然后将另一个信号输入线接在A/D信号输出口上,调试示波器,示波器屏幕上将出现一个正弦波。如下图所示:
图11 波形输出
通过传输线连接到试验台并通过示波器进行输出,可测得模拟输出电压约为3.3V,即V(REF)的电压约为1.6V。
4.3.2 软件调试
由于课程设计老师已经给定程序,且操作过程按说给步骤进行。为了快速地运行到主函数调试自己的代码,可以先使用DebugGo main命令,然后点击工具栏按钮 或选择Debug→Run。在使用编译连接时并无错误出现,如上图6所示
4.3.3 SCI串行数据传输
在进行串行口的输出时,虽然程序并无错误,设备也已正确连接,但是输出却是209个点。与试验的理论值128个点不符,并且在赵成老师的帮助调试下,其输出仍是209个点。由于课程设计时间有限,还望老师谅解。
五、总结
我们此次课程设计时间有些紧促,中间也还存在着许多的不足。 首先就是在进行仿真环节的设计时就碰壁了,还好有陈宇老师和赵成老师的指导,才顺利地完成了仿真部分。这次设计程序的模板是TI公司已经生产好的,并且老师也已经把相应的程序添加好了,省去了我们在编译程序时的一大难题。不过这是老师给我们的一个小小的熟悉锻炼的过程,相信这会对我们以后的学习工作有很大的帮助。
其次是软硬件的调试部分。软件进行的很顺利,硬件比较麻烦,数据线要选择带有磁环的黑色的,普通的便不行,因为有干扰就观察不到波形输出,还要选择一个好的试验箱。
再者就是串行口输出的那部分,输出老是209个点,这不仅让我们还有老师也很纳闷,希望能够解决。
此次课程设计时我们学习DSP这门课理论与实践的结合,从遇到困难到解决困难,我们学到了很多,希望以后还有更多的理论与实践相结合的机会给我们去练习。也非常感谢老师不厌其烦的讲解与指导。
六、参考文献
1.王忠勇 陈恩庆 DSP原理与应用技术,电子工业出版社,2010