我在使ARM执行指令存储在外部RAM方面遇到了麻烦。
我编写了一个基于LPC3250架构的可以闪烁的小程序。如果我通过IAR在线调试下载到LPC3250的内部内存中,程序就会正常运行。但是如果我把它放在外部RAM中,它就不能运行。
外部RAM是在SPARTAN-6(Xilinx )中构建的一块存储器,数据宽度为32位,内存深度为4096,平均地址宽度为12位。可以通过COE文件初始化此RAM。
因此,我通过IAR获得程序的BIN文件,然后将BIN文件转换为COE文件,这将用于初始化SRAM。,但每次处理器只执行三个E59FF018(LDR,(PC,0x18)指令在SRAM的开头,不能跳转到main().。
我搞不懂为什么。作为LPC3250的要求,在生成COE文件之前,我通过UltraEditor将4个字节( 0x13579BD2 )添加到BIN文件的开头。LPC3250的UM表示,如果0xE0000000中的值为0x13579BD2,它将开始在外部ram的地址0xE00004执行代码。从COE文件中,我可以看到0x13579BD2后面有5个相同的指令(E59FF018)。
请告诉我哪里错了,我需要做些什么才能纠正错误。
发布于 2019-12-26 01:44:52
好吧,我几乎忘了三年前我问过这个问题。现在,我已经找到了原因。是关于从手臂输出的地址信号。我误解了来自ARM的地址信号是Byte寻址,实际上是双字寻址。因此,在FPGA中处理地址信号时,不应该忽略低二位的地址信号,它已经被ARM拒绝了。
总之,我的问题是一个解决问题。
https://stackoverflow.com/questions/38713573
复制相似问题