国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

30.2440內(nèi)存的知識

發(fā)布者:HeavenlyClouds最新更新時間:2024-10-29 來源: cnblogs關(guān)鍵字:內(nèi)存  地址線 手機看文章 掃描二維碼
隨時隨地手機看文章

首先看2440的地址線:mini2440原理圖.pdf

2440的芯片提供了27根地址線=128M。

S3c2440芯片對外提供的引腳上,只給出了27根地址線addr[0:26].這27根引腳地址線,只能訪問128M的外設(shè)空間。

 

為了擴(kuò)大外設(shè)的訪問范圍,S3c2440芯片又提供了8個片選信號nGCS0~nGCS7。當(dāng)某個片選信號nGCSx有效時,則可以通過27根地址線去訪問對應(yīng)這個片選的128MB空間。由于有8個片選,所以2440芯片能訪問的外設(shè)空間總共為8*128MB=1GB.而1G(0x40000000)以上的空間,則安排給了2440內(nèi)部的寄存器,訪問這些內(nèi)部的寄存器,則是通過32位的處理器內(nèi)部總線來完成的。

8個片選信號引腳:

接下來看看芯片手冊的信息:

S3C2440.pdf的5. Memory Controller

片選6和7一般是安排內(nèi)存的位置,2440也是,在片選6和7是SROM和SDRAM??梢钥吹?440內(nèi)存的起始地址是0x30000000.

存儲控制器:

由上圖可知,要去訪問內(nèi)存,NorFlash,網(wǎng)卡芯片等。是通過存儲控制器來訪問的。例如訪問內(nèi)存地址,我們知道要訪問內(nèi)存的地址需要提供L-Bank,行地址和列地址,可我們在訪問的時候只給出一個例如0x30006000的詳細(xì)地址。那處理器怎么知道所謂的L-Bank,行地址和列地址呢?這就是需要存儲控制器,他會把詳細(xì)的地址單元分解為L-Bank,行地址和列地址供CPU訪問。

要讓存儲控制器完成對外設(shè)的訪問,是通過它提供的一系列寄存器來進(jìn)行的。

第一個寄存器是:BWSCON寄存器的功能四控制總線寬度和等待狀態(tài)。

從寄存器的各個位看到,它的32位被分為8組,31-28位是控制Bank7的,以此類推。

31-28是控制bank7的,設(shè)置為0010,首先31沒有使用,所以是0,30位暫時不使用也設(shè)置為0,然后bank7內(nèi)存芯片是通過兩個16位的內(nèi)存芯片合并成一個32位的內(nèi)存芯片,所以是32位的,所28-29是10。Bank6也是一樣的,都是鏈接SDRAM的。剩下的暫時不用都是默認(rèn)值0.值為0x22000000.

然后對bank0到bank5對應(yīng)的六個寄存器,由于暫時不用,也是保持默認(rèn)值:0x07000000

接下來是Bank6和Bank7的控制寄存器:

從上面知道由于這里使用的是SDRAM,所以[16:15]的值為11;然后這里的Memory Type,我們2440是SDRAM是下面的參數(shù)值,所以[14:4]=00000000000;

然后末四位,[3:2]是控制行列信號的延時,下圖可以看到是兩個時鐘周期,所以是00.

前面知道,內(nèi)存地址很像一張表格,里面是由行地址和列地址來確定單元格的位置的。那么列地址有多少位呢?就是通過[1:0]位指定的。

在:HY57V561620.pdf文檔看到:列地址是CA    0~CA8是9位的,所以[1:0]=01.最后該寄存器的值為:11000000000000001=0x18001

所以Bank6和Bank7的值為0x00018001.

接下來的寄存器是:REFRESH寄存器:

在前面的筆記知道,SDRAM里面存儲信息是通過電容的電荷來記錄信息的,就需要定期充電的操作,否則信號失真,所以需要定期刷新。

從上面知道,[23]位是控制是否要刷新的,這里是要刷新的。所以REFEN[23]是為1的。TREFMD[22]位控制的是自動刷新還是自主刷新,這里選的是自動刷新,所以該位為0. Trp[21:20]兩位控制的是準(zhǔn)備充電的時間,下面可以看到準(zhǔn)備時間是2個時鐘,所以是00.

