日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

二、編寫(xiě) s3c24x0 的 bootloader——SDRAM 設(shè)置

發(fā)布者:leader4最新更新時(shí)間:2024-08-26 來(lái)源: cnblogs關(guān)鍵字:s3c24x0  bootloader  SDRAM  設(shè)置 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

2.1 介紹

2.1.1 硬件

在對(duì)時(shí)鐘頻率進(jìn)行初始化之后,就可以使用存儲(chǔ)器控制器對(duì) SDRAM 進(jìn)行初始化了。

可以看看存儲(chǔ)器控制器的映射表:

  

 

由圖上可以看出,S3C2440 可以接兩個(gè) SDRAM,一個(gè)起始地址是 0x30000000,一個(gè)是 0x38000000,分別由片選信號(hào) nGCS6 和 nGCS7 控制。

查看原理圖上的 SDRAM 控制電路

  

使用的是 nGCS6,那么 SDRAM 的地址就是 0x30000000

2.1.2 寄存器

存儲(chǔ)器控制器涉及到的寄存器很多,具體看芯片手冊(cè)。

2.2 代碼編寫(xiě)

start.S 代碼中:


1     /** 5. 初始化 SDRAM */

2     mov ip, lr          /** 保存當(dāng)前程序地址到 ip  寄存器 */

3     bl sdram_init       /** 執(zhí)行 SDRAM 的初始化 */

4     mov    lr, ip

跳轉(zhuǎn)到 sdram_init 標(biāo)簽中執(zhí)行


