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

S5PV210的啟動過程

發布者:alpha12最新更新時間:2024-12-03 來源: cnblogs關鍵字:S5PV210  啟動過程  IRAM 手機看文章 掃描二維碼
隨時隨地手機看文章

初步認識IROM和IRAM

S5PV210含有一個內64K的IROM和96K的IRAM,系統啟動時主要依靠它們,IROM和IRAM所處的存儲空間見下圖:

image

S5PV210有IROM,且只能從IROM啟動,不再支持原來的直接從外部介質啟動方式。
IROM代碼(BL0)運行完畢后,根據OM[5:0]確定外部啟動介質(BL1和BL2)完成啟動。S5PV210支持的外部啟動介質包括:NAND Flash、OneNAND、SD/MMC、eMMC、eSSD、UART/USB。

完整的啟動序列
系統剛啟動時,會運行IROM中的固化代碼,進行一些通用的初始化,具體步驟包括:
第一步 關閉看門狗
第二步 初始化icache;
第三步 初始化堆棧;
第四步 設置時鐘;
第五步 判斷啟動設備(nand/sd/onenand等),檢查校驗和,然后從啟動設備中拷貝前16K的代碼到IRAM的0xD0020000處;
第六步 若是安全模式啟動,則進行完整性檢查;
第七步 跳轉到IRAM的0xD0020010地址上繼續運行;

UART /USB啟動模式
OM[5:4] = 0b10即可選擇UART/USB啟動模式此時IROM代碼運行完畢后,會先嘗試從UART 啟動,若失敗則會嘗試從USB啟動。若失敗則會根據OM[3:0]選擇相應的啟動介質再次嘗試啟動。
UART啟動時,必須在S5PV210上電前將串口連接好,上位機使用dnw工具來發送啟動代碼可執行文件。本教材中使用USB啟動方式作為調試,因此不詳細探討UART啟動方式。
1、USB啟動方式必須借助dnw工具,教材中使用dnw v0.60c。
2、打開dnw軟件,將dnw中USB下載地址設置為0xd0020010。
3、復位開發板
4、若是初次使用則Windows會彈出發現新硬件圖標,索引安裝開發板dnw USB驅動即可。若已經安裝驅動,則dnw會顯示USB:OK,表示USB連接已經成功。
5、dnw菜單中USB Port->Transmit,選擇編譯好的bin文件即可。USB download完成后S5PV210會即刻跳轉到0xd0020010處執行。

1、// 關閉看門狗
ldr    r0, =0xE2700000
mov    r1, #0
str    r1, [r0]

2、控制icache
// 打開icache可提高運行速度
#ifdef CONFIG_SYS_ICACHE_OFF
// clear bit 12 (I) I-cache 
    bic     r0, r0, #0x00001000
#else 
// set bit 12 (I) I-cache  
    orr     r0, r0, #0x00001000
#endif
    mcr     p15, 0, r0, c1, c0, 0

3、//設置棧
棧的整體作用
1) 保存現場;
2) 傳遞參數:匯編代碼調用C函數時,需傳遞參數;
3) 保存臨時變量:包括函數的非靜態局部變量以及編譯器自動生成的其他臨時變量;

4、重定位代碼到IRAM+0x4000
重定位:對于程序而言,我們需要理解兩個概念,一是程序當前所處的地址,即程序在運行時,所處的當前地址;二是程序的鏈接地址,即程序運行時應該位于的運行地址。編譯程序時,可以指定程序的鏈接地址。
對于S5PV210而言,啟動時只會從NAND Flash/sd等啟動設備中拷貝前16K的代碼到IRAM中,那么當我們的程序超過16K怎么辦?那就需要我們在前16K的代碼中將整個程序完完整整地拷貝到DRAM等其他更大存儲空間,然后再跳轉到DRAM中繼續運行我們的代碼,這個拷貝然后跳轉的過程就叫重定位。本章中我們主要學習如何重定位,但是并不會涉如何使用到DRAM,而是簡單地將代碼從IRAM的0xD0020010處拷貝到IRAM的0xD0024000處,然后跳轉到0xD0024000處繼續運行我們的代碼。
鏈接腳本:鏈接腳本就是程序鏈接時的參考文件,其主要目的是描述如何把輸入文件中的段(SECTION)映射到輸出文件中,并控制輸出文件的存儲布局。鏈接腳本的基本命令式SECTIONS命令,一個SECTIONS命令內部包含一個或多個段,段(SECTION)是鏈接腳本的基本單元,它表示輸入文件中的某個段是如何放置的。
鏈接腳本的標準格式如下:
SECTIONS
{
     sections-command
     sections-command
}
/*link.lds*/
SECTIONS
{
    . = 0xD0024000;
    .text : {
        start.o
        * (.text)
    }   
    .data : {
        * (.data)
    }
    bss_start = .;
    .bss : {
        * (.bss)
    }
    bss_end  = .;   
}
1) 在鏈接腳本中,單獨的點號(.)代表了當前位置,. = 0xD0024000; 表示程序的鏈接地址是0xD0024000;
2) link.lds中的.text 、 .data 、 .bss分別是text段、data段、bss段的段名(這些段名并不是固定的,是可以隨便起的)。.text段包含的內容是start.o和其余代碼中所有的text段;.data段包含的內容是代碼中所有的data段;.bss段包含的內容是代碼中所有的bss段。
3) bss_start和bss_end保存的是bss段的起始地址和結束地址,在start.S中會被用到。

