日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

存储管理实验linux,07-存储管理器实验

發(fā)布時間:2025/3/11 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 存储管理实验linux,07-存储管理器实验 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

S3C2440的存儲控制器提供了訪問外設(shè)所需要的信號,它有如下特性:

支持大/小端字節(jié)(通過軟件選擇);

每個BANK的地址空間為128MB,總共1GB(8個BANK);

可編程控制的總線寬度(8/16/32bit),BANK0只有兩種位寬(16/32bit);

總共8個BANK:BANK0-BANK5可以支持外接ROM、SRAM等;BANK6-BANK7除了支持ROM、SRAM外,還支持SDRAM等;

BANK0-BANK6七個BANK的起始地址固定;

BANK7的起始地址可編程選擇;

每個BANK的訪問周期均可編程控制;

通過外部的wait信號延長總線的訪問周期;

在外接SDRAM時,支持自刷新和省電模式模式。

S3C2440對外引出的27根地址線ADDR0-ADDR26的訪問范圍只有128MB,而八個片選信號nGCS0-nGCS7對應(yīng)于BANK0-BANK7,當(dāng)訪問BANKx的地址空間時,nGCSx引腳輸出低電平用來選中外接的設(shè)備。每個nGCSx對應(yīng)128MB地址空間,8個nGCSx信號總共對應(yīng)了1GB。

在TQ2440開發(fā)板中BANK6連接SDRAM,CPU對其提供了一組用于SDRAM的信號:

SDRAM時鐘有效信號LSCKE;

SDRAM時鐘信號LSCLK0/LSCLK1;

數(shù)據(jù)掩碼信號LnWBE0/LnWBE1/LnWBE2/LnWBE3;

SDRAM行地址選通脈沖信號LnSRAS;

SDRAM列地址選通脈沖信號LnSCAS;

寫允許信號LnWE

????

1、SDRAM介紹

SDRAM的內(nèi)部是一個存儲陣列,如同一個二維表格,將數(shù)據(jù)填進去。其檢索原理和表格相同,先指定一個行地址,再指定一個列地址就可以準(zhǔn)確找到所需要的單元格。這個單元格被稱為存儲單元,而表格則稱為邏輯BANK(L-BANK),SDRAM一般有4個L-BANK其邏輯圖為上圖所示。

訪問SDRAM可以分為如下四個步驟:

1、CPU發(fā)出的片選信號LnSCS0有效;

2、SDRAM中有4個L-BANK,需要兩根地址線來選中其中一個,從圖中可知使用ADDR24、ADDR25作為L-BANK選擇信號;

3、對選中的芯片進行統(tǒng)一行/列(存儲單元)尋址;

4、找到存儲單元后,被選中的芯片進行同一的數(shù)據(jù)傳輸。

在TQ2440開發(fā)板中使用了兩片16位的ADRAM芯片并聯(lián)組成32位的位寬,與CPU的32根數(shù)據(jù)線(DATA0-DATA31)相連。BANK6的起始地址為0x30000000,所以SDRAM的訪問地址為0x30000000-ox33ffffff,共64MB。

2、存儲控制器的寄存器使用

在S3C2440中,存儲控制器一共有13個寄存器,BANK0-BANK5只需要設(shè)置BWSCON和BANKCONx(x為0-5)兩個寄存器,BANK6/BANK7外接SDRAM時,除了WSCON和BANKCONx(x為6-7)外,還需要設(shè)置REFRESH、BANKSIZE、MRSRB6、MRSRB7等四個寄存器。下面分別說明每個寄存器。

位寬和等待控制寄存器BWSCON

BWSCON

說明

STx

啟動/禁止SDRAM的數(shù)據(jù)掩碼引腳,對于SDRAM,此位為0;對于SRAM,此位為1

WSx

是否使用存儲器的WAIT信號,通常設(shè)為0

DWx

使用兩位來設(shè)置相應(yīng)BANK的位寬,0b00對應(yīng)8位,0b01對應(yīng)16位,0b10對應(yīng)32位,0b11保留

對于BANK0,它沒有ST0和WS0、DW0([2:1]),bank0只支持兩種位寬16/32。

BANK控制寄存器BANKCONx(x為0-5),控制BANK0-BANK5外接設(shè)備的訪問時序,使用默認的0x0700即可滿足TQ2440開發(fā)板。

BANK控制寄存器BANKCONx(x為6-7),在8個BANK中,只有BANK6和BANK7可以外接SRAM或SDRAM,因此其設(shè)置方法有所不同。

BANKCONn

說明

MT [16:15]

用于設(shè)置BANK外接的是SRAM或SDRAM,00 = ROM or SRAM,11 = Sync. DRAM

Trcd [3:2]

RAS to CAS delay,推薦設(shè)置0b01

SCAN [1:0]

SDRAM的列地址位數(shù),00 = 8-bit 01 = 9-bit 10= 10-bit

刷新控制寄存器REFRESH

REFRESH

說明

REFEN [23]

0,禁止SDRAM的刷新功能,1,開啟SDRAM的刷新功能

TREFMD [22]

SDRAM的刷新模式。0 = CBR/Auto Refresh 1 = Self Refresh(一般系統(tǒng)休眠時使用)

Trp [21:20]

一般設(shè)置為0

Tsrc [19:18]

設(shè)為默認值11

Refresh Counter [10:0]

SDRAM的刷新值,Refresh period = (211-SDRAM時鐘頻率(MHX)+1)/sdram刷新周期(us)