sdram_init.S,這里是使用的 uboot 中的源碼。


  1 /** =============== BWSCON: 地址 0x48000000 總線寬度和等待控制寄存器 ================ */

  2 #define BWSCON    0x48000000

  3 

  4 /* DW:數(shù)據(jù)總線寬度數(shù)據(jù)定義 */

  5 #define DW8                (0x0)   /** 8 位數(shù)據(jù)總線寬度 */

  6 #define DW16            (0x1)   /** 16 位數(shù)據(jù)總線寬度 */

  7 #define DW32            (0x2)   /** 32 位數(shù)據(jù)總線寬度 */

  8 

  9 /* WS: wait 狀態(tài) */

 10 #define WAIT            (0x1<<2)    /** 開(kāi)啟 BANK 的 WAIT 功能 */

 11 

 12 /* ST: 是否使用 使用 UB/LB */

 13 #define UBLB            (0x1<<3)    /** BANK 使用 UB/LB */

 14 

 15 #define B1_BWSCON        (DW32)      /** BANK1 的總線位寬設(shè)置 32 位 */

 16 #define B2_BWSCON        (DW16)      /** BANK2 的總線位寬設(shè)置 16 位 */

 17 #define B3_BWSCON        (DW16 + WAIT + UBLB)    /** BANK3 的總線位寬設(shè)置 16 位,使能 WAIT 和 UB/LB */

 18 #define B4_BWSCON        (DW16)      /** BANK4 的總線位寬設(shè)置 16 位 */

 19 #define B5_BWSCON        (DW16)      /** BANK5 的總線位寬設(shè)置 16 位 */

 20 #define B6_BWSCON        (DW32)      /** BANK6 的總線位寬設(shè)置 32 位 */

 21 #define B7_BWSCON        (DW32)      /** BANK7 的總線位寬設(shè)置 32 位 */

 22 

 23 /** =================================== end BWSCON =============================== */

 24 

 25 /** =============== BANK0CON: 地址 0x48000004 BANK0 控制寄存器 ===================== */

 26 #define B0_Tacs            0x0    /*  0clk */

 27 #define B0_Tcos            0x0    /*  0clk */

 28 #define B0_Tacc            0x7    /* 14clk */

 29 #define B0_Tcoh            0x0    /*  0clk */

 30 #define B0_Tah            0x0    /*  0clk */

 31 #define B0_Tacp            0x0

 32 #define B0_PMC            0x0    /* normal */

 33 /** =================================== end BANK0CON =============================== */

 34 

 35 /** =============== BANK1CON: 地址 0x48000008 BANK1 控制寄存器 ===================== */

 36 #define B1_Tacs            0x0    /*  0clk */

 37 #define B1_Tcos            0x0    /*  0clk */

 38 #define B1_Tacc            0x7    /* 14clk */

 39 #define B1_Tcoh            0x0    /*  0clk */

 40 #define B1_Tah            0x0    /*  0clk */

 41 #define B1_Tacp            0x0

 42 #define B1_PMC            0x0

 43 /** =================================== end BANK1CON =============================== */

 44 

 45 /** =============== BANK2CON: 地址 0x4800000C BANK2 控制寄存器 ===================== */

 46 #define B2_Tacs            0x0

 47 #define B2_Tcos            0x0

 48 #define B2_Tacc            0x7

 49 #define B2_Tcoh            0x0

 50 #define B2_Tah            0x0

 51 #define B2_Tacp            0x0

 52 #define B2_PMC            0x0

 53 /** =================================== end BANK2CON =============================== */

 54 

 55 /** =============== BANK3CON: 地址 0x48000010 BANK3 控制寄存器 ===================== */

 56 #define B3_Tacs            0x0    /*  0clk */

 57 #define B3_Tcos            0x3    /*  4clk */

 58 #define B3_Tacc            0x7    /* 14clk */

 59 #define B3_Tcoh            0x1    /*  1clk */

 60 #define B3_Tah            0x0    /*  0clk */

 61 #define B3_Tacp            0x3     /*  6clk */

 62 #define B3_PMC            0x0    /* normal */

 63 /** =================================== end BANK3CON =============================== */

 64 

 65 /** =============== BANK4CON: 地址 0x48000014 BANK4 控制寄存器 ===================== */

 66 #define B4_Tacs            0x0    /*  0clk */

 67 #define B4_Tcos            0x0    /*  0clk */

 68 #define B4_Tacc            0x7    /* 14clk */

 69 #define B4_Tcoh            0x0    /*  0clk */

 70 #define B4_Tah            0x0    /*  0clk */

 71 #define B4_Tacp            0x0

 72 #define B4_PMC            0x0    /* normal */

 73 /** =================================== end BANK4CON =============================== */

 74 

 75 /** =============== BANK5CON: 地址 0x48000018 BANK5 控制寄存器 ===================== */

 76 #define B5_Tacs            0x0    /*  0clk */

 77 #define B5_Tcos            0x0    /*  0clk */

 78 #define B5_Tacc            0x7    /* 14clk */

 79 #define B5_Tcoh            0x0    /*  0clk */

 80 #define B5_Tah            0x0    /*  0clk */

 81 #define B5_Tacp            0x0

 82 #define B5_PMC            0x0    /* normal */

 83 /** =================================== end BANK5CON =============================== */

 84 

 85 /** =============== BANK6CON: 地址 0x4800001C BANK6 控制寄存器 ===================== */

 86 #define B6_MT            0x3    /* 配置BANK6的存器類型為 SDRAM */

 87 #define B6_Trcd            0x1

 88 #define B6_SCAN            0x1    /* 9bit */

 89 /** =================================== end BANK6CON =============================== */

 90 

 91 /** =============== BANK7CON: 地址 0x48000020 BANK7 控制寄存器 ===================== */

 92 #define B7_MT            0x3    /* SDRAM */

 93 #define B7_Trcd            0x1    /* RAS 到 CAS 的延遲為 3 個(gè)時(shí)鐘 */

 94 #define B7_SCAN            0x1    /* 列地址數(shù)為 9bit */

 95 /** =================================== end BANK7CON =============================== */

 96 

 97 /** =============== REFRESH: 地址 0x48000024 BANK7 SDRAM 刷新控制寄存器 ===================== */

 98 #define REFEN            0x1    /* SDRAM 刷新使能 */

 99 #define TREFMD            0x0    /* SDRAM 刷新模式為 CBR/自動(dòng)刷新*/

