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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

TMS32F28335经验若干.docx

1、TMS32F28335经验若干TMS320F28335开发过程中常见问题总结1.SPI驱动TLE7241E出现返回值不对的问题。主要是由于时序的不对,导致TLE7241E输入采样时数据还没有建立,所以TLE7241E收到的命令不正确,所以返回值不正确。2.SPI驱动EEPROM时,如果用金属物触到clock pin时,能正确运行,否那么不能正确运行。出现次问题也是由于时序的问题,金属物触到clock导致clock出现微小幅度的偏移,导致正好和eeprom的时序对上,而不用金属物触碰时时序不正常,当使dsp MOSIpin数据发送提前半个周期后,eeprom工作正常。3.示波器有时会导致显示的波

2、形被消尖,所以用示波器测量时周期不能太大。TMS320F28335笔记-I2C1.响应和非响应的区别是什么? 关于i2c的响应问题:对于每一个接收设备从设备,slaver,当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲第九个脉冲用以和这个响应位相关联。 在这个脉冲期间,发出响应的从设备必须将SDA拉低并在时钟脉冲的高电平期间保持住。这表示该设备给出了一个ACK。如果它不拉低SDA线,就表示不响应NACK。另外,在从机发送方发送完最后一个字节后主设备接收方必须产生一个不响应位,用以通知从机发送方不要再发送信息了,这样从机

3、就知道该将SDA释放了,而后,主机发出一个停顿位给slaver。总结下,i2c通讯中,SDA 和 SCL 都是有主机控制的,从设备只是能够将SDA线拉低而已。对于SCL线,从机是没有任何能力去控制的。从机只能被动跟随SCL 再说的清楚些:主机发送数据到从机的状态下:主机控制SCL信号线和SDA信号线,从机只是在SCL线为高的时候去被动读取SDA线。主机读取从机的数据:主机来发出时钟信号,从机只是保证在时钟信号为高电平的时候的SDA的状态而已。 SDA和SCL已经通过上拉电阻被上拉,master可以控制拉低或者释放这两条线,而slaver只能控制SDA线。当master发送数据时,master会

4、适时地将SDA和SCL拉低或释放(拉高)。确切的时序应该是这样的:当mater要发送一个start时,mater会将SDA拉低,这就可以了,因为此时的SCL一定是High。好了,一个start就这样发出去了。而slaver也会发现这个start信号的发生,slaver便会准备好接收接下来的数据了。紧接着,master要发送一个Byte的数据了,一位一位的发出这8个bits。这时master会先将SCL拉低,然后在SCL为低的状态下将一个bit准备好放到SDA上比方要发送一个 0,master就会通过拉低SDA来放好这个0,然后master会把SCL拉高释放,此时slaver会立刻检测到SCL的

5、变化,由此聪明的slaver便知道master已经将要发送的那个bit准备好了,slaver便会在这个SCL的高电平期间尽快maser不会等你很久的哦去读取一下SDA,嗯读到了一个0,slaver就把这个0放到自己的移位存放器中待后续处理。master会在一个设定好的时间后把SCL再次拉低,然后在SCL为低电平期间把下一个bit放到SDA上,然后再把SCL拉高,然后slaver在SCL的高电平期间再去读SDA。如此反复8次,一个Byte的传输便告完毕。当这8个bit发完后,SCL是处于低电平的(被master拉低的),SDA是出于高电平的(master已经释放了SDA)。 当一个字节发送完毕后

6、,master会释放SDA拉高并拉低SCL,此时slaver如果打算发出一个ACK的话,它必须在这个SCL被master拉低的短暂时间去主动将SDA拉低并保持住 (此前我们说过,SDA此时已经被master释放,所以slaver才有时机去拉低这个SDA)。master会在一个确定的时间后再次将SCL拉高,并在拉高的期间去读取SDA线的状态,如果读到低电平,那么认为收到了来自slaver的响应ACK,否那么认为slaver没有响应NACK刚刚发送的那一个Byte。这个过程就是我们说的i2c通讯中的第9个时钟周期。当master读完这个ACK / NACK 后,会再次将SCL拉低,用以通知slav

7、er:第9个时钟周期已经完毕,你现在可以释放SDA了。而此时master也可以向SDA上准备下一个Byte的第一个bit。继而重复上述过程。或者,master也许想在接下来发送一个stop过去,那么master会在这个SCL为低的时间将SDA拉低,而后再将SCL拉高,在SCL为高的期间再将SDA释放 (拉高) 。这样,一个STOP位就产生了。你会发现此后的SDA和SCL都是高,这就是是所谓的总线空闲了!一句话:SCL是单向的,由master控制。而SDA是双向的,master可以控制,slaver也可以控制。 2.示波器探头会对波形产生影响,导致波形延时,使用是请注意。TMS320F28335

