新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > S3C2410的內存映射

        S3C2410的內存映射

        作者: 時間:2016-11-20 來源:網絡 收藏
        這片文章主要介紹S3C2410內存映射,主要參考2410的用戶手冊。

        我用的板子是基于三星的2410,三星的內存片選有8個bank,這里所謂的bank我開始也不是很清楚,在網上搜了一通也不知所云,但是當我看了 2410的用戶手冊后才有點明白,這里的bank就是片選,一個片選就是一個bank,在U-Boot中,配制的時候要配制SDRAM和FLASH的 bank數,那么如果你的SDRAM或者FLASH就接了一個片選的時候,就定義為1就可以了,其他的類推。
        下面是2410的內存映射圖,2410和其他的大部分的處理器一樣,支持NorFlash和NANDFlash啟動,而這兩種啟動方式內存所映射的地址不怎么相同,我的板子沒有NANDFlash,所以就以從NorFlash啟動為例子了:
        ==============================================<-------0xFFFF_FFFF
        | NOT USED
        ==============================================<-------0x6000_0000
        | SFR Area (各個接口的控制寄存器)
        ==============================================<-------0x4800_0000
        ==============================================<-------0x4000_0FFF
        | BootSRAM (4KBytes)
        ==============================================<-------0x4000_0000
        | SROM/SDRAM nGCS7 (bank7)
        ==============================================<-------0x3800_0000
        | SROM/SDRAM nGCS6 (bank6)
        ==============================================<-------0x3000_0000
        | SROM nGCS5 (bank5)
        ==============================================<-------0x2800_0000
        | SROM nGCS4 (bank4)
        ==============================================<-------0x2000_0000
        | SROM nGCS3 (bank3)
        ==============================================<-------0x1800_0000
        | SROM nGCS2 (bank2)
        ==============================================<-------0x1000_0000
        | SROM nGCS1 (bank1)
        ==============================================<-------0x0800_0000
        | SROM nGCS0 (bank0)
        ==============================================<-------0x0000_0000
        上面的每個bank最大支持128M,除了bank0,其它的每個bank都支持8/16/32位操作,bank0只支持16/32位操作,在我的板子上,F(xiàn)lash接bank0,一共8M,16位,SDRAM接bank6,一個32M,32位。所以啟動的時候,CPU從0x0000_0000開始執(zhí)行,而在這上面的NorFlash,存放的是U-Boot,用于啟動Linux的。
        而我們目前所做的工作就是要把U-Boot移植成功,然后燒寫到該地址,假設你的板子的供應商已經提供了少些的工具,等到我們少些成功,我們就可以通過網絡來加載Linux,通過串口來調試了,至于怎么做的,我們慢慢來,以后的帖子會涉及到。。。
        在上面的存儲地址布局中,SFR Area就是各個接口控制器的地址,我們可以把它定義如下,來自華恒PPCboot上面的源代碼中的頭文件s3c2410.h:

        #define rBWSCON (*(volatile unsigned *)0x48000000)
        #define rBANKCON0 (*(volatile unsigned *)0x48000004)
        #define rBANKCON1 (*(volatile unsigned *)0x48000008)
        #define rBANKCON2 (*(volatile unsigned *)0x4800000C)
        #define rBANKCON3 (*(volatile unsigned *)0x48000010)
        #define rBANKCON4 (*(volatile unsigned *)0x48000014)
        #define rBANKCON5 (*(volatile unsigned *)0x48000018)
        #define rBANKCON6 (*(volatile unsigned *)0x4800001C)
        #define rBANKCON7 (*(volatile unsigned *)0x48000020)
        #define rREFRESH (*(volatile unsigned *)0x48000024)
        #define rBANKSIZE (*(volatile unsigned *)0x48000028)
        #define rMRSRB6 (*(volatile unsigned *)0x4800002C)
        #define rMRSRB7 (*(volatile unsigned *)0x48000030)

        #define rHcRevision (*(volatile unsigned *)0x49000000)
        #define rHcControl (*(volatile unsigned *)0x49000004)
        #define rHcCommonStatus (*(volatile unsigned *)0x49000008)
        #define rHcInterruptStatus (*(volatile unsigned *)0x4900000C)
        #define rHcInterruptEnable (*(volatile unsigned *)0x49000010)
        #define rHcInterruptDisable (*(volatile unsigned *)0x49000014)
        #define rHcHCCA (*(volatile unsigned *)0x49000018)
        #define rHcPeriodCuttendED (*(volatile unsigned *)0x4900001C)
        #define rHcControlHeadED (*(volatile unsigned *)0x49000020)
        #define rHcControlCurrentED (*(volatile unsigned *)0x49000024)
        #define rHcBulkHeadED (*(volatile unsigned *)0x49000028)
        #define rHcBuldCurrentED (*(volatile unsigned *)0x4900002C)
        #define rHcDoneHead (*(volatile unsigned *)0x49000030)
        #define rHcRmInterval (*(volatile unsigned *)0x49000034)
        #define rHcFmRemaining (*(volatile unsigned *)0x49000038)
        #define rHcFmNumber (*(volatile unsigned *)0x4900003C)
        #define rHcPeriodicStart (*(volatile unsigned *)0x49000040)
        #define rHcLSThreshold (*(volatile unsigned *)0x49000044)
        #define rHcRhDescriptorA (*(volatile unsigned *)0x49000048)
        #define rHcRhDescriptorB (*(volatile unsigned *)0x4900004C)
        #define rHcRhStatus (*(volatile unsigned *)0x49000050)
        #define rHcRhPortStatus1 (*(volatile unsigned *)0x49000054)
        #define rHcRhPortStatus2 (*(volatile unsigned *)0x49000058)

        #define rSRCPND (*(volatile unsigned *)0x4A000000)
        #define rINTMOD (*(volatile unsigned *)0x4A000004)
        #define rINTMSK (*(volatile unsigned *)0x4A000008)
        #define rPRIORITY (*(volatile unsigned *)0x4A00000C)
        #define rINTPND (*(volatile unsigned *)0x4A000010)
        #define rINTOFFSET (*(volatile unsigned *)0x4A000014)
        #define rSUBSRCPND (*(volatile unsigned *)0x4A000018)
        #define rINTSUBMSK (*(volatile unsigned *)0x4A00001C)

        #define rULCON0 (*(volatile unsigned *)0x50000000)
        #define rUCON0 (*(volatile unsigned *)0x50000004)
        #define rUFCON0 (*(volatile unsigned *)0x50000008)
        #define rUMCON0 (*(volatile unsigned *)0x5000000C)
        #define rUTRSTAT0 (*(volatile unsigned *)0x50000010)
        #define rUERSTAT0 (*(volatile unsigned *)0x50000014)
        #define rUFSTAT0 (*(volatile unsigned *)0x50000018)
        #define rUMSTAT0 (*(volatile unsigned *)0x5000001C)
        #define rUBRDIV0 (*(volatile unsigned *)0x50000028)
        #define rULCON1 (*(volatile unsigned *)0x50004000)
        #define rUCON1 (*(volatile unsigned *)0x50004004)
        #define rUFCON1 (*(volatile unsigned *)0x50004008)
        #define rUMCON1 (*(volatile unsigned *)0x5000400C)
        #define rUTRSTAT1 (*(volatile unsigned *)0x50004010)
        #define rUERSTAT1 (*(volatile unsigned *)0x50004014)
        #define rUFSTAT1 (*(volatile unsigned *)0x50004018)
        #define rUMSTAT1 (*(volatile unsigned *)0x5000401C)
        #define rUBRDIV1 (*(volatile unsigned *)0x50004028)
        #define rULCON2 (*(volatile unsigned *)0x50008000)
        #define rUCON2 (*(volatile unsigned *)0x50008004)
        #define rUFCON2 (*(volatile unsigned *)0x50008008)
        #define rUTRSTAT2 (*(volatile unsigned *)0x50008010)
        #define rUERSTAT2 (*(volatile unsigned *)0x50008014)
        #define rUFSTAT2 (*(volatile unsigned *)0x50008018)
        #define rUBRDIV2 (*(volatile unsigned *)0x50008028)
        #ifdef __BIG_ENDIAN
        #define rUTXH0 (*(volatile unsigned char *)0x50000023)
        #define rURXH0 (*(volatile unsigned char *)0x50000027)
        #define rUTXH1 (*(volatile unsigned char *)0x50004023)
        #define rURXH1 (*(volatile unsigned char *)0x50004027)
        #define rUTXH2 (*(volatile unsigned char *)0x50008023)
        #define rURXH2 (*(volatile unsigned char *)0x50008027)
        #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000023)=(unsigned char)(ch)
        #define RdURXH0() (*(volatile unsigned char *)0x50000027)
        #define WrUTXH1(ch) (*(volatile unsigned char *)0x50004023)=(unsigned char)(ch)
        #define RdURXH1() (*(volatile unsigned char *)0x50004027)
        #define WrUTXH2(ch) (*(volatile unsigned char *)0x50008023)=(unsigned char)(ch)
        #define RdURXH2() (*(volatile unsigned char *)0x50008027)
        #define UTXH0 (0x50000020+3)
        #define URXH0 (0x50000024+3)
        #define UTXH1 (0x50004020+3)
        #define URXH1 (0x50004024+3)
        #define UTXH2 (0x50008020+3)
        #define URXH2 (0x50008024+3)
        #else
        #define rUTXH0 (*(volatile unsigned char *)0x50000020)
        #define rURXH0 (*(volatile unsigned char *)0x50000024)
        #define rUTXH1 (*(volatile unsigned char *)0x50004020)
        #define rURXH1 (*(volatile unsigned char *)0x50004024)
        #define rUTXH2 (*(volatile unsigned char *)0x50008020)
        #define rURXH2 (*(volatile unsigned char *)0x50008024)
        #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)
        #define RdURXH0() (*(volatile unsigned char *)0x50000024)
        #define WrUTXH1(ch) (*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)
        #define RdURXH1() (*(volatile unsigned char *)0x50004024)
        #define WrUTXH2(ch) (*(volatile unsigned char *)0x50008020)=(unsigned char)(ch)
        #define RdURXH2() (*(volatile unsigned char *)0x50008024)
        #define UTXH0 (0x50000020)
        #define URXH0 (0x50000024)
        #define UTXH1 (0x50004020)
        #define URXH1 (0x50004024)
        #define UTXH2 (0x50008020)
        #define URXH2 (0x50008024)
        #endif

        #define rTCFG0 (*(volatile unsigned *)0x51000000)
        #define rTCFG1 (*(volatile unsigned *)0x51000004)
        #define rTCON (*(volatile unsigned *)0x51000008)
        #define rTCNTB0 (*(volatile unsigned *)0x5100000C)
        #define rTCMPB0 (*(volatile unsigned *)0x51000010)
        #define rTCNTO0 (*(volatile unsigned *)0x51000014)
        #define rTCNTB1 (*(volatile unsigned *)0x51000018)
        #define rTCMPB1 (*(volatile unsigned *)0x5100001C)
        #define rTCNTO1 (*(volatile unsigned *)0x51000020)
        #define rTCNTB2 (*(volatile unsigned *)0x51000024)
        #define rTCMPB2 (*(volatile unsigned *)0x51000028)
        #define rTCNTO2 (*(volatile unsigned *)0x5100002C)
        #define rTCNTB3 (*(volatile unsigned *)0x51000030)
        #define rTCMPB3 (*(volatile unsigned *)0x51000034)
        #define rTCNTO3 (*(volatile unsigned *)0x51000038)
        #define rTCNTB4 (*(volatile unsigned *)0x5100003C)
        #define rTCNTO4 (*(volatile unsigned *)0x51000040)

        本文引用地址:http://www.104case.com/article/201611/318881.htm


        關鍵詞: S3C2410內存映

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 子洲县| 天全县| 云安县| 巴楚县| 牟定县| 烟台市| 沙坪坝区| 鸡东县| 卢龙县| 柳州市| 丰都县| 吐鲁番市| 巴彦淖尔市| 水城县| 师宗县| 榕江县| 德钦县| 广水市| 周口市| 盱眙县| 洛宁县| 开原市| 牡丹江市| 柳林县| 日喀则市| 盐池县| 沂源县| 金秀| 青川县| 漳州市| 日喀则市| 长沙县| 中西区| 仁寿县| 运城市| 文登市| 兴仁县| 罗城| 宣化县| 阿巴嘎旗| 蕉岭县|