assembly 将6116连接到ATMega128

ax6ht2ek  于 2023-05-13  发布在  其他
关注(0)|答案(2)|浏览(108)

我一直在尝试将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

时获得的设置

bakd9h0s

bakd9h0s1#

我很确定,如果你写地址0x 1100,你会在6116中得到两种配置的位置0x 100。你应该从6 k边界(0x 1800 = 0 b1100000000000 => 0 b**0000000000)开始,以确保你在外部存储器中从0x 0000开始。

对于2kB内存,你必须依靠地址“屏蔽”=你没有可用的地址线:

当然,在103兼容模式下(内存配置B),您可以从4k边界开始,而不是6 k

0wi1tuuw

0wi1tuuw2#

我认为你运行的芯片在“ATmega103兼容模式”,这是由M103C熔丝位选择。这是保险丝的默认值(参见ATmega128 datasheet第287页)。
在此兼容模式下,使用“内存配置B”(数据表第32页):
内存配置B为ATmega103兼容模式,配置A为非兼容模式。

因此,存储器地址0x1100指的是外部RAM中的地址0x100。
此外,它可能是Proteus模拟只是不完全支持所有的外部存储器模式。

相关问题