ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:136.07KB ,
资源ID:11561341      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11561341.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP学习心得笔记.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSP学习心得笔记.docx

1、DSP学习心得笔记DSP学习心得笔记- 白建成.baijc.icekoor建立新工程过程中:问题1:GPIO_Study.c, line 61: fatal error: could not open source file DSP280x_Device.h1 fatal error detected in the compilation of GPIO_Study.c.解决方法:因为project build optionscompilerpreprocessor中,要包含的头文件的地址没有加进去,你可以找到头文件的地址,然后加进去。问题2:undefined first reference

2、d symbol in file- -_c_int00 D:DSP studytest3DebugDSP280x_CodeStartBranch.objFS$MPY D:DSP studytest3DebugDSP280x_CpuTimers.objFS$TOL D:DSP studytest3DebugDSP280x_CpuTimers.obj error: symbol referencing errors - ./Debug/test3.out not built或者下面的问题:undefined first referenced symbol in file- -_c_int00 D:

3、DSP studyGPIO_StudyDebugDSP280x_CodeStartBranch.obj error: symbol referencing errors - ./Debug/GPIO_Study.out not built解决办法都是下面:这个问题是因为没有加在库文件,请在project build optionslinkerlibraries中加入rts2800.lib。问题3: warning: creating .stack section with default size of 400 (hex) words. Use -stack option to change

4、the default size. error: cant allocate .stack, size 00000400 (page 1) in RAMM1 (avail: 00000380) error: errors in input - ./Debug/GPIO_Study.out not built解决办法:这个问题是关于堆栈存储大小的问题,他是说,创建堆栈段使用与设置400个字,并建议在“堆栈操作”中改变这个与设置。这时,需要进行如下修改就可通过:project build optionsLinkerbasic,在Stack Size(-stack):填入800或者其他小于1024的

5、数值。调试程序:在编译完成之后,要来下载程序并进行功能调试。FileLoad Program,在工程文件夹下面的Debug文件夹下,选中*.out文件,点击打开,便开始下载程序了。将*.out文件下载到目标板上2812的RAM中。注意,这里是调试,所以将程序下载到RAM。等到最后您要固化程序的时候,就得下载到FLASH了,因为断电之后,RAM里面所有的数据都会消失。(Run和Animate的区别,Run是如果遇到断点的话它就停下来了。而Animate就算遇到断点时先停止DSP内核,刷新窗口,然后接着继续启动运行,常用来连续刷新变量窗口和生成graph图形等)知识储备。添加断点:加上断点的方法很

6、简单,只要在该行代码前双击就行。双击之后,这行代码前面会出现一个红色圆块。另外一种添加断点的方法,就是在刚才的编译工具栏上,点一下那个小手图形的按钮,前提是你要把光标移动到想要设置断点的哪一行上。使用watch window:Watch window的作用是来观察程序运行过程中的各个变量的值。调用watch window的方法是点击菜单栏的View ,watch window,这时watch window就会显示在CCS下方的信息区域;选中所要观察的变量,然后右键,在右键菜单中选择add to watch window。调试代码观察:我们在调试程序的时候经常想让程序从Main函数开使运行,点D

7、ebugGo main。 既能看到源文件中代码的执行情况,又能看到汇编指令的执行情况ViewMixed Source/Asm;关于F2812中用C语言来实现中断的说明1.首先在.cmd中定位系统中断表:MEMORYPAGE 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_

8、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 XIN

9、TF 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 PIE

10、10_RESERVED; PINT PIE11_RESERVED; PINT PIE12_RESERVED; PINT PIE13_RESERVED;/ Non-Peripheral Interrupts: PINT XINT13; / XINT13 PINT TINT2; / CPU-Timer2 PINT DATALOG; / Datalogging interrupt PINT RTOSINT; / RTOS interrupt PINT EMUINT; / Emulation interrupt PINT XNMI; / Non-maskable interrupt PINT ILLE

11、GAL; / Illegal operation TRAP PINT USER0; / User Defined trap 0 PINT USER1; / User Defined trap 1 PINT USER2; / User Defined trap 2 PINT USER3; / User Defined trap 3 PINT USER4; / User Defined trap 4 PINT USER5; / User Defined trap 5 PINT USER6; / User Defined trap 6 PINT USER7; / User Defined trap

12、7 PINT USER8; / User Defined trap 8 PINT USER9; / User Defined trap 9 PINT USER10; / User Defined trap 10 PINT USER11; / User Defined trap 11 / Group 1 PIE Peripheral Vectors: PINT PDPINTA; / EV-A PINT PDPINTB; / EV-B PINT rsvd1_3; PINT XINT1; PINT XINT2; PINT ADCINT; / ADC PINT TINT0; / Timer 0 PIN

13、T 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

14、PieVectTableInit = PIE_RESERVED, / Reserved space PIE_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 Interrupts INT13_ISR, / XINT13 or CPU-Timer 1 INT14_ISR, / CPU-Ti

15、mer2 DATALOG_ISR, / Datalogging interrupt RTOSINT_ISR, / RTOS interrupt EMUINT_ISR, / Emulation interrupt NMI_ISR, / Non-maskable interrupt ILLEGAL_ISR, / Illegal operation TRAP USER0_ISR, / User Defined trap 0 USER1_ISR, / User Defined trap 1 USER2_ISR, / User Defined trap 2 USER3_ISR, / User Defin

