娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月07日(星期一)

2020年04月07日 | 存儲控制器和SDRAM 實驗

發布者:WhisperingRain 來源: eefocus關鍵字:存儲控制器  SDRAM  S3C2440 手機看文章 掃描二維碼
隨時隨地手機看文章

S3C2440 存儲控制器(memory controller)提供了訪問外部設備所需的信號,這是一種通過總線形式來訪問擴展的外設。


S3C2440  的存儲器控制器有以下的特性:


支持小字節序、大字節序(通過軟件選擇)

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

可編程控制的總線位寬(8/16/32 -bit),不過 BANK0 只能選擇兩種位寬(16/32 -bit)

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

BANK0 ~ BANK6 共7個BANK的起始地址是固定的;

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

BANK6、BANK7的地址空間大小是可編程控制的;

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

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

在外接SDRAM時,支持自刷新(self-refresh)和省電模式(power down mode)。


S3C2440 對外引出的27根地址線 ADDR0 ~ ADDR26 的訪問范圍只有 128MB,那么如果達到上面所說的1GB的訪問空間呢?CPU對外還引出了8根片選信號 nGCS0 ~ nGCS7,對應與 BANK0 ~ BANK7,當訪問 BANKx 的地址空間時,nGCSx 引腳輸出低電平用來選中外接的設備。這樣,每個 nGCSx 對應 128MB 地址空間,8個 nGCSx 信號總共就對應了 1GB 的地址空間。這8個 BANK的地址空間如圖:

如圖所示,左邊對應不使用 NAND Flash 作為啟動設備(單板上不接 NAND_BOOT 跳線)時的地址空間布局,右邊對應使用 NAND Flash啟動設備(單板上接 NAND_BOOT 跳線)時的地址空間布局。


S3C2440 作為32位的CPU,可以使用的地址范圍理論上達到 4GB。除去上述用于連接外設的 1GB 地址空間外,還有一部分是 CPU 內部寄存器的地址,剩下的地址空間沒有使用。

注意:這里說的是物理地址。


S3C2440 的寄存器地址范圍都處于 0x48000000 ~ 0x5FFFFFFF,各功能部件的寄存器大體相同。如圖:

源碼:


@*************************************************************************

@ File:head.S

@ 功能:設置SDRAM,將程序復制到SDRAM,然后跳到SDRAM繼續執行

@*************************************************************************  

 

.equ MEM_CTL_BASE, 0x48000000

.equ SDRAM_BASE, 0x30000000

 

.text

.global _start

_start:

bl disable_watch_dog @ 關閉看門狗

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

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

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 = 52

1:

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 個寄存器的設置值

@ 存儲控制器共有 13 個寄存器, 

@ BANK0 ~ BANK5 只需要設置 BWSCON 和 BANKCONx(x為0~5)兩個寄存器: 

@ BANK6、BANK7 外接SDRAM時,除 BWSCON 和 BANKCONx(x為6~7)外,還要設置 

@ REFRESH、BANKSIZE、MRSRB6、MRSRB7 等4個寄存器。

@ 位寬和等待控制寄存器 BWSCON (BUS WIDTH & WAIT CONTROL REGISTER)

@ BWSCON 中每4位控制一個 BANK,最高4位對應 BANK7、接下來4位對應 BANK6,依此類推

@ STx:啟動/禁止 SDRAM 的數據掩碼引腳,對于 SDRAM,此位為0;對于 SRAM,此位為 1

@ WSx:是否使用存儲器的 WAIT 信號,通常設為 0

@ DWx:使用兩位來設置相應 BANK 的位寬, 0b00 對應8位, 0b01 對應16位,0b10 對應32位,0b11表示保留

@ 比較特殊的是 BANK0,它沒有 ST0 和 WS0,DW0([2:1])只讀---由硬件跳線決定:

@ 0b01 對應16位,0b10 對應32位,BANK0 只支持16、32兩種寬度

@ 對于本開發板(JZ2440),可以確定 BWSCON 寄存器的值為: 0x22011110

.long 0x22011110 @ BWSCON

