【问题标题】:ARM LPC3250 execute instructions from external RAMARM LPC3250 从外部 RAM 执行指令
【发布时间】:2016-08-02 06:52:15
【问题描述】:

我无法让 ARM 执行存储在外部 RAM 中的指令。

我写了一个基于LPC3250架构的可以闪烁led的小程序。如果我通过 IAR 在线调试将程序下载到 LPC3250 的内部 RAM,则程序可以正常运行。但如果我把它放在外部 RAM 中,它就无法运行。

外部RAM是SPARTAN-6(Xilinx FPGA)内置的一块SRAM,DATA宽度为32位,存储器深度为4096,即地址宽度为12位。此 RAM 可以通过 COE 文件进行初始化。

于是我通过IAR得到Program的BIN文件,然后将BIN文件转换成COE文件,用于初始化SRAM。 但是每次处理器只执行SRAM开头的三个E59FF018(LDR PC,(PC,#0X18))指令,不能跳转到main()。

我不知道为什么。 根据LPC3250的要求,在生成COE文件之前,我通过UltraEditor在BIN文件的开头添加了4个字节(0x13579BD2)。 LPC3250的UM表示它将开始执行外部地址0xE0000004处的代码如果 0xE0000000 中的值为 0x13579BD2,则为 ram。从COE文件我可以看到0x13579BD2后面有5条相同的指令(E59FF018)。

请告诉我我哪里错了,我需要做什么才能把它改正。

【问题讨论】:

  • 你有一个 LPC3250 和一个连接到外部接口的 fpga? SDRAM 会在哪里?为了从外部 ram 执行,它必须无法在其他地方找到代码,你有没有探测到它实际上是在尝试从外部接口读取?
  • 这是根据 LPC3250 用户手册。
  • 是的,我可以看到处理器试图从外部 SRAM 读取。外部 SRAM 是使用 IP 核(块存储器)创建的。而且我不使用SDRAM。而且没有SPI设备。我确信处理器访问了外部 SRAM 中的前四个 32 位字。
  • 现在,我想这可能是因为如果我想从外部 RAM 执行代码,我没有为 IAR 链接器做正确的配置。其实我不知道如何配置链接器。有什么建议吗?
  • 我使用gnu工具而不是IAR,不知道如何控制IAR链接器。

标签: arm fpga lpc


【解决方案1】:

好吧,我几乎忘记了我在 3 年前问过这个问题。现在,我找到了原因。这是关于从 ARM 输出的地址信号。我误解了来自 ARM 的地址信号是字节寻址,实际上是双字寻址。所以我不应该在FPGA中处理时忽略地址信号的低两位,它已经被ARM忽略了。

总之,我的问题是寻址问题。

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2014-04-05
    相关资源
    最近更新 更多