This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28333:同一项目中的 F28333和 F28335闪存 API 库?

Guru**** 2342960 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/589505/tms320f28333-f28333-and-f28335-flash-api-libraries-in-the-same-project

器件型号:TMS320F28333

用户希望创建一个将在 F28335和 F28333上运行的单个项目。  他们希望软件在运行时使用 PARTID 寄存器来确定所需的设置。  闪存 API 库存在问题。  他们希望将这两个库合并到项目中、并决定在运行时使用哪一个库。

我认为这是可能的、但需要确认。

他们需要做的第一件事是调用特定的顶层器件函数、而不是#define common name 函数。  例如,调用 Flash28333_Eras()而不是 Flash_Eras()。  顶级 函数都列在 Flash2833x_API_Library.h 文件中。  例如:

#IF FLASH_F28333
#define Flash_Erase (a、b)         Flash28333_Erase (a、b)
#define Flash_Program (a、b、c、d)   Flash28333_Program (a、b、c、d)
#define Flash_Verify (a、b、c、d)    Flash28333_Verify (a、b、c、d)
#define Flash_ToggleTest (a、b)    Flash28333_ToggleTest (a、b)
#define Flash_DepRecover ()       Flash28333_DepRecover ()
#define Flash_API 版本十六进制()    Flash28333_API 版本十六进制()
#define Flash_API 版本()       Flash28333_API 版本()
#endif

其次、顶级函数调用 F28333和 F28335库中同名的子函数。  当你构建项目时、这些显示在.map 文件中。  例如:

_Fl28x_ClearLoop
_Fl28x_ClosePulse
_Fl28x_CompactPulse
_Fl28x_CompactVerify
_Fl28x_delay
_Fl28x_DisableInt
_Fl28x_DisableNMI
_Fl28x_EnterCmdMode
_Fl28x_ErasePulse
_Fl28x_EraseVerify
_Fl28x_FlashRegSleep
_Fl28x_LeaveCmd 模式
_Fl28x_MaskAll
_Fl28x_OpenPulse
_Fl28x_ProgPulse
_Fl28x_ProgVerify
_Fl28x_RestoreInt
_Fl28x_WatchDogDisable

这些库将从项目中首先链接的库(F28335或 F28333)中被拉入。

问题:这两个库中的函数是否相同?  我认为是这样。

最后、CPU_RATE 是#defined Flash2833x_API_Config.h  我假设这必须 作为一个参数传递到上述一个子函数(例如_FL28x_delay)、因为 API 库已经编译、用户从未接触过除#define 之外的 CPU_RATE。  用户将无法在运行时更改 CPU_RATE。  为了解决这一问题、他们需要在闪存编程期间使两个器件以相同的速度运行。  例如、假设 F28335的 CLKIN 为30MHz、而 F28333的 CLKIN 为20MHz、它们在闪存操作期间都可以以60MHz 的频率运行。  因此、CPU_RATE 将设置为60MHz。

------

添加了4/18/17 1031AM: 更正了!  看起来 CPU_RATE 用于计算 SCALE_FACTOR、然后由用户将换算系数分配给变量:

Flash_CPUScaleFactor = scale_factor;//初始化闪存 API 时钟速率缩放

因此、用户可以进行修改、使其具有 scale_facter_28335和 scale_facter_28333、并在运行时分配正确的一个。  无需以相同的速度运行两个器件。

------

有人能确认我的想法吗?

此致、

David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    David、
    我们将对此进行研究。

    此致、
    Cody
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cody、

    我运行了一些测试、相信我所描述的内容能够正常工作、前提是两个库中的低级 API 函数相同(我认为它们是相同的)。  具体而言:

    _Fl28x_ClearLoop
    _Fl28x_ClosePulse
    _Fl28x_CompactPulse
    _Fl28x_CompactVerify
    _Fl28x_delay
    _Fl28x_DisableInt
    _Fl28x_DisableNMI
    _Fl28x_EnterCmdMode
    _Fl28x_ErasePulse
    _Fl28x_EraseVerify
    _Fl28x_FlashRegSleep
    _Fl28x_LeaveCmd 模式
    _Fl28x_MaskAll
    _Fl28x_OpenPulse
    _Fl28x_ProgPulse
    _Fl28x_ProgVerify
    _Fl28x_RestoreInt
    _Fl28x_WatchDogDisable

    我不确定上面的列表是否详尽无遗。  我只是从我的测试用例的.map 文件中提取了这个。  我能够使用 F28333 API 库中的低级函数对 F28335进行编程、方法是将两个库都包含在编译中并指定一个链接顺序来强制从 F28333库中提取函数。  低级函数上方的函数具有可调用的特定于器件的名称、因此它们会从正确的库中拉出。   它毫无问题地工作。

    因此、只需确认 F2833x 系列中的器件非特定功能的低级功能。

    此致、

    David

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    David、

    是的、这些低级函数不是特定于器件的。


    此致、

    曼诺伊