100 #define Trp                0x0 /* SDRAM RAS 預(yù)充電時(shí)間 2 個(gè)時(shí)鐘 */

101 #define Trc                0x3    /* SDRAM 半行周期時(shí)間 7 個(gè)時(shí)鐘 */

102 #define Tchr            0x2    /* 3clk */

103 #define REFCNT            1113    /* SDRAM 刷新計(jì)數(shù)值, period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */

104 /** ======================================== end REFRESH ================================== */

105 

106 .globl sdram_init

107 sdram_init:

108     /* memory control configuration */

109     /* make r0 relative the current location so that it */

110     /* reads SMRDATA out of FLASH rather than memory ! */

111     ldr     r0, =SMRDATA    /** 執(zhí)行 SMRDATA 函數(shù),對(duì)各個(gè)寄存器進(jìn)行配置 */

112     ldr        r1, =CONFIG_SYS_TEXT_BASE   /** CONFIG_SYS_TEXT_BASE 為 0 */

113     sub        r0, r0, r1

114     ldr        r1, =BWSCON    /* Bus Width Status Controller */

115     add     r2, r0, #13*4   /* 將SMRDATA這一塊地址賦值給r2中 */

116 0:      /** 循環(huán)操作 */

117     ldr     r3, [r0], #4

118     str     r3, [r1], #4

119     cmp     r2, r0

120     bne     0b  /** 比較R2和R1,如果不相等,則跳回前面的 0 標(biāo)號(hào) */

[1] [2]
關(guān)鍵字:s3c24x0  bootloader  SDRAM  設(shè)置 引用地址:二、編寫(xiě) s3c24x0 的 bootloader——SDRAM 設(shè)置

上一篇:三、編寫(xiě) s3c24x0 的 bootloader——重定位(一)
下一篇:一、編寫(xiě) s3c24x0 的 bootloader——介紹、看門(mén)狗及時(shí)鐘設(shè)置

推薦閱讀最新更新時(shí)間:2025-06-07 23:42

