Assembly AVR组件外部SRAM使用
在Atmega 128上,如何启用外部SRAM,以及如何将文本复制到外部SRAM?例如,我有一些数据SomeData:.db 0x01,0x02,0x03,0x.25 in.dseg,如何将此文本复制到从地址2100h开始的外部SRAM中 提前感谢。首先您要阅读 在第19页,有一个图显示了外部内存如何映射到内存空间 外部存储器接口的说明从第25页开始 内存的行为类似于内部内存 下面的汇编代码演示如何从内部SRAM读取字节并将其复制到外部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
.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上实现它。这既不容易也不高效,但却是可行的。