BANKSIZE寄存器

BANKSIZE

說明

BURST_EN [7]

0,禁止ARM核突發(fā)傳輸;1,ARM核支持突發(fā)傳輸

SCKE_EN [5]

0,不使用SCKE信號令SDRAM進入省電模式;1,使用SCKE信號令SDRAM進入省電模式

SCLK_EN [4]

0,時刻發(fā)出SCLK信號;1,僅在訪問SDRAM期間發(fā)出SCLE信號

BK76MAP [2:0]

配置BANK大小

SDRAM模式設(shè)置寄存器MRSRBx(6-7)

MRSRBx

說明

CL [6:4]

SDRAM時序的時間參數(shù)設(shè)置

3、存儲控制器實驗;點亮LED燈

從NAND Flash啟動CPU時,CPU會通過內(nèi)部的硬件將NAND Flash開始的4KB數(shù)據(jù)復(fù)制到稱為Steppingstone的4KB的內(nèi)部RAM中(起始地址為0),然后跳轉(zhuǎn)到地址0開始執(zhí)行。

本實驗先使用匯編語言設(shè)置好存儲控制器,使外接的SDRAM可用,然后把程序本身從Steppingstone復(fù)制到SDRAM,最后跳轉(zhuǎn)到SDRAM中執(zhí)行。

首先在head.S文件中,完成的工作是設(shè)置SDRAM,將程序復(fù)制到SDRAM中,然后跳轉(zhuǎn)到SDRAM繼續(xù)執(zhí)行。

.equ MEM_CTL_BASE, 0x48000000

.equ SDRAM_BASE, 0x30000000

.text

.global _start

_start:

bl disable_watch_dog @ 關(guān)閉WATCHDOG,否則CPU會不斷重啟

bl memsetup @ 設(shè)置存儲控制器

bl copy_steppingstone_to_sdram @ 復(fù)制代碼到SDRAM中

ldr pc, =on_sdram @ 跳到SDRAM中繼續(xù)執(zhí)行

on_sdram:

ldr sp, =0x34000000 @ 設(shè)置堆棧

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數(shù)據(jù)全部復(fù)制到SDRAM中去

@ Steppingstone起始地址為0x00000000,SDRAM中起始地址為0x30000000

mov r1, #0

ldr r2, =SDRAM_BASE

mov r3, #4*1024

1:

ldr r4, [r1],#4 @ 從Steppingstone讀取4字節(jié)的數(shù)據(jù),并讓源地址加4

str r4, [r2],#4 @ 將此4字節(jié)的數(shù)據(jù)復(fù)制到SDRAM中,并讓目地地址加4

cmp r1, r3 @ 判斷是否完成:源地址等于Steppingstone的未地址?

bne 1b @ 若沒有復(fù)制完,繼續(xù)

mov pc, lr @ 返回

memsetup:

@ 設(shè)置存儲控制器以便使用SDRAM等外設(shè)

mov r1, #MEM_CTL_BASE @ 存儲控制器的13個寄存器的開始地址

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

add r3, r1, #52 @ 13*4 = 54

1:

ldr r4, [r2], #4 @ 讀取設(shè)置值,并讓r2加4

str r4, [r1], #4 @ 將此值寫入寄存器,并讓r1加4

cmp r1, r3 @ 判斷是否設(shè)置完所有13個寄存器

bne 1b @ 若沒有寫成,繼續(xù)

mov pc, lr @ 返回

.align 4

mem_cfg_val:

@ 存儲控制器13個寄存器的設(shè)置值

.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

在leds.c文件中,完成led循環(huán)閃爍的實驗:

#define GPBCON (*(volatile unsigned long *)0x56000010)

#define GPBDAT (*(volatile unsigned long *)0x56000014)

/*

* LED1,LED2,LED4對應(yīng)GPB5、GPB6、GPB7、GPB8

*/

#define GPB5_out (1<

#define GPB6_out (1<

#define GPB7_out (1<

#define GPB8_out (1<

void wait(volatile unsigned long dly)

{

for(; dly > 0; dly--);

}

int main(void)

{

unsigned long i = 0;

// LED1,LED2,LED3,LED4對應(yīng)的4根引腳設(shè)為輸出

GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out;

while(1){

wait(30000);

GPBDAT = (~(i<<5)); // 根據(jù)i的值,點亮LED1,2,3,4

if(++i == 16)

i = 0;

}

return 0;

}

Makefile的編寫為:

sdram.bin : head.S leds.c

arm-linux-gcc -c -o head.o head.S

arm-linux-gcc -c -o leds.o leds.c

arm-linux-ld -Ttext 0x30000000 head.o leds.o -o sdram_elf #鏈接代碼段的起始地址為0x30000000

arm-linux-objcopy -O binary -S sdram_elf sdram.bin

arm-linux-objdump -D -m arm sdram_elf > sdram.dis

clean:

rm -f sdram.dis sdram.bin sdram_elf *.o

代碼的具體流程圖為:

???

實驗結(jié)果:

相比于直接在內(nèi)部SRAM運行結(jié)果,可以發(fā)現(xiàn)在外部SDRAM運行的LED點燈程序,LED閃爍變慢 。本程序只能將內(nèi)部SRAM的4KB程序復(fù)制到外部SDRAM,當(dāng)程序大于4KB時,要復(fù)制4KB后的代碼,就需要使用NAND Flash控制器。

實驗代碼

總結(jié)

以上是生活随笔為你收集整理的存储管理实验linux,07-存储管理器实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。