@ BANK 控制寄存器 BANKCONx(BANK CONTROL REGISTER, x 為 0~5)

@ 這幾個寄存器用來控制 BANK0 ~ BANK5 外接設備的訪問時序,使用默認的 0x0700 即可

.long   0x00000700 @ BANKCON0

.long   0x00000700 @ BANKCON1

.long   0x00000700 @ BANKCON2

.long   0x00000700 @ BANKCON3

.long   0x00000700 @ BANKCON4

.long   0x00000700 @ BANKCON5

@ BANK 控制寄存器 BANKCONx(BANK CONTROL REGISTER, x 為 6~7)

@ 在8個BANK中,只有BANK6和BANK7可以外接SRAM或SDRAM,

@ 所以BANKCON6 ~ BANKCON7 與 BANKCON0 ~ BANKCON5 有點不同

@ MT([16:15]) 用于設置本 BANK 外接的是 ROM/SRAM 還是 SDRAM。

@ MT=0b00 時,此寄存器與 BANKCON0 ~ BANKCON5 類似。(外接SRAM)

@ MT=0b11 時,此寄存器其它值如下設置。(外接SDRAM)

@ Trcd([3:2]) RAS to CAS delay,設置推薦值為 0b01

@ SCAN([1:0]) SDRAM  的列地址位數。對于本開發板使用的 SDRAM K4S561632,

@ 列地址位數為 9, 所以 SCAN = 0b01。如果使用其他型號的 SDRAM, 需要查看其數據手冊來決定 SCAN 的取值。

@ 0b00 表示8位, 0b01 表示9位, 0b10 表示10位

@ 綜上所述,本開發板中 BANKCON6/7 均設為 0x00018005

.long   0x00018005 @ BANKCON6

.long   0x00018005 @ BANKCON7

@ 刷新控制寄存器 REFRESH(REFRESH CONTROL REGISTER): 設為 0x008C0000 + R_CNT

@ REFEN([23]) 0 = 禁止 SDRAM 的刷新功能, 1 = 開啟 SDRAM 的刷新功能

@ TREFMD([22]) SDRAM 的刷新模式。0 = CBR/Auto Refresh, 1 = Self Refresh(一般在系統休眠時使用)

@ Trp([21:20]) 設為 0 即可。

@ Tsrc([19:18]) 設為默認值 0b11 即可。

@ Refresh Counter([10:0]) 即上述的 R_CNT

@ R_CNT 可如下計算 (SDRAM 時鐘頻率就是 HCLK)

@ R_CNT = 2 ^ 11 + 1 - SDRAM 時鐘頻率(MHz) * SDRAM 刷新周期 (uS)

@ SDRAM 的刷新周期在 SDRAM 的數據手冊上有標明,在本開發板使用的 SDRAM K4S561632 的數據手冊上,

@ 可看見這么一行 "64 ms refresh period (8K Cycle)"

@ 所以,刷新周期 = 64ms/8192 = 7.8125 us

@ 在未使用 PLL 時, SDRAM 時鐘頻率等于晶振頻率 12 MHz

@ 現在可以計算: R_CNT = 2 ^ 11 + 1 - 12 * 7.8125 = 1955

@ 所以,在末使用 PLL 時, REFRESH = 0x008C0000 + 1955 = 0x008C07A3

.long   0x008C07A3 @ REFRESH

@ BANKSIZE 寄存器 REFRESH (BANKSIZE REGISTER)

@ BURST_EN([7]) 0 = ARM 核禁止突發傳輸, 1 = ARM 核支持突發傳輸

@ SCKE_EN([5]) 0 = 不使用 SCKE 信號令 SDRAM 進入省電模式, 1 = 使用 SCKE 信號令 SDRAM 進入省電模式

@ SCLK_EN([4]) 0 = 時刻發出 SCLK 信號, 1 = 僅在訪問 SDRAM 期間發出 SCLK 信號

@ BK76MAP([2:0]) 設置 BANK6/7 的大小

@ BANK6/7 對應的地址空間與 BANK0~5 不同。 BANK0~5 的地址空間大小都是固定的 128MB,