STM32CubeMX | 31-使用硬件FMC讀寫(xiě)SDRAM(W9825G6KH)
本篇詳細(xì)的記錄了如何使用STM32CubeMX配置 STM32F767IGT6 的硬件FMC外設(shè)與 SDRAM 通信(W9825G6KH)。 1. 準(zhǔn)備工作 硬件準(zhǔn)備 開(kāi)發(fā)板 首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是STM32F767IGT6的核心板。 SDRAM 核心板板載一片SDRAM,型號(hào)為 W9825G6KH,大小為 32 MB。 軟件準(zhǔn)備 需要準(zhǔn)備一份 W9825G6KH-6 的數(shù)據(jù)手冊(cè)。 2. STM32 FMC外設(shè)概述 2.1. 什么是FMC FMC全稱Flexible Memory Controller,靈活的內(nèi)存控制器,顧名思義,其主要作用是:負(fù)責(zé)向外部擴(kuò)展的存儲(chǔ)類設(shè)備提供控制信號(hào)。 FMC內(nèi)存控
[單片機(jī)]
STM32CubeMX | 31-使用硬件FMC讀寫(xiě)<font color='red'>SDRAM</font>(W9825G6KH)
MC9S12XS128MAL Bootloader(1)
首先BootLoader和用戶程序是兩個(gè)工程,兩個(gè)工程代碼通過(guò)修改PRM文件存儲(chǔ)在不同的flash中,在通過(guò)PC指針的跳轉(zhuǎn)實(shí)現(xiàn)兩個(gè)工程的切換; BootLoader程序 關(guān)中斷 初始化時(shí)鐘; 初始化CAN 初始化flash讀寫(xiě); 開(kāi)中斷,開(kāi)CAN中斷; 計(jì)時(shí)判斷CAN是否收到bootloader開(kāi)始報(bào)文; 時(shí)間到后沒(méi)收到跳轉(zhuǎn)到原用戶程序啟動(dòng)向量; 收到后,開(kāi)始讀寫(xiě)flash,讀寫(xiě)完后,PC指針跳轉(zhuǎn)到用戶程序地址(EEFE); 其中flash程序在讀寫(xiě)flash時(shí),要把代碼copy到RAM中,因讀寫(xiě)時(shí)不能再讀flash中的代碼 extern char __SEG_START_RAM_CODE ; extern c
[單片機(jī)]
【dsPIC33E】Bootloader(一)Bootloader的介紹與Flash結(jié)構(gòu)
對(duì)于嵌入式開(kāi)發(fā)而言,Bootloader幾乎與操作系統(tǒng)同等重要,它可以讓我們擺脫MCU官方工具,定制自己的燒錄工具,不僅提高產(chǎn)品辨識(shí)度,同時(shí)也大大減少了對(duì)外引腳數(shù)量(例如兼容通信的Uart或CAN等,而不需要另外接JTAG)。 要開(kāi)發(fā)Bootloader,相對(duì)于普通程序,是有一定難度的,這其中涉及到MCU的工作原理、內(nèi)部存儲(chǔ)結(jié)構(gòu)等,而且僅僅依靠C語(yǔ)言可能無(wú)法完成,有時(shí)需要配合匯編來(lái)精確執(zhí)行特殊指令(例如Flash擦寫(xiě))。 一般MCU的機(jī)器碼都是存儲(chǔ)在Flash中,MCU啟動(dòng)時(shí)PC指針會(huì)從內(nèi)部Flash第一個(gè)地址開(kāi)始讀取指令運(yùn)行,這個(gè)過(guò)程我們一般無(wú)法干涉。但由于我們寫(xiě)的代碼存于Flash中,所以一旦從Flash啟動(dòng),后續(xù)操作
[單片機(jī)]
【dsPIC33E】<font color='red'>Bootloader</font>(一)<font color='red'>Bootloader</font>的介紹與Flash結(jié)構(gòu)
STM32固件升級(jí)詳解(BootLoader
基礎(chǔ)知識(shí) 這里以 KEIL 開(kāi)發(fā)環(huán)境和 STM32F103RET6 為例。 上電時(shí)單片機(jī)首先進(jìn)入復(fù)位中斷 Reset_Handler,即匯編文件的復(fù)位中斷處理函數(shù)。 并且有一個(gè)中斷向量表默認(rèn)存在于 flash 地址開(kāi)始處。 為什么說(shuō)是默認(rèn)呢?這是因?yàn)槿绻麤](méi)有特殊要求的話很少會(huì)去改中斷向量表。實(shí)際上這個(gè)中斷向量表是可以更改的。但是在更改向量表之前必須在地址開(kāi)始處建立一個(gè)向量表,因?yàn)樵趶?fù)位后,程序默認(rèn)(硬件決定的)從flash開(kāi)始的第一個(gè)字讀取棧指針,第二字就是復(fù)位中斷的入口,并根據(jù)該指針最終進(jìn)入復(fù)位處理函數(shù)中執(zhí)行相應(yīng)的函數(shù)。如果沒(méi)有這個(gè)中斷向量表程序是無(wú)法啟動(dòng)的。 那么既然前面說(shuō)可以重新設(shè)定中斷向量表的位置,那必然有一
[單片機(jī)]
STM32固件升級(jí)詳解(<font color='red'>BootLoader</font>)
stm32增加bootloader后進(jìn)不了中斷
加bootloader前能進(jìn),加了后進(jìn)不了,但是主程序不崩正常跑 可能是bootloader里跳轉(zhuǎn)前把中斷關(guān)掉了。 即在bootloader里這樣設(shè)置過(guò): __set_PRIMASK(1); 則需要在應(yīng)用層里添加: __set_PRIMASK(0); 重新把中斷打開(kāi) 加bootloader前能進(jìn),加了后程序崩到HardFault里 可能這句沒(méi)加 SCB- VTOR = 0x08010000; 或者是C++工程沒(méi)有用extern C 把中斷函數(shù)包起來(lái) 加了bootloader后程序亂跑,debug時(shí)JLink還會(huì)報(bào)錯(cuò)。 JLink報(bào) **JLink Warning: T-bit of
[單片機(jī)]
基于網(wǎng)絡(luò)加載的BootLoader整套設(shè)計(jì)與解決方案
由于嵌入式系統(tǒng)引導(dǎo)裝載程序(BootLoader)的網(wǎng)絡(luò)加載方式在產(chǎn)品開(kāi)發(fā)初期階段的廣泛應(yīng)用,因此基于網(wǎng)絡(luò)的BootLoader設(shè)計(jì)與實(shí)現(xiàn)具有較強(qiáng)的實(shí)際意義。提出了基于網(wǎng)絡(luò)加載的BootLoader整套設(shè)計(jì)與解決方案,并將該方案應(yīng)用到實(shí)際產(chǎn)品DVB—C中。最后,通過(guò)BootLoad er引導(dǎo)裝載過(guò)程的測(cè)試與分析,驗(yàn)證該方案的可行性與高效性。 嵌入式系統(tǒng)從軟件結(jié)構(gòu)層次的角度來(lái)看,一般由引導(dǎo)裝載程序(BootLoader,BSP)、操作系統(tǒng)和應(yīng)用程序幾部分組成。然而在有的嵌入式系統(tǒng)中,操作系統(tǒng)和應(yīng)用程序存放在系統(tǒng)以外的設(shè)備中,如網(wǎng)絡(luò)、硬盤(pán)等,整個(gè)系統(tǒng)只有引導(dǎo)裝載程序。因此BootLoader是嵌入式系統(tǒng)設(shè)計(jì)中比較重要的一部
[單片機(jī)]
基于網(wǎng)絡(luò)加載的<font color='red'>BootLoader</font>整套設(shè)計(jì)與解決方案
AVR通用Bootloader折騰記
最近做一個(gè)新東西, 正好手邊有ATMega128的芯片, 資源也足夠用, 于是決定就用它了. 考慮到以后PCB會(huì)裝到外殼中, 導(dǎo)致軟件升級(jí)困難, 而正好在電路中會(huì)用到藍(lán)牙串口, 于是決定使用串口更新程序. 于是乎在網(wǎng)上找到”AVR通用Bootloader“, 打算折騰一番. 不得不說(shuō)作者很牛X, 考慮的也很周到, 特意制作了一個(gè)兼下載與圖形化配置的軟件, 直接生成配置頭文件, 和編輯的批處理文件, 相當(dāng)方便, 所以這一部分很簡(jiǎn)單, 配置了一下, 編譯, 然后使用ISP下載到MCU中, 嗯, 別忘記還要配置一下Boot相關(guān)的熔絲. 完成之后寫(xiě)了一個(gè)簡(jiǎn)單的程序使用Bootloader下載到芯片中進(jìn)行測(cè)試. 程序的內(nèi)容很簡(jiǎn)單, 就是讓一
[單片機(jī)]
S3C2410擴(kuò)展SDRAM
由于S3C2410是32位處理器(指令一次能夠操作32位數(shù)據(jù)(運(yùn)算器一次可以處理32位數(shù)據(jù));通用寄存器多是32位寄存器;處理器內(nèi)部數(shù)據(jù)通道也是32位的;處理器外部數(shù)據(jù)總線寬度通常是32位的,地址總線寬度只是代表CPU尋址范圍大小,與CPU是多少位的無(wú)關(guān),也即32位CPU的地址總線不一定是32根的,例如對(duì)于s3c2410,每一個(gè)Bank對(duì)應(yīng)27根地址線,尋址能力為128MB,全部8個(gè)Bank總的尋址能力為1GB),所以為了最大限度的發(fā)揮其性能,內(nèi)存最好也是32位(指數(shù)據(jù)寬度)的,(當(dāng)然,在s3c2410的8個(gè)bank中,除了Bank0只能選擇16/32數(shù)據(jù)位寬外,其余的7個(gè)Bank均可以單獨(dú)選擇8/16/32位寬的存儲(chǔ)系統(tǒng))然而市面
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

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