我一直在尝试将6116连接到Proteus中的ATMega128。我有以下示意图:
我可以写6116,但我不认为我访问正确的地址。我使用下面的代码来测试是否一切正常:
.include "m128def.inc"
ldi r16, 0x80
out MCUCR, r16
clr r16
sts XMCRA, r16
ldi r16, 0x03
sts XMCRB, r16
ldi r16,1
sts 0x1100, r16
here: jmp here
所以当我运行这段代码时,我希望看到值1在6116的0000美元处。然而,这就是我看到的:
值1出现在6116的$0100处。我在这里错过了什么,出了什么问题?我对这个非常陌生,如果我屠宰了什么,我很抱歉。
编辑:以下是双击MCU
时获得的设置
2条答案
按热度按时间bakd9h0s1#
我很确定,如果你写地址0x 1100,你会在6116中得到两种配置的位置0x 100。你应该从6 k边界(0x 1800 = 0 b1100000000000 => 0 b**0000000000)开始,以确保你在外部存储器中从0x 0000开始。
对于2kB内存,你必须依靠地址“屏蔽”=你没有可用的地址线:
当然,在103兼容模式下(内存配置B),您可以从4k边界开始,而不是6 k
0wi1tuuw2#
我认为你运行的芯片在“ATmega103兼容模式”,这是由
M103C
熔丝位选择。这是保险丝的默认值(参见ATmega128 datasheet第287页)。在此兼容模式下,使用“内存配置B”(数据表第32页):
内存配置B为ATmega103兼容模式,配置A为非兼容模式。
因此,存储器地址0x1100指的是外部RAM中的地址0x100。
此外,它可能是Proteus模拟只是不完全支持所有的外部存储器模式。