Assembly AVR组件外部SRAM使用

Assembly AVR组件外部SRAM使用,assembly,external,avr,atmega,atmel,Assembly,External,Avr,Atmega,Atmel,在Atmega 128上,如何启用外部SRAM,以及如何将文本复制到外部SRAM?例如,我有一些数据SomeData:.db 0x01,0x02,0x03,0x.25 in.dseg,如何将此文本复制到从地址2100h开始的外部SRAM中 提前感谢。首先您要阅读 在第19页,有一个图显示了外部内存如何映射到内存空间 外部存储器接口的说明从第25页开始 内存的行为类似于内部内存 下面的汇编代码演示如何从内部SRAM读取字节并将其复制到外部SRAM内存 .cseg copy: ldi r

在Atmega 128上,如何启用外部SRAM,以及如何将文本复制到外部SRAM?例如,我有一些数据SomeData:.db 0x01,0x02,0x03,0x.25 in.dseg,如何将此文本复制到从地址2100h开始的外部SRAM中

提前感谢。

首先您要阅读

在第19页,有一个图显示了外部内存如何映射到内存空间

外部存储器接口的说明从第25页开始

内存的行为类似于内部内存

下面的汇编代码演示如何从内部SRAM读取字节并将其复制到外部SRAM内存

.cseg
copy:
      ldi r17, 4 ; counter for how many bytes to copy
      ldi YL, low(data) ; load pointer to data into Y pointer
      ldi YH, high(data)
      ldi ZL, low(0x2100) ; load pointer to external memory into Z
      ldi ZH, high(0x2100)
copy_loop:
      ld r16, Y+ ; r16 <- [Y], Y++
      st Z+, r16 ; [Z] <- r16, Z++

      dec r17
      brne copy_loop
      <other code>

data: .byte 4
这不管用。您不能使用.db将数据写入内部SRAM,因为它是易失性的,必须使用程序代码初始化

你可以写

.cseg
<CODE>
data_const: .db 0x1,0x2,0x3,0x4

.dseg
data: .byte 4
这将在闪存中创建一个4字节的初始化数据阵列,并在内部SRAM中保留4字节的空间。现在,您可以将数据从data_const复制到代码中的数据

顺便说一下:C代码中的预初始化变量也位于flash中,在开始执行main()之前,启动代码会将其复制到SRAM中

首先,您要阅读

在第19页,有一个图显示了外部内存如何映射到内存空间

外部存储器接口的说明从第25页开始

内存的行为类似于内部内存

下面的汇编代码演示如何从内部SRAM读取字节并将其复制到外部SRAM内存

.cseg
copy:
      ldi r17, 4 ; counter for how many bytes to copy
      ldi YL, low(data) ; load pointer to data into Y pointer
      ldi YH, high(data)
      ldi ZL, low(0x2100) ; load pointer to external memory into Z
      ldi ZH, high(0x2100)
copy_loop:
      ld r16, Y+ ; r16 <- [Y], Y++
      st Z+, r16 ; [Z] <- r16, Z++

      dec r17
      brne copy_loop
      <other code>

data: .byte 4
这不管用。您不能使用.db将数据写入内部SRAM,因为它是易失性的,必须使用程序代码初始化

你可以写

.cseg
<CODE>
data_const: .db 0x1,0x2,0x3,0x4

.dseg
data: .byte 4
这将在闪存中创建一个4字节的初始化数据阵列,并在内部SRAM中保留4字节的空间。现在,您可以将数据从data_const复制到代码中的数据


顺便说一下:C代码中的预初始化变量也位于flash中,在开始执行main()之前,启动代码会将其复制到SRAM中

你确定你有AtMega128吗?因为我很确定它没有外部RAM接口(但我没有数据表——只需快速查看一下atmega1284(后续)DS)就可以在软件中实现这一点——找到要接口的SRAM的数据表,它应该包含用于读取/写入芯片的协议描述。然后在atmega上实现它。这既不容易也不高效,但却是可行的。你确定你有一台AtMega128吗?因为我很确定它没有外部RAM接口(但我没有数据表——只需快速查看一下atmega1284(后续)DS)就可以在软件中实现这一点——找到要接口的SRAM的数据表,它应该包含用于读取/写入芯片的协议描述。然后在atmega上实现它。这既不容易也不高效,但却是可行的。