当前位置:文档之家› DSP学习笔记

DSP学习笔记

DSP学习笔记引言:学习DSP的时间有两个多月了,收获很多新知识,我们要每天都有进步才行,以下内容没有特别的顺序,跟具自己的学习情况写的,如果有不对的地方希望指出来,如果有不懂得也可以问我,大家相互交流很重要,我的一个邮箱:baijc@欢迎联系!建立新工程过程中:问题1:"GPIO_Study.c", line 61: fatal error: could not open source file "DSP280x_Device.h"1 fatal error detected in the compilation of "GPIO_Study.c".解决方法:因为project →build options→compiler→preprocessor中,要包含的头文件的地址没有加进去,你可以找到头文件的地址,然后加进去。

问题2:undefined first referencedsymbol in file--------- ----------------_c_int00 D:\DSPstudy\test3\Debug\DSP280x_CodeStartBranch.objFS$$MPY D:\DSPstudy\test3\Debug\DSP280x_CpuTimers.objFS$$TOL D:\DSPstudy\test3\Debug\DSP280x_CpuTimers.obj>> error: symbol referencing errors - './Debug/test3.out' not built或者下面的问题:undefined first referencedsymbol in file--------- ----------------_c_int00 D:\DSPstudy\GPIO_Study\Debug\DSP280x_CodeStartBranch.obj>> error: symbol referencing errors - './Debug/GPIO_Study.out' not built解决办法都是下面:这个问题是因为没有加在库文件,请在project →build options→linker→libraries 中加入rts2800.lib。

问题3:>> warning: creating .stack section with default size of 400 (hex) words.Use-stack option to change the default size.>> error: can't allocate .stack, size 00000400 (page 1) in RAMM1 (avail:00000380)>> error: errors in input - ./Debug/GPIO_Study.out not built解决办法:这个问题是关于堆栈存储大小的问题,他是说,创建堆栈段使用与设置400个字,并建议在“堆栈操作”中改变这个与设置。

这时,需要进行如下修改就可通过:project→ build options→Linker→basic,在Stack Size(-stack):填入800或者其他小于1024的数值。

调试程序:在编译完成之后,要来下载程序并进行功能调试。

File→Load Program,在工程文件夹下面的Debug文件夹下,选中**.out文件,点击打开,便开始下载程序了。

将**.out文件下载到目标板上2812的RAM中。

注意,这里是调试,所以将程序下载到RAM。

等到最后您要固化程序的时候,就得下载到FLASH了,因为断电之后,RAM里面所有的数据都会消失。

(Run和Animate的区别,Run是如果遇到断点的话它就停下来了。

而Animate 就算遇到断点时先停止DSP内核,刷新窗口,然后接着继续启动运行,常用来连续刷新变量窗口和生成graph图形等)——知识储备。

添加断点:加上断点的方法很简单,只要在该行代码前双击就行。

双击之后,这行代码前面会出现一个红色圆块。

另外一种添加断点的方法,就是在刚才的编译工具栏上,点一下那个小手图形的按钮,前提是你要把光标移动到想要设置断点的哪一行上。

使用watch window:Watch window的作用是来观察程序运行过程中的各个变量的值。

调用watch window的方法是点击菜单栏的"View ","watch window",这时watch window就会显示在CCS下方的信息区域;选中所要观察的变量,然后右键,在右键菜单中选择add to watch window。

调试代码观察:我们在调试程序的时候经常想让程序从Main函数开使运行,点Debug→Go main。

