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上實現它。這不容易,也不是有效的,但是可行的。 –