接著是Tsrc是,一行進(jìn)行刷新的持續(xù)時間,一般是7個時鐘,所以是11.[17:16]是不使用的是00.[15:11]五位也是一樣的00000.最后是[10:0]Refresh Counter域的大小11位,是控制多就刷新一次的,后面的公式里HCLK是提供給內(nèi)存的時鐘,在前面知道它是ARMCLK的四分之一,ARMCLK選的是533MHz,它的四分之一是133MHz。

然而下面它給出了一個例子:如果HCLK是100MHz,那么:

Refresh count=+1-100*7.8=1269.

而我們的是133MHz,所以是:

Refresh count=+1-133*7.8= 1011.6=1011=b01111110011

最后該寄存器的值是:100011000000001111110011=0x8C03F3=0x008C03F3

接下來是BANKSIZE寄存器,這個寄存器:

這個寄存器只有前面加個為:[7]是BURST_EN突發(fā)模式,所謂的突發(fā)模式就是訪問內(nèi)存數(shù)據(jù)的時候可以使用批量的數(shù)據(jù),提高訪問效率,打開是設(shè)置1。[6]位是保留位。[5]位是節(jié)電模式,設(shè)置為1.[4]位建議設(shè)置為1,就選1好了。[3]保留。[2:0]是bank6.7的大小的,知道是兩片32M的,組成64M的,所以是001.最后的值是:10110001=0x000000b1

 

最后一組寄存器是控制bank6和bank7的模式的,兩個是一樣的:

在這組寄存器中,只有幾個位,而且很多都是Fixed固定的,看到只需要設(shè)置[CL]位。所謂的CL就是CAS的潛伏期,什么叫CAS信號的潛伏期?看一段時序圖

潛伏期就是從RAS信號變成低電平,到CAS變?yōu)榈碗娖?,這段之間的時鐘,從上圖知道是3,上圖知道3個時鐘對應(yīng)的是011。所以這兩個寄存器的值是0x00000030.

 

到這里內(nèi)存控制的寄存器都在上面的信息,接下來是2440存儲控制器代碼的編寫:

上面為了初始化儲存控制器,需要設(shè)置13寄存器,如果每一個寄存器都需要ldr指令取出,然后再置數(shù),第三在str指令存入,這樣需要39條指令。這樣感覺很是沒效率。而且代碼是差不多的,在別的編程語言,會有循環(huán)來處理。接下來也用循環(huán)來給寄存器置數(shù)。

最后實現(xiàn)的代碼是:

#define mem_contrl 0x48000000 //13個寄存器的第一個寄存器的地址

init_sdram:

    ldr r0, =mem_contrl //把第一個寄存器的地址存入r0寄存器

    add r3, r0, #4*13 //把最后一個寄存器的地址存入r3,總共13個寄存器。

    adrl r1, data //adrl指令,把data標(biāo)號的基地址傳給r1

 

0: //

    ldr r2, [r1], #4 //把r1寄存器指向數(shù)據(jù)表的第一個數(shù)據(jù)取出,放到r2寄存器里,r1+4指

//向數(shù)據(jù)表的下一個數(shù)據(jù)的地址。

    str r2, [r0], #4 //把r2寄存器里的值傳給r0寄存器所指向的地址,然后r0+4指向寄存器

//表的下一個寄存器。

    cmp r0, r3 //比較r0和r3的地址,看是否到了寄存器表的末尾。如果相等結(jié)束程序。

    bne 0b //如果不相等,則bne,b是跳轉(zhuǎn),條件ne=no equal,標(biāo)識是0,b是before往

                                                    //前跳轉(zhuǎn)

    mov pc, lr //返回

 

data:

    .long 0x22000000 //.long 偽指令,指明長度。

    .long 0x00000700

    .long 0x00000700

    .long 0x00000700

    .long 0x00000700

    .long 0x00000700

    .long 0x00000700

    .long 0x00018001

    .long 0x00018001

    .long 0x008c04f5

    .long 0x000000b1

    .long 0x00000030

    .long 0x00000030

上面代碼的過程可以用下圖解釋:

整個過程:把要寫入寄存器的值:可以創(chuàng)建一個數(shù)據(jù)表的存儲結(jié)構(gòu)把它們存起來。這里定義了Data數(shù)據(jù)表,然后知道寄存器的地址是遞增的。所以只要定義一個標(biāo)識來存起來,標(biāo)識的地址就是數(shù)據(jù)的開始地址,寄存器的開始地址是知道的。然后就可以吧D1里的值傳給P1所指向的地址,遞增寄存器地址。循環(huán)上述操作。直到寄存器的地址表末尾就結(jié)束。這樣就在匯編里,使用了循環(huán)結(jié)構(gòu),往連續(xù)地址的寄存器里存入了指定的數(shù)據(jù)。