data、text、bss段:
1) data段:數據段(datasegment)通常是指用來存放程序中已初始化的全局變量的一塊內存區域。數據段屬于靜態內存分配。
2) text段:代碼段通常是指用來存放程序執行代碼的一塊內存區域。這部分區域的大小在程序運行前就已經確定,并且內存區域通常屬于只讀,某些架構也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數變量,例如字符串常量等。
3) bss段:指用來存放程序中未初始化的全局變量的一塊內存區域。BSS是英文BlockStarted by Symbol的簡稱。當我們的程序有全局變量是,它是放在bss段的,由于全局變量默認初始值都是0,所有我們需要手動清bss段。
/*start.S*/
.global _start
_start: 
    // 關閉看門狗  
    ldr    r0, =0xE2700000              
    mov    r1, #0  
    str    r1, [r0]  
    // 設置棧,以便調用c函數  
    ldr    sp, =0xD0037D80   
    // 重定位                           
    // _start當前所位于的地址:0xd0022000  
    adr r0, _start            
    // _start的鏈接地址:0xd0024000 
    ldr r1, =_start      
    // bss段的起始地址 
    ldr r2, =bss_start  
    cmp r0, r1
    beq clean_bss
copy_loop:  
    ldr r3, [r0], #4    // 源  
    str r3, [r1], #4    // 目的  
    cmp r1, r2  
    bne copy_loop  
// 清bss段
clean_bss:   
    ldr r0, =bss_start                      
    ldr r1, =bss_end  
    cmp r0, r1  
    beq run_on_dram  
    mov r2, #0
    clear_loop:  
    str r2, [r0], #4  
    cmp r0, r1  
    bne clear_loop 
// 跳轉
run_on_dram:               
    ldr pc, =main

/*main.c*/
#define     GPJ2CON     (*(volatile unsigned long *) 0xE0200280)
#define     GPJ2DAT        (*(volatile unsigned long *) 0xE0200284)
// 延時函數
void delay(unsigned long count)
{
    volatile unsigned long i = count;
    while (i--);       
}
void main()               
//LED 閃爍
{
    GPJ2CON = 0x00001111;
    // 配置引腳
    while(1)                   
    // 閃爍
    {
        GPJ2DAT = 0;
        // LED on
        delay(0x100000);
        GPJ2DAT = 0xf;
        // LED off
        delay(0x100000);
    }
}

 

5、重定位代碼到DRAM
DRAM0對應的地址是0x2000_0000~0x3FFF_FFF共512M,DRAM1對應的地址是0x4000_000~0x7FFF_FFFF共1G。


關鍵字:S5PV210  啟動過程  IRAM 引用地址:S5PV210的啟動過程

上一篇:S5PV210點亮LED
下一篇:S5PV210控制蜂鳴器

推薦閱讀最新更新時間:2025-04-19 06:14