8、学习笔记-ADC控制器1.ADC的工作模式有哪些? 同时采样模式和顺序采样模式。2.ADCINT与SEQ1INT、SEQ2INT中断有什么区别 SEQ1INT和SEQ2INT对应序列器SEQ1和SEQ2的中断,ADCINT是为了向前兼容F281x系列的ADC中断,可以由SEQ1或SEQ2触发产生。在ADCINT中断效劳程序里,需要软件干预去根据对应标志位确定到底是哪个序列产生了中断,而SEQINT1&2是不需要的。TMS320F28335笔记-启动过程1.DSP reset后运行的起始地址是多少? 0x3FFFC02.仿真器烧写程序的步骤是? 根据cmd文件把程序烧到指定位置,然后执行。3.D

9、SP的Flash启动过程是什么? 首先硬件配置GPIO8487上拉为1,即处于Flash启动过程。当DSP复位后,会从复位向量0x3FFFC0处取得复位向量,并跳转到InitBoot处开场执行,InitBoot会读GPIO8487的值发现全为1判断为Flash启动方式。然后会跳到0x33FFF6处执行。在CCS5.2工程的cmd文件中有如下代码:MEMORYPAGE 0 :BEGIN : origin = 0x33FFF6, length = 0x000002 /* Boot to M0 will go here */.SECTIONS.codestart : BEGIN PAGE = 0.即

10、表示把codestart段放到0x33FFF6位置处,文件“DSP2833x_CodeStartBranch.asm中有codestart段的定义,实际上codestart段只是包含了一个跳转指令,是程序跳转到_c_int00处,_c_int00在boot.asm in RTS library中有定义,_c_int00的代码最终会调用c的main函数,之后就是main函数的执行。4.F28335如何烧写代码到flash中并运行?首先使用添加C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_moncmdF28335 d。此文件即为配置代码到flas

11、h中的TI官方配置文件。然后参考C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_examples_ccsv4flash_f28335。添加以下代码:MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);将一些在存中运行的代码从flash复制到存中,然后程序才能正常运行。5.写好的代码再ram中能正常运行但是烧写到flash中后,函数DSP28x_usDelay()不能正常运行为什么? 因为在DSP2833x_usDelay.asm中有.sect ramfuncs,即把该

12、函数定义在段ramfuncs中, 而此段需要在存中运行,故需要使用函数MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);将ramfuncs段复制到存中然后运行。只算以这样设计是因为函数DSP28x_usDelay()精准运行对运行速度有要求故必须放在段ramfuncs中。参考:blog.sina./s/blog_9388c4140100vs0r.html6 d中以下代码如何解释?ramfuncs : LOAD = FLASHD,RUN = RAML0,LOAD_START(_RamfuncsLoadStart),L

13、OAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE = 0第1行表示该段的装载在PAGA0的FLASHD中第2行表示该段的运行地址在PAGE0的RAML0中LOAD_ START(_RamfuncsLoadStart)令编译器创立了一个变量RamfuncsLoadStart,该变量指向段ramfuncs的装载地址的首地址LOAD_ START为编译伪指令,请见CCS的帮助文档;LOAD_ START(_RamfuncsLoadEnd)令编译器创立了一个变量RamfuncsLoadEnd,该变量指向段ramfuncs的装载地址的

14、末地址LOAD_ END为编译伪指令,请见CCS的帮助文档;LOAD_ START(_RamfuncsRunStart)令编译器创立了一个变量RamfuncsRunStart,该变量指向段ramfuncs的运行地址的首地址LOAD_ START为编译伪指令,请见CCS的帮助文档; 从第1和2行可以看出,段ramfuncs中的函数DSP28x_usDelay()的装载地址和运行地址是不同的,本程序中装载在Flash的块FLASHD中,而在SARAM L0中运行,这只是目标,实际运行时DSP并不会自动将Flash中的代码拷贝到SARAM中,因此需要手动添加代码来完成。在C函数中,为了使用变量Ram

15、funcsLoadStart、RamfuncsLoadEnd和RamfuncsRunStart,必须先声明,本工程在文件DSP2833x_GlobalPrototypes.h中做了如下声明:extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsLoadEnd;extern Uint16 RamfuncsRunStart;然后就可以使用了。在Main.c中,使用MemCopy()函数将段ramfuncs中的函数DSP28x_usDelay()的代码从装载地址RamfuncsLoadStartRamfuncsLoadEnd拷贝到Ramfuncs

