嵌入式第三課 儲存管理和SDNAND

2021-10-01 08:12:13 字數 3262 閱讀 6446

儲存管理器的作用是,cpu根據儲存管理器內的配置資訊,決定如何訪問外部裝置。負責包括片選訊號、bank選擇訊號、列位址、行位址等內容

對jz2440,使用sdram需要配置儲存管理器,操作方式還是改寫三個暫存器:bwscon,bankcon,banksize。

程式描述:將上節課的led閃爍程式放入sdram執行
head.s:

@***

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

**@ file:head.s

@ 功能:設定sdram,將程式複製到sdram,然後跳到sdram繼續執行@**

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

***.equ mem_ctl_base,

0x48000000

.equ sdram_base,

0x30000000

.text

.global _start

_start:

bl disable_watch_dog @ 關閉watchdog,否則cpu會不斷重啟

bl memsetup @ 設定儲存控制器

bl copy_steppingstone_to_sdram @ 複製**到sdram中

ldr pc,

=on_sdram @ 跳到sdram中繼續執行,通過檢視反編譯檔案理解

on_sdram:

ldr sp,

=0x34000000 @ 設定堆疊

bl main

halt_loop:

b halt_loop

disable_watch_dog:

@ 往watchdog暫存器寫0即可

mov r1, #0x53000000

mov r2, #0x0

str r2,

[r1]

mov pc, lr @ 返回

copy_steppingstone_to_sdram:

@ 將steppingstone的4k資料全部複製到sdram中去

@ steppingstone起始位址為0x00000000,sdram中起始位址為0x30000000

mov r1, #0

ldr r2,

=sdram_base

mov r3, #4

*1024

1:

ldr r4,

[r1]

,#4 @ 從steppingstone讀取4位元組的資料,並讓源位址加4

str r4,

[r2]

,#4 @ 將此4位元組的資料複製到sdram中,並讓目地位址加4

bne 1b @ 若沒有複製完,繼續

mov pc, lr @ 返回

memsetup:

@ 設定儲存控制器以便使用sdram等外設

mov r1, #mem_ctl_base @ 儲存控制器的13個暫存器的開始位址

adrl r2, mem_cfg_val @ 這13個值的起始儲存位址

add r3, r1, #52 @ 13*4

=541:

ldr r4,

[r2]

, #4 @ 讀取設定值,並讓r2加4

str r4,

[r1]

, #4 @ 將此值寫入暫存器,並讓r1加4

cmp r1, r3 @ 判斷是否設定完所有13個暫存器

bne 1b @ 若沒有寫成,繼續

mov pc, lr @ 返回

.align 4

mem_cfg_val:

@ 儲存控制器13個暫存器的設定值

.long 0x22011110 @ bwscon

.long 0x00000700 @ bankcon0

.long 0x00000700 @ bankcon1

.long 0x00000700 @ bankcon2

.long 0x00000700 @ bankcon3

.long 0x00000700 @ bankcon4

.long 0x00000700 @ bankcon5

.long 0x00018005 @ bankcon6

.long 0x00018005 @ bankcon7

.long 0x008c07a3 @ refresh

.long 0x000000b1 @ banksize

.long 0x00000030 @ mrsrb6

.long 0x00000030 @ mrsrb7

c程式和上節課一樣。

程式執行過程是從0位址(sram內)開始,將nand的4k內容拷貝進sram並執行,關閉看門狗並初始化管理儲存器,接著將**拷入sdram,繼續執行。一般情況下,程式大於4k時,此時應該從nand將程式拷入sdram。

執行結果是led閃爍速度明顯慢於上節課的例子,這是因為sdram的速度慢於sram。

嵌入式C學習第三課

記憶體操作 記憶體分配 資料放 棧空間 區域性變數 函式形參 自動變數 呼叫後釋放 堆空間 malloc realloc calloc分配空間 資料段 bss 儲存未初始化的全域性變數 rodata 常量 data 靜態資料區 全域性變數 static修飾的區域性變數 記憶體分配方式 1 從全域性資...

第三課 矩陣和線性代數

svd 奇異值分解 amxn umxm mxn vnxn 奇異值分解 singular value decompositionm,簡稱svd 是在機器學習領域應用較為廣泛的演算法之一,也是學習機器學習演算法繞不開的基石之一。奇異值分解 svd 通俗一點講就是將乙個線性變換分解為兩個線性變換,乙個線性...

第三課 疊加法和戴維南法

1.疊加法和戴維南法 只適合線性電路 2.線性電路解的標準形式 電導矩陣 乘以 未知電壓的列向量 得到 電壓源的線性組合。因此任意未知電壓等於 a1v1 a2v2 b1i1 b2i3 3.線性的性質 a.齊次性 在所有輸入上乘以相同比例,則輸出也乘以同樣比例 b.可疊加性 各個輸入疊加起來,得到各自...