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

二、編寫 s3c24x0 的 bootloader——SDRAM 設置

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

2.1 介紹

2.1.1 硬件

在對時鐘頻率進行初始化之后,就可以使用存儲器控制器對 SDRAM 進行初始化了。

可以看看存儲器控制器的映射表:

  

 

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

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

  

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

2.1.2 寄存器

存儲器控制器涉及到的寄存器很多,具體看芯片手冊。

2.2 代碼編寫

start.S 代碼中:


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

2     mov ip, lr          /** 保存當前程序地址到 ip  寄存器 */

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

4     mov    lr, ip

跳轉到 sdram_init 標簽中執(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)    /** 開啟 BANK 的 WAIT 功能 */

 11 

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

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

 14 

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

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

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

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

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

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

 21 #define B7_BWSCON        (DW32)      /** BANK7 的總線位寬設置 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 個時鐘 */

 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/自動刷新*/

100 #define Trp                0x0 /* SDRAM RAS 預充電時間 2 個時鐘 */

101 #define Trc                0x3    /* SDRAM 半行周期時間 7 個時鐘 */

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

103 #define REFCNT            1113    /* SDRAM 刷新計數(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ù),對各個寄存器進行配置 */

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 標號 */

[1] [2]
關鍵字:s3c24x0  bootloader  SDRAM  設置 引用地址:二、編寫 s3c24x0 的 bootloader——SDRAM 設置

上一篇:三、編寫 s3c24x0 的 bootloader——重定位(一)
下一篇:一、編寫 s3c24x0 的 bootloader——介紹、看門狗及時鐘設置

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

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

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

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