@ 地址返回是 (x*128M) 到 (x+1)*128M-1。 x表示 0 到 5。BANK6/7 的大小是可變的,

@ 以保持這兩個空間的地址連續,即 BANK7 的其實地址會隨它們的大小變化。BK76MAP 的取值意義如下:

@ 0b010 = 128M/128M

@ 0b001 = 64MB/64MB

@ 0b000 = 32MB/32MB

@ 0b111 = 16MB/16MB

@ 0b110 = 8MB/8MB

@ 0b101 = 4M/4M

@ 0b100 = 2M/2M

@ 本開發板 BANK6 外接64MB的 SDRAM, 令[2:0]=0b001 (64MB/64MB)

@ 表示 BANK6/7 的容量都是64MB,雖然 BANK7 沒有使用

@ 綜上所述,本開發板 BANKSIZE 寄存器的值可算得 0xB1

.long   0x000000B1 @ BANKSIZE

@ SDRAM 模式設置寄存器 MRSRBx (SDRAM MODE REGISTER SET REGISTER, x為6~7)

@ 能修改的只有位 CL([6:4]),這是 SDRAM 時序的一個時間參數:

@ 0b000 = 1 clocks, 0b010 = 2 clocks, 0b011 = 3 clocks

@ SDRAM K4S561632 不支持 CL = 1的情況,所以位[6:4]取值為 0b010 或 0b011 。

@ 本開發板取最保守的值 0b011, 所以 MRSRB6/7 的值為 0x30

.long   0x00000030 @ MRSRB6

.long   0x00000030 @ MRSRB7



// leds.c

#define GPFCON (*(volatile unsigned long *)0x56000050)

#define GPFDAT (*(volatile unsigned long *)0x56000054)

 

#define GPF4_out (1<<(4*2))

#define GPF5_out (1<<(5*2))

#define GPF6_out (1<<(6*2))

void  wait(volatile unsigned long dly)

{

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

}

 

int main(void)

{

unsigned long i = 0;

GPFCON = GPF4_out|GPF5_out|GPF6_out; // 將LED1,2,4對應的GPF4/5/6三個引腳設為輸出

 

while(1){

wait(30000);

GPFDAT = (~(i<<4)); // 根據i的值,點亮LED1,2,4

if(++i == 8)

i = 0;

}

return 0;

}


#Makefile

sdram.bin : head.S leds.c

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

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

arm-linux-ld -Ttext 0x30000000 -g head.o leds.o -o sdram_elf

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.dis *.o

關鍵字:存儲控制器  SDRAM  S3C2440 引用地址:存儲控制器和SDRAM 實驗

上一篇:【嵌入式Linux+ARM】存儲控制器(操作SDRAM)
下一篇:(嵌入式)關于arm中的存儲控制器(一)

推薦閱讀

新華社北京4月4日6時47分電(記者于佳欣)針對美貿易代表辦公室剛剛公布的對華301調查征稅建議,商務部新聞發言人第一時間發表談話,表示中方堅決反對,并將于近日依法對美產品采取同等力度、同等規模的對等措施。美東時間3月27日,美貿易代表公布對華301調查征稅建議,并在30天內公開征求意見。征稅產品建議清單將涉及我500億美元出口,建議稅率為25%。商...
激光雷達一直是機器人、無人駕駛、無人機等行業發展的關鍵技術之一,目前,市場仍在不斷增長,未來前景不可估量。據最新數據顯示,在2020年激光雷達市場規模有望超100億,按照2020年前裝市場25%滲透率、后裝市場5%滲透率估算,中國市場規模有望近200億。激光雷達行業迎來可觀發展主要得益于兩個方面,一方面是政府的大力支持,另一方面是激光雷達技術的創...
隨著國外新冠肺炎疫情形勢日益嚴峻,全球諸多車廠宣布停產。3 月、4 月面板廠陸續看到客戶縮減訂單,其中又以車載面板、手機面板、電視面板受到的影響最大。市場預估,這三大應用面板,今年出貨都將有 5~10%的衰退幅度。 車載面板友達董事長彭雙浪此前透露,目前觀察到新冠肺炎疫情對于市場看到明確影響的就是汽車,2 月大陸汽車銷售只有過去的 10...
本章介紹一個利用實時中斷,設計的調度模塊。利用該模塊,不僅可以讓I/O管腳輸出特定占空比的方波,還可以讓程序有序的去調度。建議讀者先自行閱讀芯片資料第15章的內容,內容不多。芯片資料可以到我的百度盤下載,該芯片的中英文的資料分別https://pan.baidu.com/s/1dgVbkE https://pan.baidu.com/s/1o9qFU5c,如果對英文不是很熟悉,那就閱讀中文的。1....