關(guān)鍵字:內(nèi)存  地址線 引用地址:30.2440內(nèi)存的知識

上一篇:31.6410內(nèi)存的知識
下一篇:29.內(nèi)存的基礎(chǔ)知識

推薦閱讀最新更新時間:2025-06-30 11:15

2440裸機-12-3內(nèi)存控制器與SDRAM_SDRAM設(shè)置
1.什么是SDRAM SDRAM:Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器。同步是指其時鐘頻率和CPU前端總線的系統(tǒng)時鐘相同,并且內(nèi)部命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準(zhǔn);動態(tài)是指存儲陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機是指數(shù)據(jù)不是線性依次存儲,而是自由指定地址進(jìn)行數(shù)據(jù)的讀寫。 2.SDRAM內(nèi)存芯片的內(nèi)部結(jié)構(gòu) 2.1.邏輯Bank與芯片位寬: 現(xiàn)在進(jìn)行深入了解SDRAM的內(nèi)部結(jié)構(gòu)。這里主要的概念就是邏輯Bank。簡單的說,SDRAM的內(nèi)部是一個存儲陣列。因為如果是管道式存儲,就很難做的隨機訪問了。 陣列就如表格一樣,將數(shù)據(jù) 填 進(jìn)去,你可以把它想象成一張表
[單片機]
<font color='red'>2440</font>裸機-12-3<font color='red'>內(nèi)存</font>控制器與SDRAM_SDRAM設(shè)置
恐怖!新的樹莓派竟然配了16GB內(nèi)存
樹莓派5發(fā)布一年多以來,受到工程師們的廣泛贊譽。除了標(biāo)準(zhǔn)的4GB和8GB版本,樹莓派5也在去年年中發(fā)布了50美元的2GB版本。 既然市場有“低成本小內(nèi)存”的需求,也會有“大內(nèi)存”的需求。很多發(fā)燒友就曾經(jīng)DIY過16GB的樹莓派5,但最終效果并不盡人意。在今年的CES 2025年上,16GB內(nèi)存的樹莓派5正式亮相,同時也放出了定價——120美元。 一覽16GB樹莓派5 考慮到Raspberry Pi CM5的RAM高16GB,所以Raspberry Pi 5本身獲得16GB LPDDR4 RAM升級也就不足為奇了。 對比一下,2GB版本50美元,8GB版本80美元,相當(dāng)于花40美元買了8GB內(nèi)存。這么看,好像是有
[嵌入式]
恐怖!新的樹莓派竟然配了16GB<font color='red'>內(nèi)存</font>
美光量產(chǎn)HBM3E高帶寬內(nèi)存 用于英偉達(dá)H200二季度出貨
美光近日宣布已開始量產(chǎn)其 HBM3E 高帶寬內(nèi)存解決方案。英偉達(dá) H200 Tensor Core GPU 將采用美光 8 層堆疊的 24GB 容量 HBM3E 內(nèi)存,并于 2024 年第二季度開始出貨。 美光 HBM3E 引腳速率超過 9.2Gb/s,提供超過1.2TB/s的內(nèi)存帶寬,美光 HBM3E 功耗比競品低約 30%,美光 HBM3E 目前提供 24 GB 容量,使數(shù)據(jù)中心能夠無縫擴(kuò)展其人工智能應(yīng)用。 此外,美光將于 2024 年3月出樣12層堆疊的 36GB 容量 HBM3E,提供超過 1.2TB/s 的性能。同時,美光將贊助 3 月 18 日開幕的英偉達(dá) GTC 全球人工智能大會,屆時將分享更多前沿 AI 內(nèi)存產(chǎn)品系
[半導(dǎo)體設(shè)計/制造]
美光量產(chǎn)HBM3E高帶寬<font color='red'>內(nèi)存</font> 用于英偉達(dá)H200二季度出貨
FreeRTOS heap_5內(nèi)存分配方法介紹
heap_5 使用了和 heap_4 相同的合并算法,內(nèi)存管理實現(xiàn)起來基本相同,但是heap_5 允許內(nèi)存堆跨越多個不連續(xù)的內(nèi)存段。比如 STM32 的內(nèi)部 RAM 可以作為內(nèi)存堆,但是 STM32 內(nèi)部 RAM 比較小,遇到那些需要大容量 RAM 的應(yīng)用就不行了,如音視頻處理。不過STM32 可以外接 SRAM 甚至大容量的 SDRAM,如果使用 heap_4 的話你就只能在內(nèi)部 RAM 和外部SRAM 或 SDRAM 之間二選一了,使用 heap_5 的話就不存在這個問題,兩個都可以一起作為內(nèi)存堆來用。 如果使用 heap_5 的話,在調(diào)用 API 函數(shù)之前需要先調(diào)用函數(shù) vPortDefineHeapRegions ()
[單片機]
linux-2.6.32在mini2440開發(fā)板上移植 移植I2C-EEPROM 驅(qū)動
1 在內(nèi)核中配置I2C 驅(qū)動 Linux-2.6.32.2 對S2C2440 的I2C 接口提供了完善的驅(qū)動,因此我們只需在內(nèi)核中配置一下即可使用。 在內(nèi)核源代碼目錄執(zhí)行:make menuconfig,進(jìn)入內(nèi)核配置主菜單,依次選擇進(jìn)入如下子菜單: Device Drivers --- * I2C support --- I2C Hardware Bus support --- 如圖,我們看到這里已經(jīng)選擇好了“ * S3C2410 I2C Driver”,這里的S3C2410 也可以適用于S3C2440,因為它們的I2C 端口及寄存器定義都是完全相同的。 以上配置所對
[單片機]
linux-2.6.32在mini<font color='red'>2440</font>開發(fā)板上移植 移植I2C-EEPROM 驅(qū)動
s3c2440裸機-LCD編程-4-實現(xiàn)顯示功能
1.讓LCD顯示滿屏紅色 我們想要在LCD上顯示出數(shù)據(jù),所需步驟如下: a. 初始化LCD b. 使能LCD c. 獲取LCD參數(shù): fb_base, xres, yres, bpp d. 往framebuffer中寫數(shù)據(jù) 1.初始化LCD工作我們在前面一節(jié)框架準(zhǔn)備和LCD初始化已經(jīng)詳細(xì)介紹了。 2.使能LCD void lcd_enable() { lcd_controller_enalbe(); //會間接調(diào)用s3c2440_lcd_controller_enalbe } 3.獲取LCD參數(shù) void get_lcd_params(unsigned int *fb_base, int *xres, int
[單片機]
在mini2440上移植使用FFmpeg錄像
最近想在板子上插個攝像頭,錄個像,搞了兩三天,算是能用人家的ffmpeg程序在自己的板子上攝像,然后將文件.avi格式保存到PC機上了。過程有些曲折,但是也算亂撞了。 (1)編譯x264 官網(wǎng)上下了個最新的x264,地址在這里。解壓之后,參考【1】用了個./configure --disable-asm,改寫了下config.mak,改寫ARCH=ARM SYS=LINUX CC=arm-linux-gcc,其中CC寫成你自己的交叉編譯環(huán)境位置,相應(yīng)的AR、RANLIB也是,我的部分修改的config.mak如下: prefix=/usr/local exec_prefix=${prefix} bindir=${exec_pref
[單片機]
在mini<font color='red'>2440</font>上移植使用FFmpeg錄像
TQ2440學(xué)習(xí)筆記——Linux上I2C驅(qū)動的兩種實現(xiàn)方法(1)
內(nèi)核版本:Linux-3.14 u-boot版本:U-Boot 2015.04 硬件:TQ2440 (NorFlash:2M NandFlash:256M 內(nèi)存:64M) 摘要 這里并不深入分析Linux下I2C驅(qū)動的實現(xiàn),只是以TQ2440硬件平臺為例分析I2C驅(qū)動的兩種方法。 第一種方法: 使用S3C2440自帶的I2C控制器實現(xiàn),這個kernel已經(jīng)支持,我們只需要配置即可。 第二種方法: 使用GPIO模擬,這個在kernel中已經(jīng)集成,實現(xiàn)代碼在drivers/i2c/busses/i2c-gpio.c。 在TQ2440平臺上有一個EEPROM,型號是:AT24C02C。我們就以驅(qū)動at24c02c為例。 硬件原理
[單片機]
TQ<font color='red'>2440</font>學(xué)習(xí)筆記——Linux上I2C驅(qū)動的兩種實現(xiàn)方法(1)
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved