TMS320F28335经验若干要点.pdf

上传人:tbuqq 文档编号:5198293 上传时间:2020-02-19 格式:PDF 页数:19 大小:178.79KB
返回 下载 相关 举报
TMS320F28335经验若干要点.pdf_第1页
第1页 / 共19页
TMS320F28335经验若干要点.pdf_第2页
第2页 / 共19页
TMS320F28335经验若干要点.pdf_第3页
第3页 / 共19页
TMS320F28335经验若干要点.pdf_第4页
第4页 / 共19页
TMS320F28335经验若干要点.pdf_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《TMS320F28335经验若干要点.pdf》由会员分享,可在线阅读,更多相关《TMS320F28335经验若干要点.pdf(19页珍藏版)》请在三一文库上搜索。

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

2、致显示的波形被消尖,所以用示波器测量时周 期不能太大。 TMS320F28335 笔记 -I2C 1. 响应和非响应的区别是什么? 关于 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已经通过上

4、拉电阻被上拉, master 可以控制(拉低或 者释放)这两条线,而 slaver只能控制 SDA线。当 master 发送数据 时,master 会适时地将 SDA和 SCL拉低或释放 ( 拉高)。确切的时序 应该是这样的:当 mater 要发送一个 start时,mater 会将 SDA拉低, 这就可以了,因为此时的SCL一定是 High。好了,一个 start就这 样发出去了。而 slaver也会发现这个 start信号的发生, slaver便 会准备好接收接下来的数据了。紧接着,master 要发送一个 Byte 的 数据了,一位一位的发出这8 个 bits 。 这时 master 会

5、先将 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为低电平期间把

6、下一个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 释放,所以 sl

7、aver才有机会去拉低这个SDA) 。 master 会在一个确定的时间后再次将SCL拉高,并在拉高的期间去 读取 SDA线的状态,如果读到低电平,则认为收到了来自slaver的 响应(ACK ),否则认为 slaver没有响应( NACK )刚才发送的那一个 Byte。 这个过程就是我们说的i2c 通讯中的第 9个时钟周期。当 master 读完这个 ACK / NACK 后,会再次将 SCL拉低,用以通知 slaver :第 9 个时钟周期已经结束,你现在可以释放SDA了。而此时 master 也 可以向 SDA 上准备下一个 Byte 的第一个 bit 。 继而重复上述过程。 。 。 。

8、 或者, master 也许想在接下来发送一个stop 过去,那么 master 会 在这个 SCL为低的时间内将 SDA拉低,而后再将 SCL拉高,在 SCL为 高的期间再将 SDA释放 ( 拉高) 。这样,一个 STOP 位就产生了。你 会发现此后的 SDA和 SCL都是高,这就是是所谓的总线空闲了! 一句话: SCL是单向的,由 master 控制。而 SDA是双向的, master 可以控制, slaver也可以控制。 2.示波器探头会对波形产生影响,导致波形延时,使用 是请注意。 TMS320F28335 学习笔记 -ADC控制器 1.ADC的工作模式有哪些? 同时采样模式和顺序采样

9、模式。 2.ADCINT 与 SEQ1INT 、SEQ2INT中断有什么区别 SEQ1INT 和 SEQ2INT 对应序列器 SEQ1 和 SEQ2的中断,ADCINT 是 为了向前兼容 F281x系列的 ADC 中断, 可以由 SEQ1 或 SEQ2 触发产生。 在 ADCINT 中断服务程序里,需要软件干预去根据对应标志位确定到 底是哪个序列产生了中断,而SEQINT1 将一些在内存中运行的代码从flash 复制到内 存中,然后程序才能正常运行。 5. 写好的代码再ram 中能正常运行但是烧写到flash中后, 函数 DSP28x_usDelay() 不能正常运行为什么? 因为在 DSP2

