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;i++) {
data=(int)(127.5*(1+sin(2*pi*i/127))); //产生128个点的正弦信号波形 curve[i]=data;
curve1[i]=data&0x00ff|0x0100; //将数据打包成“从移位寄存器到DAC A数据寄存器 curve2[i]=data&0x00ff|0x2500; //将数据打包成“从移位寄存器到DAC B数据寄存器 //且用数据寄存器同时更新A和B两个DA的值
} for(;;) {
for(p=0;p<128;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<50;k++); }
4.3 调试部分
4.3.1 硬件调试(进行硬件调试时要先进行相关设置)
(1)将CCS设置Emulator的方式(通过硬件仿真调试器XDS510连接C2000开发板进行硬件仿真调试的方式),并且指定通过XDS510 USB接口仿真器C2000硬件评估电路板。如图4-3-1。
图4-3-1 Emulator方式设置
(2)打开路径“C:my fir project\\sine wave”文件中的工程文件。 (3)编译链接工程。选择菜单“Project”的“Rebuild All”项,或单击工具条中的按钮。注意编译过程中CCS3.3主窗口下部“Build”提示窗中显示编译信息,最后将给出错误和警告的统计数。如图4-3-2
图4-3-2 编译结果
(4)下载程序。执行File?Load Program,在随后打开的对话框中选择刚刚建立的C:\\my fir project\\sine wave\\Debug\\sine wave.out文件,点击“打开”按钮如图4-3-3。CCS将程序加载到硬件仿真器上,并打开Disassembly窗口,该窗口显示反汇编指令。
图4-3-3 下载sine wave.out文件
(5)运行程序。先使用Debug下的Go main命令,然后选择Debug→Run。 (6)测试输出信号。先将示波器一信号输入线接在实验板上的END上,然后
将另一个信号输入线接在A/D信号输出口上,调试示波器,示波器屏幕上将出现一个正弦波。如图4-3-4所示:
图4-3-4 波形输出
(7)通过传输线连接到试验台并通过示波器进行输出,可测得模拟输出电压约为3.3V,即VREF的电压约为1.6V。(基本符合AD7303的设置,即
VREF?VDD2)
4.3.2 软件调试
这次课程设计所需的基本资料和程序平时已经由老师已经给定,所以我在操作过程按所给资料进行必要的整合和设计,基本上可以很好地实现设计的要求。可以先使用Debug Go main命令,然后选择Debug→Run,在使用编译连接时并无错误出现,总体上来说,这次设计比较好的实现了相应的正弦波波形的形成及AD7303的数模转化,并最终实现了设计的正弦波形的输出,如图4-3-4。
四、总结
通过这次的DSP课程设计,面通过这次课程设计我对本学期学习的DSP知识又有了一些的认识,另外通过对课程设计题目的分析、思考,确实受益颇多。
这次的课程设计不单单是DSP知识的应用,无论从芯片外观尺寸信息的学习、Protel制作原理图库文件和PCB库文件及绘制电路图知识,还是对于芯片的外文资料的阅读、自己对理论知识理解能力、独立思考与解决问题的能力等方面,对我都是一个很大的提高。通过认真阅读AD7303的英文使用手册,发觉在芯片资料的阅读方面还是英文资料容易理解,并且对AD7303的一些基本的知识有了进一步的理解(如输入寄存器的高八位低八位的分配及设置、AD7303与
TMS320F2812的外设接口的连接等)。
在这期间通过和同学交流各自的想法,收获了同学们更多的思想和思维方法。另一方面,这次课程设计更是教会了我要认认真真学习专业知识,脚踏实地地掌握所学的知识,不虚度学习阶段的每一次锻炼提高自己的机会。通过课程设计期间对老师的治学行为的悉心观察,深刻的认识到学习是自己的事情,来不得半点懒惰,不容许丁点的懈怠。
五、参考文献
程培青. 数字信号处理教程. 北京:清华大学出版社,2007 陈永彬. 数字信号处理. 南京:南京工学院出版社,1987
赵成. DSP原理及技术应用技术——基于TMS320F2812的仿真与实例设计.北京:国防工业出版社,2012
指 导 教 师 评 语 成绩 指导教师 年 月 日