TMS320F28377S 学习笔记1 GPIO及学习资料

参考资料

  1. 使用的DSP型号为28377s,不过最近似乎更新了 TMS320F28378S
  2. 使用的硬件开发板,居然已经停产了。C2000 Delfino MCUs F28377S LaunchPad Development Kit
  3. 芯片数据手册 TMS320F2837xS Delfino™ 微控制器 数据表 (Rev. G)
  4. 芯片技术手册 TMS320F2837xS Delfino Microcontrollers Technical Reference Manual
  5. 参考书: 符晓,朱洪顺 著TMS320F28335 DSP原理、开发及应用
  6. 其他软硬件资源可以参考我的上一篇博文, TMS320F280049C 学习笔记1 概述,所有的官方例程可以在C2000Ware中找到。
  7. GPIO输入输出各种模式(推挽、开漏、准双向端口)详解
  8. Control Law Accelerator (CLA) Hands-On Workshop
  9. 【第九讲】TMS320F28335开发板之GPIO模块
  10. TI官方课程 C2837x入门指南

Flash和RAM中的代码效率

本节内容转自 28377D中代码在RAM和FLASH中执行时,效率差多远
一般我们建议将实时性要求比较高的代码,和FLASH初始化相关的代码,比如中断程序,放在RAM上运行。

在F2837xD/37xS/07x系列芯片里,它们使用的Flash是最新的65nm工艺(相比之前的是180nm),其Flash运算速度和执行效率已经大幅提高,等待周期也可以减少,因此会非常接近RAM上的速度,根据不同的代码,你可以参考下面的相关数据(请注意,Flash wait states是根据工艺强制要求的,比如F28335运行150MHz主频时,必须至少要5个,而F2837x则只需要2个 ):
TMS320F28377S 学习笔记1 GPIO及学习资料_第1张图片

GPIO的配置

  • 使用时建议先将寄存器的值写入,再改变GPIO的方向。
  • GPyDAT反应引脚状态,可以读状态,不建议直接使用它写状态,由于时序的原因,可能干扰其他引脚
  • GPySET=1置高,GPyCLEAR=1置低,GPyTOGGLE=1翻转,写入0无效果。
  • GPIO的功能复用表可参考技术手册7.7节
  • 7.8节指出,芯片复位时GPIO处于输入模式,并禁止内部上拉。 这意味着上电瞬间DSP的引脚输出状态是高阻,也就是不确定的,在硬件设计时必须针对制定方案,添加上下拉电阻。避免不确定的状态导致IGBT等功率元件误动作。
  • 本节针内部对上拉电阻的配置提出了要求。指出在小封装的型号上必须用GPIO_EnabledUnbondedIOPullups()函数可以使能未使用GPIO的上拉电阻。

示例 gpio_setup

GPIO及其复用的配置可以参考例程 “gpio_setup”。

  1. EALLOW,EDIS是成对使用的,有些寄存器是受到保护的,不能任意写
    EALLOW相当于去掉保护,对写保护的寄存器进行操作后, EDIS 是重新把这个寄存器保护起来。
  2. 在 F2837xS_SysCtrl.c 文件中有注释提到// IF RUNNING FROM FLASH, PLEASE COPY OVER THE SECTION ".TI.ramfunc" FROM FLASH TO RAM PRIOR TO CALLING InitSysCtrl(). THIS PREVENTS THE MCU FROM THROWING AN EXCEPTION WHEN A CALL TO DELAY_US() IS MADE. 即如果从Flash运行程序,需要在执行InitSysCtrl()前将.TI.ramfunc从FLASH复制到RAM中。

一些值得注意的问题

摘自【DSP入门】一文带你跨过TI TMS320F2803x 首个学习门槛

  1. 为了加快代码在Flash中的运行速度,记得enable flash的Pipeline模式,使不使能这个模式运行速度相差了好几倍。详情可以参考例程代码文件:DSP2803x_SysCtrl.c,里面提供了如何配置的代码。
  2. 部分外设的初始化有用到了__DSP28x_usDelay函数进行延时等待,但是这个函数是放在RAMfunction区域,所以生效的前提是RAMfunction的备份代码已经copy到了RAM区。相应的copy函数为:memcpy((uint16_t *)&RamfuncsRunStart,(uint16_t *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize)。 详情可以参考flash_f28035\Example_2803xFlash.c

你可能感兴趣的:(TI,DSP学习)