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.

[参考译文] 对 TMS320F28379D 进行编程

Guru**** 2039500 points
Other Parts Discussed in Thread: TMS320F28379D, LAUNCHXL-F28379D, CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/565027/programming-the-tms320f28379d

主题中讨论的其他器件:TMS320F28379DLAUNCHXL-F28379DcontrolSUITE

您好!


我不熟悉 TMS320F28379D 微控制器、但对该微控制器进行编程时遇到问题。 我正在使用 LaunchPad LAUNCHXL-F28379D、按照 TI 提供的示例、我设法对 TMS320F28379D 进行编程、以输出 PWM 输出、然后使用 ADC 对其进行采样、同时使 LaunchPad 上的 LED 闪烁。 当我使用 Code Composer 在调试模式下构建和加载程序时、程序工作正常。 我的问题是、代码仅在我将 Code Composer 置于调试模式时才起作用。 如果我断开 LaunchPad 与 PC 的连接、并且重新连接控制器中的程序不会重新启动。 我必须重新打开 Code Composer、重新构建并通过调试模式加载。 我不知道这是否是引导至 RAM 而不是闪存的问题、因为此时我还不知道该控制器上的整个引导过程。

如果有任何帮助,将不胜感激。


谢谢

Dan

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

    要使项目从闪存运行、您只需执行以下操作:右键单击项目->生成配置->设置活动->选择闪存

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

    上述内容与包含以下内容的.cmd 文件有何关系? 由于在项目中、我将包含以下.cmd 文件来设置内存分配。


    存储器

    第0页:/*程序内存*/
    BEGIN_M0 :origin = 0x000000,length = 0x000002 /* M0 RAM 的一部分-用于"引导至 M0"引导加载程序模式*/
    RAMLS4 :origin = 0x00A000、length = 0x000800 /* L4 RAM、DCSM 安全、CLA 程序 RAM */
    RAMLS5 :origin = 0x00A800,length = 0x000800 /* L5 RAM、DCSM 安全、CLA 程序 RAM */
    RAMGS0123 :origin = 0x00C000、length = 0x004000 /* GS0-3 RAM、奇偶校验、DMA */
    BEGIN_FLASH :origin = 0x080000、length = 0x000002 /*闪存扇区 A 的一部分-用于"跳转至闪存"引导加载程序模式*/
    FLASH_A :origin = 0x080002、length = 0x001FFE /*闪存扇区 A 的一部分- DCSM 安全*/
    FLASH_BCDEFGHIJKLMN:origin = 0x082000,length = 0x03E000 /*闪存扇区 B、C、D、E、F、G、H、I、J、K、L、M、N 组合- DCSM 安全*
    复位 (R):origin = 0x3FFFC0,length = 0x000002 /*引导 ROM 的一部分*/

    第1页:/*数据存储器*/
    BOOT_RSVD :origin = 0x000002,length = 0x00004E // M0 RAM 的一部分,引导 ROM 将使用此堆栈*/
    RAMM0 :origin = 0x000050、length = 0x0003B0 /* M0 RAM */
    RAMM1 :origin = 0x000400、length = 0x000400 /* M1 RAM */
    CLA1_MSGRAMLOW :origin = 0x001480、length = 0x000080 /* CLA 至 CPU 消息 RAM、DCSM 安全*/
    CLA1_MSGRAMHIGH :origin = 0x001500,length = 0x000080 /* CPU 到 CLA 消息 RAM、DCSM 安全*/
    RAMLS0 :origin = 0x008000、length = 0x000800 /* L0 RAM、DCSM 安全、CLA 数据 RAM */
    RAMLS1 :origin = 0x008800,length = 0x000800 /* L1 RAM、DCSM 安全、CLA 数据 RAM */
    RAMLS2 :origin = 0x009000、length = 0x000800 /* L2 RAM、DCSM 安全、CLA 数据 RAM */
    RAMLS3 :origin = 0x009800,length = 0x000800 /* L3 RAM、DCSM 安全、CLA 数据 RAM */
    RAMD0 :origin = 0x00B000、length = 0x000800 /* D0 RAM、DCSM 安全、ECC */
    RAMD1 :origin = 0x00B800,length = 0x000800 /* D1 RAM、DCSM 安全、ECC */
    RAMGS4. :origin = 0x010000,length = 0x001000 /* GS4 RAM、奇偶校验、DMA */
    RAMGS5. :origin = 0x011000,length = 0x001000 /* GS5 RAM、奇偶校验、DMA */
    RAMGS6 :origin = 0x012000,length = 0x001000 /* GS6 RAM、奇偶校验、DMA */
    RAMGS7 :origin = 0x013000、length = 0x001000 /* GS7 RAM、奇偶校验、DMA */
    RAMGS89ABCDEF :origin = 0x014000,length = 0x008000 /* GS8-15 RAM、奇偶校验、DMA */



    部分

    /***编译器必需的部分***/

    /*程序存储器(第0页)段*/
    .text :> RAMGS0123, PAGE = 0
    .cinit :> RAMGS0123, PAGE = 0
    .const :> RAMGS0123, PAGE = 0
    .econst :> RAMGS0123, PAGE = 0
    .pinit :> RAMGS0123, PAGE = 0
    复位 :>重置, PAGE = 0、TYPE = DSECT /*不使用.reset 段*/
    切换 :> RAMGS0123, PAGE = 0

    /*数据存储器(第1页)部分*/
    .bss :> RAMM0, PAGE = 1.
    ebss :> RAMM0, PAGE = 1.
    .cio :> RAMM0, PAGE = 1.
    堆栈 :> RAMM1, PAGE = 1.
    sysmem :> RAMM1, PAGE = 1.
    等斯梅姆 :> RAMM1, PAGE = 1.

    /***用户定义的段***/
    codestart :> Begin_M0、 PAGE = 0 /*由文件 CodeStartBranch.asm 使用*/


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

    [引用 user="Daniel Zammit">上述内容与包含以下内容的.cmd 文件有何关系? 由于在项目中、我将包含以下.cmd 文件来设置内存分配。
    [/报价]

    我曾提到"2837xD_FLASH_lnk_CPU1.cmd"文件。 如果您选中下面的复选框、.cinit 和其他段已分配给闪存而不是 RAM。

    SECTIONS
    {
    //*分配程序区域:*/
    .cinit :> FLASHB PAGE = 0、ALIGN (4)
    .pinit :> FLASHB、 PAGE = 0、ALIGN (4)
    .text :>> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0、ALIGN (4)
    codestart :>开始 PAGE = 0、align (4)
    ramfuncs :LOAD = FLASHD,
    RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4) 

    此外、请阅读此 wiki 文章、了解链接:

    此致、

    Gautam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的帮助、Gautam。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不用客气!

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

    我已经尝试使用以下选项来构建项目:右键点击 Project -> Build Configurations -> Set Active -> Select Flash
    但我没有选择闪存。 我有两个选项:Debug 和 Release。 我尝试了这两种方法、但同样的问题仍然存在。

    然后、我尝试更改.cmd 文件以将代码和变量放置在闪存中。 当我按下 Debug 时、项目构建和编程成功、但是编码不能自行启动的问题仍然存在、尽管我有继续 while 循环。

    这是否仍然是引导问题?

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

    Dan、

    您的引导模式引脚是如何配置的?  它们是否配置为引导至闪存模式?

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    由于我使用仿真器连接到我的 PC、LaunchPad 上的开关都处于"1"位置。

    谢谢

    Dan

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

    我建议您导入其中一个 controlSUITE 示例并将其设置为闪存配置(如 Gautam 所述)、并查看其是否在具有引导至闪存配置的独立模式下工作。 这将帮助您清除由于控制套件项目应该正常工作而可能出现的任何其他问题。

    观察示例代码(也步入 InitSysCtrl 函数)以注意#ifdef _flash 语句。 检查该示例执行闪存的方式与代码执行方式不同。

    您可能还需要浏览链接器命令文件、因为它将帮助您了解哪些段映射到闪存与 RAM。 以及如何将某些段(如 ramfuncs)映射到闪存以获取加载地址、以及映射到 RAM 以获取运行地址。 您会注意到,在执行该代码之前,该示例使用 memcopy()将 ramfuncs 的代码从闪存复制到 RAM。

    此外、您还将了解如何在独立模式下使用 IPC 在 CPU1和 CPU2之间进行通信以设置 CPU2引导模式。 不确定您是否正在使用示例中的任何此代码。 如果是、请确保从 CPU2执行代码的 CPU2部分并确认 CPU1 IPC 命令。 否则、CPU1将等待它。

    您可能还需要根据需要在代码中放入一些调试挂钩、以了解代码执行的距离以及代码未响应的位置。 您可以为此使用一些 GPIO 切换。 这样、您就可以了解它是否已引导。

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

    您好!

    我已经在尝试使用一个示例。 我仅使用 CPU1。 我还尝试编辑链接器文件、以根据 Gautam 建议的链接器文件常见问题解答文档、使不同的项目从闪存和 RAM 运行。 但仍然不成功。

    我将尝试测试您的建议。 谢谢。

    Dan

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

    首先、根据 Gautam 的建议、从项目设置中选择正确的.cmd 文件。 这将使您的程序能够加载到 MCU 的闪存中、而不是 RAM 中。 但是、您可能仍然需要从 RAM 运行时间关键例程(例如:delay_US)。 您可以将"memcpy"添加到".ramfunc"以执行此操作。 如果您需要有关使用的进一步帮助、请咨询。

    其次、要使程序以独立模式运行、请检查 Launchpad 中的引导配置引脚。 请参阅 MCU 的技术参考手册、将 MCU 配置为从闪存引导。

    希望这对您有所帮助。

    此致、

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

    您的应用程序现在是否以独立模式运行?

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

    是的、谢谢 Vamsi。

    我使用过有关 F28377D 的 TI 技术讲座来确定所需的内容。

    谢谢

    Dan

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

    很高兴知道您能够使用 TI 技术讲座来解决问题。

    对于可能引用此帖子的其他人、请提供有关您对应用程序进行更改以使其独立运行的详细信息。

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

    您好、Vamsi、

    我在 processors.wiki.ti.com/.../C2000_Multi-Day_Workshop 上参加了 C2000多日技术讲座

    在 Lab10中、我们介绍了如何启动闪存以及如何对闪存进行编程。

    谢谢

    Dan

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

    感谢您更新该主题。 我现在将关闭此主题。

    此致、
    Vamsi