史海拾趣

問答坊 | AI 解惑

05年電子競賽合集(一共有12篇哦)

本帖最后由 paulhyde 于 2014-9-15 08:56 編輯 希望大家會喜歡  …

查看全部問答∨

個人心得:wince的學習路線

與桌面操作系統和服務器操作系統下的軟件開發不同,為嵌入式操作系統開發軟件可不只是寫寫應用程序那么簡單。我們常常要深入到內核,甚至要深入到硬件。根據不同的開發層面,我們把Windows CE 下的嵌入式軟件開發者分為下面三類: 第一類我們稱之 ...…

查看全部問答∨

RaiseException 如何解決

各位好:我的平臺基于WINCE5.0 上面有帶CF 的WIFI.一旦無線網卡連接上網絡,我打開Explorer 沒有下面的錯誤信息出現。如果拔掉網卡,在打開EXPLORER 就會出現下面的信息,請問如何解決 謝謝 RaiseException: Thread=87647640 Proc=8299add0 \'ie ...…

查看全部問答∨

STM32有沒可通過USB執行ISP的片子?

我覺得這種方式非常方便:一根USB、一臺本本就可以去現場了。而且生產也方便!…

查看全部問答∨

void TI_CC_Wait(unsigned int cycles) 延時時間

大家好 請問以下這個函數的具體延時時間是多少 // Delay function. # of CPU cycles delayed is similar to "cycles". Specifically, // it\'s ((cycles-15) % 6) + 15. Not exact, but gives a sense of the real-time // delay. Also, ...…

查看全部問答∨

cpld的IO

一般CPLD的IO最高速度是多少?&nbsp; 請推薦具體型號…

查看全部問答∨

關于C調用匯編函數 參數問題

再看uC/OS-II移到msp430上時看到這里OSCPUSaveSR            MOV.W    SR,R12            DINT ...…

查看全部問答∨

有什么辦法來檢測MSP430是不是燒壞了。。。。

用5438A做AD試驗的時候可能是電壓過大,開發板的指示燈一下子就滅了。。。 然后就是下載不了了,想知道有沒有什么辦法確定是不是芯片燒了。。。?!?

查看全部問答∨

2013 紅外通信裝置

本帖最后由 paulhyde 于 2014-9-15 03:31 編輯 2013 紅外通信裝置,大家有沒有好的論文,一起學習學習,推薦幾個,快交了!    …

查看全部問答∨

關于ucc28019

本帖最后由 paulhyde 于 2014-9-15 03:14 編輯 小弟用ucc28019與boost 電路設計了一個電源,卻發現調解負載后,電壓也跟著變了,請問哪位大神知道是怎么回事,還望不吝賜教!?。?    …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 台湾省| 普兰店市| 永宁县| 西宁市| 任丘市| 隆昌县| 宕昌县| 曲靖市| 赫章县| 资阳市| 武功县| 建水县| 朔州市| 新源县| 榆社县| 高淳县| 达日县| 鄢陵县| 石景山区| 保康县| 化州市| 商水县| 衡水市| 油尖旺区| 施甸县| 金湖县| 大足县| 苍梧县| 成都市| 乃东县| 宁武县| 台南市| 韩城市| 安仁县| 东至县| 东乡县| 社旗县| 舒城县| 双柏县| 岑溪市| 吉安市|