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.

[参考译文] CCS/LAUNCHXL-F280049C:从闪存运行代码时、SCI RX 停止工作。

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/941249/ccs-launchxl-f280049c-when-run-code-from-flash-sci-rx-stop-working

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

我为 launchad F280049C 编写了 sci (UART)代码。

当我从 RAM 运行时、代码工作正常。 但是、当我将 ACTIVE 设置为 Flash_Lib 时、TX 仍然工作、RX 停止工作。

当从闪存运行时、调用函数 SCI_getRxFIFOStatus 始终为零。 但它在从 RAM 运行时工作正常。

感谢您的任何建议。

最棒的

Zong

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

    Zong、

    您是否尝试使用示波器并检查 RX 引脚上的传入数据是否符合预期?

    此外、请尝试将 ISR 映射到 RAM (加载到闪存并从 RAM 运行)、并查看这是否有助于解决问题。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    感谢你的帮助。

    我确实使用范围检查了传入数据。

    您能更具体地说明如何将 ISR 映射到 RAM 吗? 我不知道怎么做。 是否有任何文档?

    最棒的

    Zong

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

    Zong、

    在 C2000Ware 中基于闪存的链接器 cmd 文件中、您可以注意到有一个名为.TI.ramfunc 的段-这有一个不同的加载地址和运行地址。 您可以使用闪存作为加载地址、使用 RAM 作为运行地址。  通过将 ISR 映射到此段、您可以将 ISR 加载到闪存中、但从 RAM 执行 ISR -链接器使用运行 RAM 地址执行。  在调用/使用应用程序中的函数之前,用户应用程序应调用 memcpy()以将内容从闪存复制到 RAM。  这样、您可以在执行 ISR 时消除闪存等待状态损失-这允许 CPU 有更多的带宽来执行所有 ISR (在其他 ISR 占用 CPU 带宽的情况下、建议这样做)。    

    请查看 C2000Ware 示例。  示例:C000Ware_3_02_00_00\driverlib\f28004x\examples\flashapi_ex1_program_autoecc.c

    在此文件中、您可以看到 Example_CallFlashAPI (void)映射到.TI.ramfunc 段、如下所示:

    #ifdef __cplusplus
    #pragma CODE_SECTION (".TI.ramfunc");
    其他
    #pragma CODE_SECTION (example_CallFlashAPI、".TI.ramfunc");
    #endif
    空示例_CallFlashAPI (空)

    在链接器 cmd 文件中、您可以看到 .TI.ramfunc 段具有不同的加载(闪存)和运行(RAM)地址。   



    .TI.ramfunc
    {-l F021_API_F28004x_FPU32.lib}

    LOAD = FLASH_BANK0_SEC1、
    运行= RAMLS03、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4)  

    在示例 main()中,您可以看到 Device_init()调用 memcpy(),以将.TI.ramfunc 内容从闪存复制到 RAM。   

    //
    //主函
    //
    void main (void)

    //
    //初始化设备时钟和外设
    //将闪存初始化代码从闪存复制到 RAM
    //将闪存 API 从闪存复制到 RAM
    //配置闪存等待状态、回退功率模式、性能特性和 ECC
    //
    device_init();

    您还可以访问  https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674

    谢谢、此致、

    Vamsi