




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、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会立刻检测到SC
5、L的变化,由此聪明的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拉低
7、,用以通知slaver:第9个时钟周期已经结束,你现在可以释放SDA了。而此时master也可以向SDA上准备下一个Byte的第一个bit。继而重复上述过程。或者,master也许想在接下来发送一个stop过去,那么master会在这个SCL为低的时间内将SDA拉低,而后再将SCL拉高,在SCL为高的期间再将SDA释放 (拉高) 。这样,一个STOP位就产生了。你会发现此后的SDA和SCL都是高,这就是是所谓的总线空闲了!一句话:SCL是单向的,由master控制。而SDA是双向的,master可以控制,slaver也可以控制。 2.示波器探头会对波形产生影响,导致波形延时,使用是请注意。TM
8、S320F28335学习笔记-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文件把
9、程序烧到指定位置,然后执行。3.DSP的Flash启动过程是什么? 首先硬件配置GPIO8487上拉为1,即处于Flash启动过程。当DSP复位后,会从复位向量0x3FFFC0处取得复位向量,并跳转到InitBoot处开始执行,InitBoot会读GPIO8487的值发现全为1判断为Flash启动方式。然后会跳到0x33FFF6处执行。在CCS5.2工程的cmd文件中有如下代码:MEMORYPAGE 0 : BEGIN : origin = 0x33FFF6, length = 0x000002 /*
10、 Boot to M0 will go here */.SECTIONS.codestart : > BEGIN PAGE = 0.即表示把codestart段放到0x33FFF6位置处,文件“DSP2833x_CodeStartBranch.asm”中有codestart段的定义,实际上codestart段只是包含了一个跳转指
11、令,是程序跳转到_c_int00处,_c_int00在boot.asm in RTS library中有定义,_c_int00的代码最终会调用c的main函数,之后就是main函数的执行。4.F28335如何烧写代码到flash中并运行?首先使用添加C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_commoncmdF28335.cmd。此文件即为配置代码到flash中的TI官方配置文件。然后参考C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_examples_ccsv4flash_f28335。
12、添加以下代码:MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);将一些在内存中运行的代码从flash复制到内存中,然后程序才能正常运行。5.写好的代码再ram中能正常运行但是烧写到flash中后,函数DSP28x_usDelay()不能正常运行为什么? 因为在DSP2833x_usDelay.asm中有.sect "ramfuncs",即把该函数定义在段"ramfuncs"中, 而此段需要在内存中运行,故需要使用函数MemCopy(&Ramfu
13、ncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);将ramfuncs段复制到内存中然后运行。只算以这样设计是因为函数DSP28x_usDelay()精准运行对运行速度有要求故必须放在段"ramfuncs"中。参考:6.cmd中以下代码如何解释? ramfuncs : LOAD = FLASHD,
14、 RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd),
15、160; RUN_START(_RamfuncsRunStart), PAGE = 0第1行表示该段的装载在PAGA0的FLASHD中第2行表示该段的运行地址在PAGE0的RAML0中LOAD_ START(_RamfuncsLoadStart)令编译器创建了一个变量RamfuncsLoadStart,该变量指向段ramfu
16、ncs的装载地址的首地址(LOAD_ START为编译伪指令,请见CCS的帮助文档);LOAD_ START(_RamfuncsLoadEnd)令编译器创建了一个变量RamfuncsLoadEnd,该变量指向段ramfuncs的装载地址的末地址(LOAD_ END为编译伪指令,请见CCS的帮助文档);LOAD_ START(_RamfuncsRunStart)令编译器创建了一个变量RamfuncsRunStart,该变量指向段ramfuncs的运行地址的首地址(LOAD_ START为编译伪指令,请见CCS的帮助文档); 从第1和2行可以看出,段ramfuncs中的函数DSP28x_usDel
17、ay()的装载地址和运行地址是不同的,本程序中装载在Flash的块FLASHD中,而在SARAM L0中运行,这只是目标,实际运行时DSP并不会自动将Flash中的代码拷贝到SARAM中,因此需要手动添加代码来完成。在C函数中,为了使用变量RamfuncsLoadStart、RamfuncsLoadEnd和RamfuncsRunStart,必须先声明,本工程在文件DSP2833x_GlobalPrototypes.h中做了如下声明:extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsLoadEnd;extern Uint16 Ramfun
18、csRunStart;然后就可以使用了。在Main.c中,使用MemCopy()函数将段ramfuncs中的函数DSP28x_usDelay()的代码从装载地址RamfuncsLoadStartRamfuncsLoadEnd拷贝到RamfuncsRunStart开始的SARAM空间中。之后在程序运行时,只要调用DSP28x_usDelay()函数,都会自动地指向SARAM中相应的函数入口地址,这一点是自动完成的。MemCopy()函数原型在MemCopy.c中,DSP2833x_GlobalPrototypes.h声明。7.如何将一个函数放到ram中运行? 参考TI公司头文件中自带InitFl
19、ash函数,这些函数会以CODE_SECTION申明。如:#pragma CODE_SECTION(InitFlash, "ramfuncs");TMS320F28335笔记-中断1. 如何开启某个中断? 设置中断向量。例如:PieVectTable.WAKEINT = &wakeint_isr;· 打开PIE控制器。PieCtrlRegs.PIECTRL.bit.ENPIE = 1;· 使能PIE中对应外设的中断(相应group的相应pin)。例如:PieCtrlRegs.PIEIER1.bit.INTx8 = 1;· 使能CPU的相
20、应中断(INT1INT12)IER |= M_INT1;· 使能CPU响应中断EINT;参考网址:2.中断标志有几级?作用是什么? 中断标志主要有三级CPU(有16个标志位)、PIE(有12组每组有12个标志位)和外设(有的外设没有)。标志位在中断发生后锁存中断状态,即表示中断发生。在CPU响应中断后,会自动清除cpu级别的标志位IFR bit,同时将INTM bit 置位,以防止其它中断的发生;CPU在从PIE中取中断向量时PIE会自动清除PIE级别的标志位PIEIFRx.y。所以在进入中断处理程序后除了外设所有中断位都已经清除。而中断处理程序中需要清除PIEACKx和外设的中断标
21、志位(如果有的话)。参考网址:TMS320F28335笔记-SPI模块什么是SPI接口? SPI接口是高速同步串行输入输出接口。TMS320F28335有几个SPI接口模块? 有一个专门的SPI模块, 另外两个McBSP也可以配置为SPI接口。TMS320F28335SPI接口由几组寄存器控制? 12组,位于控制寄存器帧0x7040h开始的位置。所有的寄存器都为16bit寄存器FIFO有几级? 16级SPI FIFO模式下如何对传输和接收FIFO进行操作? 直接对SPITXBUF进行赋值以传输数据例如:SpiaRegs.SPITXBUF=sdatai。此操作可理解为:首先使TXFIFO头指针加
22、1,然后把值写入TXFIFO头指针指向的位置。如果当前没有一个激活的传输过程时,对SPITXBUF的写入会激活一个传输过程。 直接读取SPIRXBUF的值以接收数据例如:rdatai=SpiaRegs.SPIRXBUF,此操作可理解为:首先从RXFIFO头指针处读取1个word, 然后使RXFIFO头指针减1。SPI FIFO模式下传输和接收中断何时产生? 是在数据传输或接收结束后,再判断传输和接收FIFO队列中有多少数据(SPIFFTX.TXFFST4-0和SPIFFRX.RXFFST4-0的值)。对于传输FIFO如果FIFO中数据小于等于TXFFIL4-0(此寄存器指定临界值)指定的值时会
23、触发中断,在中断处理例程中继续传输数据。对于接收FIFO如果FIFO中的值大于等于RXFFIL4-0中指定的值时触发中断,在中断处理例程中接收数据。故FIFO模式下中断触发条件除了标准SPI模式下的数据传输接收完毕的条件外还要满足FIFO中的数据小于等于TXFFIL或大于等于RXFFIL设定值的条件,在两个条件都满足的情况下才会触发中断。另外一般情况下,FIFO模式SPI初始化完后会立即产生以个传输中断,因为此时TXFIFO没有数据满足产生中断的条件。如果只接收数据不发送数据如何激活接收过程? SPI的的接收过程必须依赖传输过程,故即使值接收数据也必须对SPITXBUF写入以激活一个传输过程来
24、接收数据。TMS320F28335笔记-McBSP模块1.McBSP接口总共有几个?每个McBSP接口有几根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以兼
25、容SPI接口? 通过CLKSTP、CLKXP和CLKRP来配置时钟的极性和延时的SPI兼容模式。DSP28335研发笔记1.如何查看CCS5.2中包含的源文件有哪些?以及他们的位置? CCS5.2工程中C语言源文件有两部分组成,一部分是在project路径下的.c文件,另外一部分是通过连接添加到工程里的(.project文件中的<linkedResources></linkedResources>字段)。因此CCS5.2中的源文件一部分在工程目录下,另外一部分在.project文件中的<linkedResources></linkedResources
26、>字段包含的路径下。2.CCS中GEL文件的作用是什么? ccs的gel语言是一种交互式的命令,它是解释执行的,即不能被编译成可执行文件。它的作用在于扩展了ccsstudio的功能,可以用gel来调用一些菜单命令,对DSP的存储器进行配置等等。但是作者建议对于使用仿真器和DSP功能板的仿真环境用户来说,这种GEL语言文件是没必要加入到配置中的。gel语言的重要性在于针对计算机模拟环境的用户,使用gel可以为其准备一个虚拟的DSP仿真环境,但也不是非用不可的。3.引用例子中的源文件时要注意什么? 使用CCS5.2导入例子中的源文件时,最好不要选择连接方式,而使用复制的方式,这样必要时可以更
27、改这些源文件,而不会影响其他的程序的使用。4.CCS5.2如果没有包含函数的声名头文件时也能运行但是结果会不正常,故当函数调用出现莫名其妙的问题时,要检查声名函数的头文件是否包含。5.CCS5.2开发DSP28335程序时如何设置程序堆栈的大小? CCS5.2默认情况下堆栈的大小都为0x400,在Project->Properties->Build->C200 Linker->Basic Options下设置。设置完堆栈的大小后,还要在cmd文件中分配堆栈存储空间的 段的位置和大小,栈空间的段名为.stack用于函数中的临时变量,堆空间的段名为.sysmem用于c语言m
28、alloc函数分配内存,malloc最大可分配内存为Project->Properties->Build->C200 Linker->Basic Options下设置的大小减2。cmd文件中的堆栈段的大小不能小于Project->Properties->Build->C200 Linker->Basic Options下设置的大小。一般来讲不用变动栈空间的大小和位置,如果函数中需要大的空间就申请堆空间。堆空间可以指定为外部内存,但要注意在第一次malloc函数调用之前一定要初始化外部内存。否则malloc能执行成功但是空间指向未定。heap大小限制为32k word即0x10000。6.相关参考网站7.如何添加头文件的相对路径? 首先在Project->Properties->Build选项下,点击Variables添加一个变量,然后就可以在Project->Properties->Build->C2000 Compiler->Include Option
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权申报培训书籍课件
- 知识产权普法培训内容课件
- 跨学科教学课件
- 知识产权就业培训课件
- 2025年消费与零售市场消费者行为变化趋势分析
- 2025年加油站安全培训试题库及答案
- 钢铁销售基本知识培训课件
- 2025年安全加密师面试题及答案
- 知识产权培训情况总结
- 知识产权培训宣讲会议课件
- 北邮社电机拖动与调速技术教学包课后题解
- 学校门卫岗位职责及管理制度
- JJG 1105-2015氨气检测仪
- GB/T 8118-2010电弧焊机通用技术条件
- GB/T 17421.7-2016机床检验通则第7部分:回转轴线的几何精度
- 呆滞物料预防与处理(精益培训)
- 《中式面点制作第二版》教案高教版
- 看门狗定时器
- 质量整改通知单(样板)
- 进展性脑卒中的诊疗策略课件
- 2020届高三北京高考“多文本阅读”总攻略
评论
0/150
提交评论