16、RunStart开场的SARAM空间中。之后在程序运行时,只要调用DSP28x_usDelay()函数,都会自动地指向SARAM中相应的函数入口地址,这一点是自动完成的。MemCopy()函数原型在MemCopy.c中,DSP2833x_GlobalPrototypes.h声明。7.如何将一个函数放到ram中运行? 参考TI公司头文件中自带InitFlash函数,这些函数会以CODE_SECTION申明。如:#pragma CODE_SECTION(InitFlash, ramfuncs);TMS320F28335笔记-中断1.如何开启某个中断? 设置中断向量。例如:PieVectTable.

17、WAKEINT = &wakeint_isr;翻开PIE控制器。PieCtrlRegs.PIECTRL.bit.ENPIE = 1;使能PIE中对应外设的中断相应group的相应pin。例如:PieCtrlRegs.PIEIER1.bit.INTx8 = 1;使能CPU的相应中断INT1INT12IER |= M_INT1;使能CPU响应中断EINT;参考 .61ic./Article/C2000/Delfino/201112/40118.html2.中断标志有几级?作用是什么? 中断标志主要有三级CPU有16个标志位、PIE有12组每组有12个标志位和外设有的外设没有。标志位在中断发生后锁存

18、中断状态,即表示中断发生。在CPU响应中断后,会自动去除cpu级别的标志位IFR bit,同时将INTM bit 置位,以防止其它中断的发生;CPU在从PIE中取中断向量时PIE会自动去除PIE级别的标志位PIEIFRx.y。所以在进入中断处理程序后除了外设所有中断位都已经去除。而中断处理程序中需要去除PIEACKx和外设的中断标志位如果有的话。参考 .deyisupport./question_answer/f/56/t/13047.aspx.61ic./Article/C2000/Delfino/201204/41777.htmlTMS320F28335笔记-SPI模块什么是SPI接口?

19、SPI接口是高速同步串行输入输出接口。TMS320F28335有几个SPI接口模块? 有一个专门的SPI模块, 另外两个McBSP也可以配置为SPI接口。TMS320F28335SPI接口由几组存放器控制? 12组,位于控制存放器帧0x7040h开场的位置。所有的存放器都为16bit存放器FIFO有几级? 16级SPI FIFO模式下如何对传输和接收FIFO进展操作? 直接对SPITXBUF进展赋值以传输数据例如:SpiaRegs.SPITXBUF=sdatai。此操作可理解为:首先使TXFIFO头指针加1,然后把值写入TXFIFO头指针指向的位置。如果当前没有一个激活的传输过程时,对SPIT

20、XBUF的写入会激活一个传输过程。 直接读取SPIRXBUF的值以接收数据例如:rdatai=SpiaRegs.SPIRXBUF,此操作可理解为:首先从RXFIFO头指针处读取1个word, 然后使RXFIFO头指针减1。SPI FIFO模式下传输和接收中断何时产生? 是在数据传输或接收完毕后,再判断传输和接收FIFO队列中有多少数据SPIFFTX.TXFFST4-0和SPIFFRX.RXFFST4-0的值。对于传输FIFO如果FIFO中数据小于等于TXFFIL4-0此存放器指定临界值指定的值时会触发中断,在中断处理例程中继续传输数据。对于接收FIFO如果FIFO中的值大于等于RXFFIL4-

21、0中指定的值时触发中断,在中断处理例程中接收数据。故FIFO模式下中断触发条件除了标准SPI模式下的数据传输接收完毕的条件外还要满足FIFO中的数据小于等于TXFFIL或大于等于RXFFIL设定值的条件,在两个条件都满足的情况下才会触发中断。另外一般情况下,FIFO模式SPI初始化完后会立即产生以个传输中断,因为此时TXFIFO没有数据满足产生中断的条件。如果只接收数据不发送数据如何激活接收过程? SPI的的接收过程必须依赖传输过程,故即使值接收数据也必须对SPITXBUF写入以激活一个传输过程来接收数据。TMS320F28335笔记-McBSP模块1.McBSP接口总共有几个?每个McBSP

22、接口有几根pin? TMS320F28335总共有两个McBSP接口。每个接口有六根pin, 分别是:MFSX, MFSR, MCLKX, MCLKR, MDX, MDR。2.McBSP用于SPI模式时使用那些pin?他们和标准SPI pin的对应关系是什么?SPICLK-MCLKXSPISIMO-MDXSPISOMI-MDRSPISTE-MFSXSPITXINT-SPIRXINT-3.McBSP如何开启clock stop mode以兼容SPI接口? 通过CLKSTP、CLKXP和CLKRP来配置时钟的极性和延时的SPI兼容模式。DSP28335研发笔记1.如何查看CCS5.2中包含的源文件