既能看到源文件中代码的执行情况,又能看到汇编指令的执行情况View→Mixed Source/Asm;关于F2812中用C语言来实现中断的说明1.首先在.cmd中定位系统中断表:MEMORY{PAGE 0 : ......................................PAGE 1 : ......................................PIE_VECT : origin = 0x000D00, length = 0x000100 ......................................}SECTIONS{ ...................................PieVectTable : > PIE_VECT, PAGE = 1 .....................................}2.在C中制定该中断的结构体:#pragma DATA_SECTION(PieVectTable,"PieVectTable");struct PIE_VECT_TABLE PieVectTable;(在DSP28_GlobalVariableDefs.C中初始化)3.用一组常数(按照中断向量的顺序)初始化该名字为PIE_VECT_TABLE的表:typedef interrupt void(*PINT)(void);这里有些一问,一下应该为函数名??// Define Vector Table:struct PIE_VECT_TABLE {// Reset is never fetched from this table.// It will always be fetched from 0x3FFFC0 in either// boot ROM or XINTF Zone 7 depending on the state of// the XMP/MC input signal. On the F2810 it is always// fetched from boot ROM.PINT PIE1_RESERVED;PINT PIE2_RESERVED;PINT PIE3_RESERVED;PINT PIE4_RESERVED;PINT PIE5_RESERVED;PINT PIE6_RESERVED;PINT PIE7_RESERVED;PINT PIE8_RESERVED;PINT PIE9_RESERVED;PINT PIE10_RESERVED;PINT PIE11_RESERVED;PINT PIE12_RESERVED;PINT PIE13_RESERVED;// Non-Peripheral Interrupts:PINT XINT13; // XINT13PINT TINT2; // CPU-Timer2PINT DATALOG; // Datalogging interruptPINT RTOSINT; // RTOS interruptPINT EMUINT; // Emulation interruptPINT XNMI; // Non-maskable interruptPINT ILLEGAL; // Illegal operation TRAPPINT USER0; // User Defined trap 0PINT USER1; // User Defined trap 1PINT USER2; // User Defined trap 2PINT USER3; // User Defined trap 3PINT USER4; // User Defined trap 4PINT USER5; // User Defined trap 5PINT USER6; // User Defined trap 6PINT USER7; // User Defined trap 7PINT USER8; // User Defined trap 8PINT USER9; // User Defined trap 9PINT USER10; // User Defined trap 10PINT USER11; // User Defined trap 11// Group 1 PIE Peripheral Vectors:PINT PDPINTA; // EV-APINT PDPINTB; // EV-BPINT rsvd1_3;PINT XINT1;PINT XINT2;PINT ADCINT; // ADCPINT TINT0; // Timer 0PINT WAKEINT; // WD ..........................// Group 12 PIE Peripheral Vectors:PINT rsvd12_1;PINT rsvd12_2;PINT rsvd12_3;PINT rsvd12_4;PINT rsvd12_5;PINT rsvd12_6;PINT rsvd12_7;PINT rsvd12_8;};然后在使我们在.cmd文件中定义的表有以上属性:extern struct PIE_VECT_TABLE PieVectTable;(在.h文件中)4.初始化该表(在.c文件中)使之能够为主程序所使用:const struct PIE_VECT_TABLE PieVectTableInit = {PIE_RESERVED, // Reserved spacePIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,// Non-Peripheral InterruptsINT13_ISR, // XINT13 or CPU-Timer 1INT14_ISR, // CPU-Timer2DATALOG_ISR, // Datalogging interruptRTOSINT_ISR, // RTOS interruptEMUINT_ISR, // Emulation interruptNMI_ISR, // Non-maskable interruptILLEGAL_ISR, // Illegal operation TRAPUSER0_ISR, // User Defined trap 0USER1_ISR, // User Defined trap 1USER2_ISR, // User Defined trap 2USER3_ISR, // User Defined trap 3USER4_ISR, // User Defined trap 4USER5_ISR, // User Defined trap 5USER6_ISR, // User Defined trap 6USER7_ISR, // User Defined trap 7USER8_ISR, // User Defined trap 8USER9_ISR, // User Defined trap 9USER10_ISR, // User Defined trap 10USER11_ISR, // User Defined trap 11// Group 1 PIE VectorsPDPINTA_ISR, // EV-APDPINTB_ISR, // EV-Brsvd_ISR,XINT1_ISR,XINT2_ISR,ADCINT_ISR, // ADCTINT0_ISR, // Timer 0WAKEINT_ISR, // WD ..........................// Group 12 E Vectorsrsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,};//---------------------------------------------------------------------------// InitPieVectTable://---------------------------------------------------------------------------// This function initializes the PIE vector table to a known state. // This function must be executed after boot time.//void InitPieVectTable(void){int16 i;Uint32 *Source = (void *) &PieVectTableInit;Uint32 *Dest = (void *) &PieVectTable;EALLOW;for(i=0; i < 128; i++)*Dest++ = *Source++;EDIS;// Enable the PIE Vector TablePieCtrl.PIECRTL.bit.ENPIE = 1;}5.中断服务程序:让以上的数值指向你所要的服务程序,例如:PieVectTable.TINT2 = &ISRTimer2;那么,ISRTimer2也就成了中断服务程序,×××切记:一定要在主程序的开始先声明该程序:interrupt void ISRTimer2(void);..........................然后按照您的需要编制该程序:interrupt void ISRTimer2(void){CpuTimer2.InterruptCount++;}编程中遇到的问题:1、line 257: warning: last line of file ends without a newline;解决方法:点击出现的问题条,看光标定位在哪里,然后一点点删除,直到把编程的文字删除,最后把删除的写出来,回车就行了,因为回车的格式要在编辑状态哈哈!28016的定时器笔记学过2812的人会知道,2812的定时器和28016的定时器的寄存器很不一样。

相关主题