ARM LPC3250执行来自外部RAM的指令



我在让ARM执行存储在外部RAM中的指令时遇到了麻烦。

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

外部RAM是内置在SPARTAN-6(Xilinx FPGA)中的SRAM块,DATA宽度为32位,内存深度为4096,意味着地址宽度为12位。这个RAM可以通过一个COE文件进行初始化。

因此,我通过IAR获得程序的BIN文件,然后将该BIN文件转换为COE文件,该文件将用于初始化SRAM但每次处理器都只是执行SRAM开头的三条E59FF018(LDR PC,(PC,#0X18))指令,无法跳转到main()

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

请告诉我哪里错了,我需要做些什么来纠正。

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

总之,我的问题是一个解决问题。

最新更新