0
在Atmega 128如何启用外部SRAM,以及如何将文本复制到外部SRAM?例如,我在.dseg中有一些数据SomeData:.db 0x01,0x02,0x03,.....,0x.25,如何将此文本复制到外部SRAM中,从地址2100h开始?AVR汇编外部SRAM使用
在此先感谢。
在Atmega 128如何启用外部SRAM,以及如何将文本复制到外部SRAM?例如,我在.dseg中有一些数据SomeData:.db 0x01,0x02,0x03,.....,0x.25,如何将此文本复制到外部SRAM中,从地址2100h开始?AVR汇编外部SRAM使用
在此先感谢。
首先你读manual
第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
也对ST一看,LD,STS和LDS被用于访问内存指令。
AVR的指针X,Y和Z是16位宽。
小心!
你写的东西,如:
.dseg
data: .db 0x1, 0x2
这是行不通的。您不能使用.db将数据写入内部SRAM,因为它是易失性的,必须使用程序代码进行初始化!
可以编写
.cseg
<CODE>
data_const: .db 0x1,0x2,0x3,0x4
.dseg
data: .byte 4
这将在内部SRAM在FLASH和储备创建一个四个字节初始化的数据阵列4个字节的空间。您现在可以将数据从data_const复制到代码中的数据。顺便提一下:C代码中的预初始化变量也位于闪存中,并且将在执行main()之前通过启动代码复制到SRAM中。
你确定你有AtMega128吗?因为我确信它没有外部RAM接口(但是我没有数据表,只是简要介绍了atmega1284(后续版本)DS) –
您可以使用软件来完成此任务 - 查找数据表你想要接口的SRAM,它应该包含用于读/写芯片的协议的描述。然后在atmega上实现它。这不容易,也不是有效的,但是可行的。 –