10、833x_usDelay.asm中有.sect “ramfuncs“,即把该 函数定义在段 “ramfuncs“ 中, 而此段需要在内存中运行,故需要使 用函数 MemCopy( 将 ramfuncs 段复制到内存中然后运行。 只算以 这样设计是因为函数DSP28x_usDelay()精准运行对运行速度有要求 故必须放在段 “ramfuncs“ 中。参考: http:/ 6. cmd中以下代码如何解释? ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsL oadStart), LOAD_END(_RamfuncsLoa dE

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

12、s 的装载地址的末地址 (LOAD_ END 为编译伪指令,请见CCS 的帮助文档); LOAD_ START(_RamfuncsRunStart) 令编译器创建了一个变量 RamfuncsRunStart,该变量指向段 ramfuncs 的运行地址的首地址 (LOAD_ START 为编译伪指令,请见CCS 的帮助文档); 从第 1和 2行可以看出,段 ramfuncs 中的函数 DSP28x_usDelay() 的装载地址和运行地址是不同的, 本程序中装载在Flash 的块 FLASHD 中,而在 SARAM L0 中运行,这只是目标,实际运行时DSP并不会自 动将 Flash 中的代码拷

13、贝到 SARAM 中, 因此需要手动添加代码来完成。 在 C函数中,为了使用变量RamfuncsLoadStart 、RamfuncsLoadEnd 和 RamfuncsRunStart,必须先声明,本工程在文件 DSP2833x_GlobalPrototypes.h中做了如下声明: extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadEnd; extern Uint16 RamfuncsRunStart; 然后就可以使用了。在 Main.c 中, 使用 MemCopy() 函数将段 ramfuncs 中的函数 DSP28x_u

14、sDelay()的代码从装载地址RamfuncsLoadStart RamfuncsLoadEnd 拷贝到 RamfuncsRunStart 开始的 SARAM 空间中。 之后在程序运行时,只要调用DSP28x_usDelay()函数,都会自动地 指向 SARAM 中相应的函数入口地址, 这一点是自动完成的。 MemCopy() 函数原型在 MemCopy.c中,DSP2833x_GlobalPrototypes.h声明。 7. 如何将一个函数放到ram 中运行 ? 参考 TI 公司头文件中自带InitFlash函数,这些函数会以 CODE_SECTION申明。如: #pragma CODE_

15、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:/ 2. 中断标志有几级?作

16、用是什么? 中断标志主要有三级CPU (有 16 个标志位)、 PIE(有 12 组每 组有 12 个标志位)和外设(有的外设没有)。标志位在中断发生后 锁存中断状态,即表示中断发生。在CPU 响应中断后,会自动清除 cpu 级别的标志位 IFR bit ,同时将 INTM bit 置位,以防止其它中 断的发生; CPU 在从 PIE 中取中断向量时 PIE 会自动清除 PIE 级别的 标志位 PIEIFRx.y 。所以在进入中断处理程序后除了外设所有中断位 都已经清除。而中断处理程序中需要清除PIEACKx和外设的中断标志 位(如果有的话)。 参考网址: http:/ x http:/ TM

17、S320F28335 笔记-SPI 模块 什么是 SPI 接口? SPI接口是高速同步串行输入输出接口。 TMS320F28335有几个 SPI 接口模块? 有一个专门的 SPI 模块, 另外两个 McBSP 也可以配置为 SPI 接 口。 TMS320F28335SPI接口由几组寄存器控制? 12组,位于控制寄存器帧0x7040h 开始的位置。所有的寄存器 都为 16bit 寄存器 FIFO 有几级? 16级 SPI FIFO 模式下如何对传输和接收FIFO 进行操作? 直接对 SPITXBUF 进行赋值以传输数据例如: SpiaRegs.SPITXBUF=sdatai 。此操作可理解为:首

18、先使TXFIFO头 指针加 1,然后把值写入TXFIFO头指针指向的位置。 如果当前没有一个激活的传输过程时,对SPITXBUF 的写入会激活一 个传输过程。 直接读取 SPIRXBUF 的值以接收数据例如: rdatai=SpiaRegs.SPIRXBUF ,此操作可理解为:首先从RXFIFO头 指针处读取 1 个 word, 然后使 RXFIFO头指针减 1。 SPI FIFO 模式下传输和接收中断何时产生? 是在数据传输或接收结束后,再判断传输和接收FIFO队列中有 多少数据( SPIFFTX.TXFFST4-0 和 SPIFFRX.RXFFST4-0 的值)。对于 传输 FIFO如果

19、FIFO中数据小于等于 TXFFIL4-0(此寄存器指定临界 值)指定的值时会触发中断,在中断处理例程中继续传输数据。对于 接收 FIFO如果 FIFO中的值大于等于 RXFFIL4-0中指定的值时触发中 断,在中断处理例程中接收数据。故FIFO模式下中断触发条件除了 标准 SPI 模式下的数据传输接收完毕的条件外还要满足FIFO中的数 据小于等于 TXFFIL或大于等于 RXFFIL设定值的条件,在两个条件都 满足的情况下才会触发中断。另外一般情况下,FIFO模式 SPI 初始 化完后会立即产生以个传输中断,因为此时TXFIFO没有数据满足产 生中断的条件。 如果只接收数据不发送数据如何激活

20、接收过程? 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

21、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文件中的

22、字段包含的路径下。 2.CCS中 GEL文件的作用是什么? ccs的 gel 语言是一种交互式的命令,它是解释执行的,即不能 被编译成 可执行文件。 它的作用在于扩展了ccsstudio的功能,可以 用 gel 来调用一些菜单命令, 对 DSP的存储器进行配置等等。 但是作 者建议对于使用仿真器和DSP功能板的仿真环境用户来说,这种GEL 语言文件是没必要加入到配置中的。gel 语言的重要性在于针对计算 机模拟环境的用户,使用 gel 可以为其准备一个虚拟的DSP 仿真环境, 但也不是非用不可的。 3. 引用例子中的源文件时要注意什么? 使用 CCS5.2导入例子中的源文件时,最好不要选择连接

23、方式, 而使用复制的方式, 这样必要时可以更改这些源文件,而不会影响其 他的程序的使用。 4.CCS5.2 如果没有包含函数的声名头文件时也能运行但是 结果会不正常,故当函数调用出现莫名其妙的问题时,要检 查声名函数的头文件是否包含。 5.CCS5.2 开发 DSP28335程序时如何设置程序堆栈的大小? CCS5.2默认情况下堆栈的大小都为0x400,在 Project-Properties-Build-C200 Linker-Basic Options下设 置。设置完堆栈的大小后,还要在cmd文件中分配堆栈存储空间的 段的位置和大小,栈空间的段名为.stack用于函数中的临时变 量, 堆空

24、间的段名为 .sysmem用于 c 语言 malloc 函数分配内存,malloc 最大可分配内存为Project-Properties-Build -C200 Linker-Basic Options下设置的大小减 2。cmd文件中的堆 栈段的大小不能小于Project-Properties-Build-C200 Linker-Basic Options下设置的大小。一般来讲不用 变动栈空间的大小和位置,如果函数中需要大的空间就申请堆空间。 堆空间可以指定为外部内存,但要注意在第一次malloc 函数调用之 前一定要初始化外部内存。否则malloc 能执行成功但是空间指向未 定。 heap

25、大小限制为 32k word 即 0x10000。 6. 相关参考网站 http:/ 7. 如何添加头文件的相对路径? 首先在 Project-Properties-Build选项下,点击 Variables 添加一个变量,然后就可以在Project-Properties-Build-C2000 Compiler-Include Options下用$ 引用变 量。表示工程路径的系统变量是PROJECT_ROOT,可以在 Project-Properties-Build-C2000 Compiler-Include Options 下直接引用。注意Project-Properties-Resou

26、rce- Linked Resources 下的变量在 Project-Properties-Build-C2000 Compiler-Include Options 下无效,只有 Project-Properties-Build下 Variables选项卡中 的变量才能 用。 http:/ ptions 8. 当程序烧写到flash中运行时,设置断点为什么总是出 错? 当程序烧写到 flash中时设置的断点为硬件断点, 此断点对 C28x 系列 DSP只能设置两个多的话就会报错, 另外有些函数有可能会占用 硬件断点,故设置断点失败时可查一下如何清理c 函数的硬件断点。 9.CCS5 Debu

27、g 模式下 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:/ http:/ http:/ l 10. 如果 ccs 出现莫名其妙的问题时,请删除.metadata 11.arm 和 dsp 之间进行串口通信如果dsp 先启动, arm 后启 动,通讯有异常,反之正常? 主要原因是 arm启动时会有一个导致BRKDT 错误的信号出现, 此 时如果 dsp 已经启动就会收到此错误,并停止工作,直到SW Rest 或 者 DSP重启。解决方法是当收到此错误时,SW Reset SCI 模块。 参考网址: http:/ x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


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