欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PDF文档下载
     

    TMS320F28335经验若干要点.pdf

    • 资源ID:5198293       资源大小:178.79KB        全文页数:19页
    • 资源格式: PDF        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    TMS320F28335经验若干要点.pdf

    TMS320F28335 开发过程中常见问题总结 1.SPI 驱动 TLE7241E出现返回值不对的问题。主要是由于时序 的不对,导致 TLE7241E 输入采样时数据还没有建立,所以TLE7241E 收到的命令不正确,所以返回值不正确。 2.SPI 驱动 EEPROM 时,如果用金属物触到clock pin时,能正 确运行,否则不能正确运行。出现次问题也是由于时序的问题,金属 物触到 clock 导致 clock出现微小幅度的偏移,导致正好和eeprom 的时序对上,而不用金属物触碰时时序不正常,当使dsp MOSIpin数 据发送提前半个周期后,eeprom工作正常。 3. 示波器有时会导致显示的波形被消尖,所以用示波器测量时周 期不能太大。 TMS320F28335 笔记 -I2C 1. 响应和非响应的区别是什么? 关于 i2c 的响应问题:对于每一个接收设备 (从设备,slaver ), 当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此, the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用 以和这个响应位相关联。 在这个脉冲期间, 发出响应的从设备必须将SDA拉低并在时钟脉 冲的高电平期间保持住。这表示该设备给出了一个ACK 。如果它不拉 低 SDA线,就表示不响应( NACK )。 另外,在从机(发送方)发送完最后一个字节后主设备(接收方)必 须产生一个不响应位,用以通知从机(发送方)不要再发送信息了, 这样从机就知道该将SDA释放了,而后,主机发出一个停止位给 slaver 。 总结下, i2c 通讯中, SDA 和 SCL 都是有主机控制的,从设备 只是能够将 SDA线拉低而已。 对于 SCL线,从机是没有任何能力去控 制的。从机只能被动跟随SCL 再说的清楚些: 主机发送数据到从机的状态下:主机控制 SCL信 号线和 SDA 信号线, 从机只是在 SCL线为高的时候去被动读取SDA 线。 主机读取从机的数据: 主机来发出时钟信号, 从机只是保证在时钟信 号为高电平的时候的SDA的状态而已。 SDA和 SCL已经通过上拉电阻被上拉, master 可以控制(拉低或 者释放)这两条线,而 slaver只能控制 SDA线。当 master 发送数据 时,master 会适时地将 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的变化,由此 聪明的 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) 。 当一个字节发送完毕后, 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拉低,用以通知 slaver :第 9 个时钟周期已经结束,你现在可以释放SDA了。而此时 master 也 可以向 SDA 上准备下一个 Byte 的第一个 bit 。 继而重复上述过程。 。 。 。 或者, master 也许想在接下来发送一个stop 过去,那么 master 会 在这个 SCL为低的时间内将 SDA拉低,而后再将 SCL拉高,在 SCL为 高的期间再将 SDA释放 ( 拉高) 。这样,一个 STOP 位就产生了。你 会发现此后的 SDA和 SCL都是高,这就是是所谓的总线空闲了! 一句话: SCL是单向的,由 master 控制。而 SDA是双向的, master 可以控制, slaver也可以控制。 2.示波器探头会对波形产生影响,导致波形延时,使用 是请注意。 TMS320F28335 学习笔记 -ADC控制器 1.ADC的工作模式有哪些? 同时采样模式和顺序采样模式。 2.ADCINT 与 SEQ1INT 、SEQ2INT中断有什么区别 SEQ1INT 和 SEQ2INT 对应序列器 SEQ1 和 SEQ2的中断,ADCINT 是 为了向前兼容 F281x系列的 ADC 中断, 可以由 SEQ1 或 SEQ2 触发产生。 在 ADCINT 中断服务程序里,需要软件干预去根据对应标志位确定到 底是哪个序列产生了中断,而SEQINT1 将一些在内存中运行的代码从flash 复制到内 存中,然后程序才能正常运行。 5. 写好的代码再ram 中能正常运行但是烧写到flash中后, 函数 DSP28x_usDelay() 不能正常运行为什么? 因为在 DSP2833x_usDelay.asm中有.sect “ramfuncs“,即把该 函数定义在段 “ramfuncs“ 中, 而此段需要在内存中运行,故需要使 用函数 MemCopy( 将 ramfuncs 段复制到内存中然后运行。 只算以 这样设计是因为函数DSP28x_usDelay()精准运行对运行速度有要求 故必须放在段 “ramfuncs“ 中。参考: http:/blog.sina.com.cn/s/blog_9388c4140100vs0r.html 6. cmd中以下代码如何解释? ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsL oadStart), LOAD_END(_RamfuncsLoa dEnd), RUN_START(_RamfuncsRu nStart), PAGE = 0 第 1 行表示该段的装载在PAGA0 的 FLASHD 中 第 2 行表示该段的运行地址在PAGE0 的 RAML0 中 LOAD_ START(_RamfuncsLoadStart) 令编译器创建了一个变量 RamfuncsLoadStart ,该变量指向段 ramfuncs 的装载地址的首地址 (LOAD_ START 为编译伪指令,请见CCS 的帮助文档); LOAD_ START(_RamfuncsLoadEnd)令编译器创建了一个变量 RamfuncsLoadEnd ,该变量指向段ramfuncs 的装载地址的末地址 (LOAD_ END 为编译伪指令,请见CCS 的帮助文档); LOAD_ START(_RamfuncsRunStart) 令编译器创建了一个变量 RamfuncsRunStart,该变量指向段 ramfuncs 的运行地址的首地址 (LOAD_ START 为编译伪指令,请见CCS 的帮助文档); 从第 1和 2行可以看出,段 ramfuncs 中的函数 DSP28x_usDelay() 的装载地址和运行地址是不同的, 本程序中装载在Flash 的块 FLASHD 中,而在 SARAM L0 中运行,这只是目标,实际运行时DSP并不会自 动将 Flash 中的代码拷贝到 SARAM 中, 因此需要手动添加代码来完成。 在 C函数中,为了使用变量RamfuncsLoadStart 、RamfuncsLoadEnd 和 RamfuncsRunStart,必须先声明,本工程在文件 DSP2833x_GlobalPrototypes.h中做了如下声明: extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadEnd; extern Uint16 RamfuncsRunStart; 然后就可以使用了。在 Main.c 中, 使用 MemCopy() 函数将段 ramfuncs 中的函数 DSP28x_usDelay()的代码从装载地址RamfuncsLoadStart RamfuncsLoadEnd 拷贝到 RamfuncsRunStart 开始的 SARAM 空间中。 之后在程序运行时,只要调用DSP28x_usDelay()函数,都会自动地 指向 SARAM 中相应的函数入口地址, 这一点是自动完成的。 MemCopy() 函数原型在 MemCopy.c中,DSP2833x_GlobalPrototypes.h声明。 7. 如何将一个函数放到ram 中运行 ? 参考 TI 公司头文件中自带InitFlash函数,这些函数会以 CODE_SECTION申明。如: #pragma CODE_SECTION(InitFlash, “ramfuncs“); TMS320F28335 笔记-中断 1. 如何开启某个中断? 设置中断向量。 例如:PieVectTable.WAKEINT = 打开 PIE 控制器。 PieCtrlRegs.PIECTRL.bit.ENPIE = 1; 使能 PIE 中对应外设的中断(相应group 的相应 pin )。例如: PieCtrlRegs.PIEIER1.bit.INTx8 = 1; 使能 CPU 的相应中断( INT1INT12)IER |= M_INT1; 使能 CPU 响应中断 EINT; 参考网址: http:/www.61ic.com/Article/C2000/Delfino/201112/40118.html 2. 中断标志有几级?作用是什么? 中断标志主要有三级CPU (有 16 个标志位)、 PIE(有 12 组每 组有 12 个标志位)和外设(有的外设没有)。标志位在中断发生后 锁存中断状态,即表示中断发生。在CPU 响应中断后,会自动清除 cpu 级别的标志位 IFR bit ,同时将 INTM bit 置位,以防止其它中 断的发生; CPU 在从 PIE 中取中断向量时 PIE 会自动清除 PIE 级别的 标志位 PIEIFRx.y 。所以在进入中断处理程序后除了外设所有中断位 都已经清除。而中断处理程序中需要清除PIEACKx和外设的中断标志 位(如果有的话)。 参考网址: http:/www.deyisupport.com/question_answer/f/56/t/13047.asp x http:/www.61ic.com/Article/C2000/Delfino/201204/41777.html TMS320F28335 笔记-SPI 模块 什么是 SPI 接口? SPI接口是高速同步串行输入输出接口。 TMS320F28335有几个 SPI 接口模块? 有一个专门的 SPI 模块, 另外两个 McBSP 也可以配置为 SPI 接 口。 TMS320F28335SPI接口由几组寄存器控制? 12组,位于控制寄存器帧0x7040h 开始的位置。所有的寄存器 都为 16bit 寄存器 FIFO 有几级? 16级 SPI FIFO 模式下如何对传输和接收FIFO 进行操作? 直接对 SPITXBUF 进行赋值以传输数据例如: SpiaRegs.SPITXBUF=sdatai 。此操作可理解为:首先使TXFIFO头 指针加 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(此寄存器指定临界 值)指定的值时会触发中断,在中断处理例程中继续传输数据。对于 接收 FIFO如果 FIFO中的值大于等于 RXFFIL4-0中指定的值时触发中 断,在中断处理例程中接收数据。故FIFO模式下中断触发条件除了 标准 SPI 模式下的数据传输接收完毕的条件外还要满足FIFO中的数 据小于等于 TXFFIL或大于等于 RXFFIL设定值的条件,在两个条件都 满足的情况下才会触发中断。另外一般情况下,FIFO模式 SPI 初始 化完后会立即产生以个传输中断,因为此时TXFIFO没有数据满足产 生中断的条件。 如果只接收数据不发送数据如何激活接收过程? SPI的的接收过程必须依赖传输过程,故即使值接收数据也必须 对 SPITXBUF 写入以激活一个传输过程来接收数据。 TMS320F28335 笔记-McBSP 模块 1.McBSP接口总共有几个?每个McBSP 接口有几根pin ? TMS320F28335 总共有两个 McBSP 接口。 每个接口有六根 pin ,分 别是: MFSX , MFSR , MCLKX , MCLKR , MDX , MDR 。 2.McBSP用于 SPI 模式时使用那些pin ?他们和标准SPI pin 的对应关系是什么? SPICLK-MCLKX SPISIMO-MDX SPISOMI-MDR SPISTE-MFSX SPITXINT- SPIRXINT- 3.McBSP如何开启 clock stop mode以兼容 SPI 接口? 通过 CLKSTP 、 CLKXP 和 CLKRP 来配置时钟的极性和延时的SPI 兼 容模式。 DSP28335 研发笔记 1. 如何查看 CCS5.2中包含的源文件有哪些?以及他们的位 置? CCS5.2工程中 C语言源文件有两部分组成, 一部分是在 project 路径下的 .c 文件,另外一部分是通过连接添加到工程里的(.project 文件中的 字段) 。 因此 CCS5.2 中的源文件一部分在工程目录下,另外一部分在.project文件中的 字段包含的路径下。 2.CCS中 GEL文件的作用是什么? ccs的 gel 语言是一种交互式的命令,它是解释执行的,即不能 被编译成 可执行文件。 它的作用在于扩展了ccsstudio的功能,可以 用 gel 来调用一些菜单命令, 对 DSP的存储器进行配置等等。 但是作 者建议对于使用仿真器和DSP功能板的仿真环境用户来说,这种GEL 语言文件是没必要加入到配置中的。gel 语言的重要性在于针对计算 机模拟环境的用户,使用 gel 可以为其准备一个虚拟的DSP 仿真环境, 但也不是非用不可的。 3. 引用例子中的源文件时要注意什么? 使用 CCS5.2导入例子中的源文件时,最好不要选择连接方式, 而使用复制的方式, 这样必要时可以更改这些源文件,而不会影响其 他的程序的使用。 4.CCS5.2 如果没有包含函数的声名头文件时也能运行但是 结果会不正常,故当函数调用出现莫名其妙的问题时,要检 查声名函数的头文件是否包含。 5.CCS5.2 开发 DSP28335程序时如何设置程序堆栈的大小? CCS5.2默认情况下堆栈的大小都为0x400,在 Project-Properties-Build-C200 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下设置的大小。一般来讲不用 变动栈空间的大小和位置,如果函数中需要大的空间就申请堆空间。 堆空间可以指定为外部内存,但要注意在第一次malloc 函数调用之 前一定要初始化外部内存。否则malloc 能执行成功但是空间指向未 定。 heap 大小限制为 32k word 即 0x10000。 6. 相关参考网站 http:/processors.wiki.ti.com/index.php 7. 如何添加头文件的相对路径? 首先在 Project-Properties-Build选项下,点击 Variables 添加一个变量,然后就可以在Project-Properties-Build-C2000 Compiler-Include Options下用$ 引用变 量。表示工程路径的系统变量是PROJECT_ROOT,可以在 Project-Properties-Build-C2000 Compiler-Include Options 下直接引用。注意Project-Properties-Resource- Linked Resources 下的变量在 Project-Properties-Build-C2000 Compiler-Include Options 下无效,只有 Project-Properties-Build下 Variables选项卡中 的变量才能 用。 http:/processors.wiki.ti.com/index.php/Include_paths_and_o ptions 8. 当程序烧写到flash中运行时,设置断点为什么总是出 错? 当程序烧写到 flash中时设置的断点为硬件断点, 此断点对 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 的直线。 在代码中打断点, 运行到断点处,因为只有运行在断点处Graphs 才能识别变量地址, 才能在设定 Start Address 时使用数组名和 & 变量名的形式 。 Graphs只能跟踪全局变量,所以缓冲区要设置为全局变量。 参考网址: http:/forum.eepw.com.cn/thread/214974/1 http:/hi.baidu.com/chanceyue/item/af7ecddc744aa34eddf9bed8 http:/www.61ic.com/Article/CCS/Experience/201211/45940.htm l 10. 如果 ccs 出现莫名其妙的问题时,请删除.metadata 11.arm 和 dsp 之间进行串口通信如果dsp 先启动, arm 后启 动,通讯有异常,反之正常? 主要原因是 arm启动时会有一个导致BRKDT 错误的信号出现, 此 时如果 dsp 已经启动就会收到此错误,并停止工作,直到SW Rest 或 者 DSP重启。解决方法是当收到此错误时,SW Reset SCI 模块。 参考网址: http:/www.deyisupport.com/question_answer/f/56/t/11621.asp x

    注意事项

    本文(TMS320F28335经验若干要点.pdf)为本站会员(tbuqq)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开