连接 6116 到 ATMega128

问题描述 投票:0回答:2

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

所以当我运行这段代码时,我希望在 6116 的 $0000 处看到值 1。然而,这就是我所看到的:

值 1 出现在 6116 的 $0100 处。 我在这里错过了什么,出了什么问题? 我对此非常陌生,如果我屠杀了一些东西,我很抱歉。

编辑:这是我双击 MCU 时得到的设置

assembly avr atmega proteus
2个回答
1
投票

我想你在“ATmega103兼容模式”下运行芯片,这是由

M103C
熔丝位选择的。这是保险丝的默认值(参见 ATmega128 数据表 第 287 页)。

在此兼容模式下,正在使用“内存配置 B”(来自数据表第 32 页):

内存配置B指ATmega103兼容模式,配置A指非兼容模式

因此,内存地址0x1100指的是外部RAM中的地址0x100。

另外,可能是Proteus仿真并不完全支持所有的外部存储器模式。


0
投票

我很确定如果您写入地址 0x1100,您将在 6116 中获得两种配置的位置 0x100。您应该从 6k 边界开始(0x1800 = 0b1100000000000 => 0b**00000000000)以确保您在外部存储器中从 0x0000 开始。

对于 2kB 内存,您必须指望地址“屏蔽”=您没有可用的地址行:

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

© www.soinside.com 2019 - 2024. All rights reserved.