23、有哪些?以及他们的位置? CCS5.2工程中C语言源文件有两局部组成,一局部是在project路径下的.c文件,另外一局部是通过连接添加到工程里的.project文件中的字段。因此CCS5.2中的源文件一局部在工程目录下,另外一局部在.project文件中的字段包含的路径下。2.CCS中GEL文件的作用是什么? ccs的gel语言是一种交互式的命令,它是解释执行的,即不能被编译成可执行文件。它的作用在于扩展了ccsstudio的功能,可以用gel来调用一些菜单命令,对DSP的存储器进展配置等等。但是作者建议对于使用仿真器和DSP功能板的仿真环境用户来说,这种GEL语言文件是没必要参加到配置中的

24、。gel语言的重要性在于针对计算机模拟环境的用户,使用gel可以为其准备一个虚拟的DSP仿真环境,但也不是非用不可的。3.引用例子中的源文件时要注意什么? 使用CCS5.2导入例子中的源文件时,最好不要选择连接方式,而使用复制的方式,这样必要时可以更改这些源文件,而不会影响其他的程序的使用。4.CCS5.2如果没有包含函数的声名头文件时也能运行但是结果会不正常,故当函数调用出现莫名其妙的问题时,要检查声名函数的头文件是否包含。5.CCS5.2开发DSP28335程序时如何设置程序堆栈的大小? CCS5.2默认情况下堆栈的大小都为0x400,在Project-Properties-Build-C

25、200 Linker-Basic Options下设置。设置完堆栈的大小后,还要在cmd文件中分配堆栈存储空间的 段的位置和大小,栈空间的段名为.stack用于函数中的临时变量,堆空间的段名为.sysmem用于c语言malloc函数分配存,malloc最大可分配存为Project-Properties-Build-C200 Linker-Basic Options下设置的大小减2。cmd文件中的堆栈段的大小不能小于Project-Properties-Build-C200 Linker-Basic Options下设置的大小。一般来讲不用变动栈空间的大小和位置,如果函数中需要大的空间就申请堆空

26、间。堆空间可以指定为外部存,但要注意在第一次malloc函数调用之前一定要初始化外部存。否那么malloc能执行成功但是空间指向未定。heap大小限制为32k word即0x10000。6.相关参考processors.wiki.ti./index.php7.如何添加头文件的相对路径? 首先在Project-Properties-Build选项下,点击Variables添加一个变量,然后就可以在Project-Properties-Build-C2000 piler-Include Options下用$引用变量。表示工程路径的系统变量是PROJECT_ROOT,可以在Project-Prope

27、rties-Build-C2000 piler-Include Options下直接引用。注意Project-Properties-Resource-Linked Resources下的变量在Project-Properties-Build-C2000 piler-Include Options下无效,只有Project-Properties-Build下Variables选项卡中的变量才能用。processors.wiki.ti./index.php/Include_paths_and_options8.当程序烧写到flash中运行时,设置断点为什么总是出错? 当程序烧写到flash中时设置

28、的断点为硬件断点,此断点对C28x系列DSP只能设置两个多的话就会报错,另外有些函数有可能会占用硬件断点,故设置断点失败时可查一下如何清理c函数的硬件断点。9.CCS5 Debug模式下Tool-Graphs的用法的要点? 进入CCS Debug模式,点击debug按钮右边的小箭头翻开下拉列表,选中Debug Configurations,在target选项卡下选择Realtime Options-Halt the target before any debugger access。如果不选此项当target running时,graph波形会是一条为0的直线。 在代码中打断点,运行到断点处,

29、因为只有运行在断点处Graphs才能识别变量地址,才能在设定StartAddress时使用数组名和&变量名的形式。Graphs只能跟踪全局变量,所以缓冲区要设置为全局变量。参考 forum.eepw./thread/214974/1hi.baidu./chanceyue/item/af7ecddc744aa34eddf9bed8.61ic./Article/CCS/Experience/201211/45940.html10.如果ccs出现莫名其妙的问题时,请删除.metadata11.arm和dsp之间进展串口通信如果dsp先启动,arm后启动,通讯有异常,反之正常? 主要原因是arm启动时会有一个导致BRKDT错误的信号出现,此时如果dsp已经启动就会收到此错误,并停顿工作,直到SW Rest或者DSP重启。解决方法是当收到此错误时,SW Reset SCI模块。参考 .deyisupport./question_answer/f/56/t/11621.aspx

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

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