16、ed trap 3 USER4_ISR, / User Defined trap 4 USER5_ISR, / User Defined trap 5 USER6_ISR, / User Defined trap 6 USER7_ISR, / User Defined trap 7 USER8_ISR, / User Defined trap 8 USER9_ISR, / User Defined trap 9 USER10_ISR, / User Defined trap 10 USER11_ISR, / User Defined trap 11/ Group 1 PIE Vectors P

17、DPINTA_ISR, / EV-A PDPINTB_ISR, / EV-B rsvd_ISR, XINT1_ISR, XINT2_ISR, ADCINT_ISR, / ADC TINT0_ISR, / Timer 0 WAKEINT_ISR, / WD./ Group 12 E Vectors rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, ;/-/ InitPieVectTable: /-/ This function initializes the PIE vector tab

18、le 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.

19、中断服务程序:让以上的数值指向你所要的服务程序,例如: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;解决方法:点击出现的问题条,看光标定位在哪里,然

20、后一点点删除,直到把编程的文字删除,最后把删除的写出来,回车就行了,因为回车的格式要在编辑状态哈哈!28016的定时器笔记学过2812的人会知道,2812的定时器和28016的定时器的寄存器很不一样。但是从功能上将差不多。关于28016定时器的时钟的讨论;定时器的时钟是由SYSCLKOUT经过TBCTL中的CLKDIV和HSPCLKDIV进行配置;和主要说明,我们应该记得SYSCLKOUT和HSPCLK之间还可以分频,但是在这里这个寄存器不影响。关于28016定时器的时钟同步的讨论;如果我们想使每个PWM模块具有同步时钟,我们可以通过软件强制各个模块之间同步,设定步骤如下: EPwm1Regs

21、.TBCTL.bit.SYNCOSEL = 0 / Pass through EPwm2Regs.TBCTL.bit.SYNCOSEL = 0; / Pass through EPwm3Regs.TBCTL.bit.SYNCOSEL = 0; / Pass through EPwm1Regs.TBCTL.bit.SWFSYNC = 1; EPwm2Regs.TBCTL.bit.SWFSYNC = 1; EPwm3Regs.TBCTL.bit.SWFSYNC = 1;以上程序是设定PWM1/2/3同步,我们由于我们只采用向上计数,所以不需要设定计数方向位。接下来如果我们想PWM1与PWM2输出相

22、位不一样,保持某个相位差,我们可以通过寄存器设定;EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm1Regs.TBPHS.half.TBPHS = 0; EPwm2Regs.TBPHS.half.TBPHS = 250; EPwm3Regs.TBPHS.half.TBPHS = 500;首先使能,然后赋予值;关于一些其他的配置如下:EPwm3Regs.TBPRD = PWM3_TIMER_TBPRD;

23、EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; / Count up EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; / Enable INT on Zero event EPwm3Regs.ETSEL.bit.INTEN = PWM3_INT_ENABLE; / Enable INT EPwm3Regs.ETPS.bit.INTPRD = ET_1ST; / Generate INT on 3rd event关于28016PWM配置的讨论PWM1的A/B的独立配置;除了counter-compare比较寄存器,CMPA

24、,CMPB,主要还是配置控制寄存器CMPCTL,对于影子寄存器的配置,还有影子寄存器的装载模式。这里主要讲关于PWM中action qualifier的配置;模式1:/ Setup shadow register load on ZERO EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

25、/ Set Compare values EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; / Set compare A value EPwm1Regs.CMPB = 500; / Set Compare B value / Set actions EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; / Set PWM1A on Zero EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; / Clear PWM1A on event A, up coun EPwm1Regs.AQCTLB.bit.ZRO = AQ_

26、SET; / Set PWM1B on Zero EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; / Clear PWM1B on event B, up count / Interrupt where we will change the Compare Values EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; / Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = 1; / Enable INT EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; /

27、Generate INT on 3rd event 其中红色的为PWM的输出方式配置,当PWM1.A在counter=0时,输出为0,在counter=CMPA时,且在向上计数,输出为1;而PWM1.B相反。模式二: / Set actions EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR; / Clear PWM2A on Period EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; / Set PWM2A on event A, up count EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR; / Clear PWM

28、2B on Period EPwm2Regs.AQCTLB.bit.CBU = AQ_SET; / Set PWM2B on event B, up count其中红色的为PWM的输出方式配置,当PWM1.A在counter=period时,输出为0,在counter=CMPA时,且在向上计数,输出为1;而PWM1.B相同;模式三:/ Set Actions EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; / Set PWM3A on event B, up count EPwm3Regs.AQCTLA.bit.CBU = AQ_CLEAR; / Clear PWM3A

29、on event B, up count其中红色的为PWM的输出方式配置,当PWM1.A在counter=CMPA时,输出为1,在counter=CMPB时,且在向上计数,输出为0,也就是计数在CMPA与CMPB之间时输出为1;模式四: EPwm3Regs.AQCTLB.bit.ZRO = AQ_TOGGLE; / Toggle EPWM3B on Zero此模式强制整个周期输出高或者输出地,与CMPA与CMPB无关,关于28016PWM死区时间配置的讨论主要与死区有关的是三个寄存器:Dead-Band Generator Control Register (DBCTL);Dead-Band Generator Rising Edge Del

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1