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:TMDXRM57LHDK 的 Example_EMIF_SDRAM.c 说明

Guru**** 2454530 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/637727/ccs-example_emif_sdram-c-description-for-tmdxrm57lhdk

工具/软件:Code Composer Studio

您好!

SDRAM 的访问发生在哪里(使用哪个功能等)? 我只能看到 LED 闪烁的功能。 这是 SDRAM 的唯一示例吗?

谢谢你。 BR

Marcel

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

    闪烁功能出现在 SDRAM 中。 当函数被调用时、它从 SDRAM 中执行。

    该示例中的以下代码会写入 SDRAM。 它基本上将指令从闪存复制到 SDRAM。

    for (i=0;<size;i++))

    (((char *)&BlinkyStartAddr)[i]=((char *)&BlinkyLoadStart)[i];


    随后、它从 SDRAM 调用闪烁功能。

    这个示例基本上显示了如何设置 EMIF、如何写入 SDRAM 位置以及如何从该位置执行一段代码。

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

    您好、Veena、

    感谢您的解释。 但我在闪烁函数和以下函数之间看不到引用:

    for (i=0;<size;i++))

    (((char *)&BlinkyStartAddr)[i]=((char *)&BlinkyLoadStart)[i];

    它是否与此相关:

    blinky_section:run = SDRAM,load = FLASH0 | FLASH1
                    load_start (BlinkyLoadStart)、load_end (BlinkyLoadEnd)、load_size (BlinkySize)、
                    run_start (BlinkyStartAddr)、run_end (BlinkyEndAddr)

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

    链接器命令中的以下行意味着.blinkysection 中存在的代码(这是存在的闪烁函数)被加载到闪存中、但将从 SDRAM 运行。
    LOAD_START 将为您提供闪存中函数的起始地址、而 RUN_START 将为您提供运行存储器中函数的起始地址、即 SDRAM。 load_size 提供段的大小

    blinky_section:run = SDRAM,load = FLASH0 | FLASH1
    load_start (BlinkyLoadStart)、load_end (BlinkyLoadEnd)、load_size (BlinkySize)、
    run_start (BlinkyStartAddr)、run_end (BlinkyEndAddr)

    将映像加载到器件中后、blinky 函数将仅加载到闪存中(在 addr = BlinkyLoadStart 处)。 它不会自动加载到 SDRAM 上。 应在 addr = BlinkyStartAddr 处将其手动复制到 SDRAM 中。 这由以下代码完成
    for (i=0;<size;i++))

    (((char *)&BlinkyStartAddr)[i]=((char *)&BlinkyLoadStart)[i];


    之后、对闪烁功能的任何调用都将从 SDRAM 运行、而不是通过闪存运行。


    这可能不是真正的用例方案。 您可以使用类似的方法从 TCMRAM 或 L2 RAM 运行代码。 此示例仅提供一些示例代码、说明如何修改链接器命令文件以在闪存外部运行代码、如何使用 DATA_SECTION pragma 以及 SDRAM 的使用。

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

    您好!

    好的、现在我明白了。 谢谢你。 我尝试这个示例是因为我想使用接口来实现读/写速度、这是我找到的 SDRAM 的唯一示例。 您知道 SDRAM 的读写例程的示例吗? 或者、您是否知道这方面的手册。  感谢 Veena 的耐心。

    BR

    Marcel

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

    马塞尔

    一旦 SDRAM 被初始化、您就可以像任何其它 RAM 一样访问 SDRAM。

    要读取或写入地址、您可以使用以下语句:

    * ptr = 1或 uint32_t a =* ptr

    PTR 是在 EMIF 中定义的宏、用于指示 SDRAM 地址的起始位置。

    更推荐的方法是在 SDRAM 位置定义变量或数组(使用链接器命令文件和 DATA_SECTION pragma)。 以下示例代码:

    #pragma DATA_SECTION (SDRAM_BUF、".SDRAM_SECTION ")
    uint32_t SDRAM_buf[10];

     添加段下的链接器命令文件中

    .SDRAM_SECTION:{}> SDRAM

    谢谢、此致、

    Veena