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.

[参考译文] TMDSIDK437X:GPMC 初始化问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/566040/tmdsidk437x-problem-with-initialization-of-gpmc

器件型号:TMDSIDK437X
主题中讨论的其他器件:AM4377

您好!  

我使用具有 am4377和 CCS 6.1.2和 SDK 2.1.1.2的定制板

我尝试为 GPMC 模块编写一个简单的初始化代码、以便与 FPGA 块通信、但在尝试使用 GPMC.h 中的 GPMC API 中的任何函数时遇到了问题

我为 GPMC 设置了引脚多路复用配置、通过 PRCM API 启用了该模块并获取了该模块的基址-它是否应等于0x5000000?

现在,我想重置模块,设置其模式并进行时序配置,但每次使用任何 GPMC API 函数(即使是最简单的只需要基址的函数) exit()函数都是由 assert_param()启动的。 我的假设是模块的基址错误。 或者、我可能忘记了任何步骤-但是 E2E 上发布的任何解决方案都不适用于我的案例。

请问如何检查 GPMC 模块是否已启用以及如何开始配置?

谢谢、

JJ.

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

    您是否缺少零?
    从 TRM 存储器映射表:

    GPMC 0x5000_0000 0x50FF_FFFF 16MB GPMC 配置寄存器

    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Frank、
    你是对的、我在这个问题上犯了一个错误。 我应该已经写过:"它应该等于0x5000_0000吗?"
    该主题的其余部分看起来正常-即我的问题有效。
    谢谢、
    JJ.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、您是否还为此空间配置了 MMU?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我向 MMU 结构添加了第{(void *) 0x50000000、SYS_MMU_BUFFERABLE}行、\。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这意味着我现在已经没有想法了。 如果 GPMC 的时钟确实处于活动状态、您能否检查相关的 PRCM 寄存器?
    否则、我必须将其推迟到其他专家... 我还没有尝试过使用 GPMC 的 AM437x 的任何示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Frank、
    在我将选项 SYS_MMU_BUFFERABLE 更改为 SYS_MMU_可 缓存时、该模块会以某种方式工作。 这是否意味着高速缓存是承载参数的正确位置?
    我已将模块参数配置为与 FPGA 配合使用、并遇到了另一个问题。 当我选择 NAND 类型器件并通过 GPMC_NAND_DATA 寄存器发送数据时、总线上会出现相应的数据。 但是、当我选择 NOR 类型器件(适用于 SRAM 器件)并尝试以以下方式将数据写入 GPMC 外部存储器中的位置(从 AM437X 中的0x0000_0000到0x1FFF_FFFF)时:

    volatile uint8_t *P32 =(uint8_t *)(0x100000 );/*地址高于无法访问的1MB*/
    *P32 = 0xAAAA;/*写入 AAAA 数据*/

    exit()函数出现硬错误。 这是写入数据的正确方式吗? 我已为此位置配置 MMU:

    {(void *) 0x00000000、SYS_MMU_BUFFERABLE}、\

    并尝试使用不同的 GPMC 设置-是否有任何重要的事情要做?

    谢谢、
    JJ.
x 出现错误。请重试或与管理员联系。