專家揭秘:STM32啟動過程全解
本文主要闡述了STM32啟動過程全面解析,包括啟動過程的介紹、啟動代碼的陳列以及深入解析。   相對于ARM上一代的主流ARM7/ARM9內核架構,新一代Cortex內核架構的啟動方式有了比較大的變化。ARM7/ARM9內核的控制器在復位后,CPU會從存儲空間的絕對地址0x000000取出第一條指令執行復位中斷服務程序的方式啟動,即固定了復位后的起始地址為0x000000(PC = 0x000000)同時中斷向量表的位置并不是固定的。而Cortex-M3內核則正好相反,有3種情況:   1、 通過boot引腳設置可以將中斷向量表定位于SRAM區,即起始地址為0x2000000,同時復位后PC指針位于0x2000000處
[單片機]
專家揭秘:STM32<font color='red'>啟動</font><font color='red'>過程</font>全解
S5PV210的開發與學習:2.2 UBOOT學習筆記(零距離初體驗uboot)
《2.uboot和系統移植-第3部分-2.3.零距離初體驗uboot》 -------------------------------------------------------- 歡迎訪問《朱老師物聯網大講堂》官方網站 www.zhulaoshi.org 以獲取本課程更多信息 -------------------------------------------------------- 第一部分、章節目錄 2.3.1_2.X210官方uboot配置編譯實踐 2.3.3.uboot的源碼目錄分析1 2.3.4.uboot的源碼目錄分析2 2.3.5.uboot的源碼目錄分析3 2.3.6.SourceInsight的基本使用
[單片機]
u-boot1.3.4向S5PV210移植
一、串口無輸出 ??按源碼編譯后,串口無輸出。開發板供電鎖存成功。 ??進入start.S中查看,發現多了PMIC_InitIp,即電源管理模塊初始化。屏蔽后發現串口可以輸出。 二、DDR配置信息修改 ??從啟動打印信息,以及bdinfo命令中可以看到SDRAM的設置錯誤。 ??使用md和mw命令測試內存,發現20000000和40000000開頭的內存都是可以用的,說明代碼中DDR初始化部分是正確的,只是size錯了。 ??改用如下配置 #define MEMORY_BASE_ADDRESS 0x30000000 #define CONFIG_NR_DRAM_BANKS 2 /* we have 2 ban
[單片機]
分析S5PV210 wince的bootimage.nb0 是如何生成的
左看右看,也沒找到bootimage.nb0生成的地方,只是在sources 里面有一個 WINCETARGETFILES=BootImage 我以為找到了線索,可是當我發現2440 wince5.0 BSP也有WINCETARGETFILES=BootImage 這個的時候我暈了,因為在2440 的工程里面找不到Bootimage.nb0這個文件的,為了確認,我重新編譯了2440 BSP也是沒有,后來發現原來生成這玩意是在makefile.inc 里面的 BootImage: !IF $(NOLINK) == romimage eboot.bib copy /b $(_PLATFORMROOT)$(_TGTPLA
[單片機]
S5pv210 HDMI 接口在 Linux 3.0.8 驅動框架解析
本文主要簡述S5pv210處理器的 HDMI 接口在 Linux 3.0.8 內核下的驅動框架。 現在三星的主流處理器基本都支持HDMI,使用HDMI也有段時間了,卻一直不知道它是怎么工作的,只知道linux和android下都會有一個HDMI-service的用戶服務程序。然后底層會有HDMI驅動。知道HDMI 和framebuffer有點關系,卻不知道兩者是如何聯系在一起的。從知道HDMI以來就覺得它神秘,出于好奇,決定揭開它的面紗一探真容。按照我的思路從下面四個方面并依照源碼簡單剖析一下Samsung S5pv210 處理器HDMI 在linux3.0.8下的驅動框架。 ? 1.1 何為HDMI,HDMI總線協議
[單片機]
<font color='red'>S5pv210</font> HDMI 接口在 Linux 3.0.8 驅動框架解析
S5PV210 時鐘
CLOCK DOMAINS 時鐘域 S5PV210 consists of three clock domains, namely, main system (MSYS), display system (DSYS), and peripheral system (PSYS) 時鐘源 外部焊接: 1.XRTCXTI:實時時鐘 2.XXTI:CPU時鐘 3.XUSBXTI:USB時鐘 4.XHDMIXTI:HDMI時鐘 CMU典型應用: 1.MSYS clock domain uses APLL (that is, ARMCLK, HCLK_MSYS, and PCLK_MSYS) 2.DSYS and PSYS cl
[單片機]
<font color='red'>S5PV210</font> 時鐘
S5PV210 PWM
定時器PWM輸出 原理圖 GPD0CON, R/W, Address = 0xE020_00A0 CON, R/W, Address = 0xE250_0008 相關文章:http://blog.csdn.net/zhangxuechao_/article/details/77841192 舉例 #define TCFG0 (*(unsigned int*)0xE2500000) #define TCFG1 (*(unsigned int*)0xE2500004) #define CON (*(unsigned int*)0xE2500008) #define TCNTB1 (*(unsigned int*)0xE2500
[單片機]
<font color='red'>S5PV210</font> PWM
ARM芯片開發學習(S5PV210)——icache、dcache介紹和如何開關icache
什么是icache、dcache cache是高速緩沖存儲器,icache(instructions cache)是指令高速緩沖存儲器,dcache(data cache)是數據高速緩沖存儲器。存儲介質的基本規律是讀寫速度越快單位存儲容量的價格就越高,為了平衡存儲速度和價格,計算機的采用分級的存儲系統,按照讀寫速度由快到慢:CPU- 寄存器- cache- 內存- 外存。其中寄存器是在集成到Soc內部的,直接和CPU交互數據,數量有限;在性能高一些的計算機中,cache是可以采用多級的;內存一般是RAM,外存可以是磁盤、flash等。其中icache和dcache就是屬于cache,icache用于緩存指令,dcache用于緩存數
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 浮梁县| 兴国县| 光泽县| 社旗县| 静乐县| 商洛市| 黄石市| 通州区| 新泰市| 同仁县| 黄梅县| 新巴尔虎右旗| 根河市| 平远县| 专栏| 金溪县| 民乐县| 扎兰屯市| 凤庆县| 鞍山市| 南城县| 峡江县| 犍为县| 会宁县| 土默特右旗| 二手房| 叶城县| 唐海县| 通辽市| 灵寿县| 青浦区| 苍溪县| 左贡县| 福海县| 高雄县| 晋州市| 西贡区| 宽城| 仁布县| 浦北县| 长白|