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

歷史上的今天

今天是:2025年07月22日(星期二)

2018年07月22日 | S3C2440 跳到 SDRAM 中執(zhí)行程序

發(fā)布者:科技獨行者 來源: eefocus關(guān)鍵字:S3C2440  SDRAM  執(zhí)行程序 手機看文章 掃描二維碼
隨時隨地手機看文章

從Nandflash啟動CPU時,CPU會通過內(nèi)部的硬件將Nandflash開始的4KB數(shù)據(jù)復(fù)制到為Steppingstone的4Kb的內(nèi)部RAM中(起始地址為0)


然后跳到0地址開始執(zhí)行.


我們這個例子是先使用匯編語言設(shè)置好存儲控制器,使我們外接的SDRAM可用,然后把程序本身從Steppingstone復(fù)制到SDRAM處,


最后跳到SDRAM中執(zhí)行.


程序的什么關(guān)看門狗,設(shè)置存儲控制器,復(fù)制代碼到SDRAM中都比較簡單,


程序跳入到C程序之前要設(shè)置棧供C程序使用?。?!


ldr sp, =0x34000000                 @ 設(shè)置堆棧

棧設(shè)置在頂部,自上而下.



寫這篇記錄博客的原因最重要的是:


ldr pc, =on_sdram                   @ 跳到SDRAM中繼續(xù)執(zhí)行

這句,這個得弄明白,說實話,我對這個跳轉(zhuǎn)有時候很清楚,有時候又感到模糊.

首先:


Makefile中的文件,

連接地址為0x30000000,是指運行時程序應(yīng)該位于的地址.即是我們SDRAM的起始地址.


反匯編中我們可以看到:


ldr pc, =on_sdram                   @ 跳到SDRAM中繼續(xù)執(zhí)行

就相當(dāng)于一個取地址指令,

當(dāng)前該指令地址的PC=當(dāng)前該指令地址 + 8;

即是PC = 0x0c +8 ;


就是到0xA4的地址,也就是0x300000A4;




所以:



程序跳到SDRAM的0x30000010; 即是:




對應(yīng)上了跳到on_sdram,

對應(yīng)上程序執(zhí)行的圖示:注意PC的所指位置:


1.



2.



3.



4.


程序在SDRAM中執(zhí)行感覺慢是因為SDRAM的性能比內(nèi)部SRAM差一些.

這樣拷貝小于4KB的程序到SDRAM中運行,感覺多此一舉,

但是我們程序要是大于4KB的話,這個就是不可避免要采用的方法,

但是要復(fù)制Nandflash4KB后面的代碼需要使用Nandflash控制器來讀取Nandflash.

匯編代碼具體如下,我貼了出來:


@*************************************************************************

@ File:head.S

@ 功能:設(shè)置SDRAM,將程序復(fù)制到SDRAM,然后跳到SDRAM繼續(xù)執(zhí)行

@*************************************************************************       

 

.equ        MEM_CTL_BASE,       0x48000000

.equ        SDRAM_BASE,         0x30000000

 

.text

.global _start

_start:

    bl  disable_watch_dog               @ 關(guān)閉WATCHDOG,否則CPU會不斷重啟

    bl  memsetup                        @ 設(shè)置存儲控制器

    bl  copy_steppingstone_to_sdram     @ 復(fù)制代碼到SDRAM中

    ldr pc, =on_sdram                   @ 跳到SDRAM中繼續(xù)執(zhí)行

on_sdram:

    ldr sp, =0x34000000                 @ 設(shè)置堆棧

    bl  main

halt_loop:

    b   halt_loop

 

disable_watch_dog:

    @ 往WATCHDOG寄存器寫0即可

    mov r1,     #0x53000000

    mov r2,     #0x0

    str r2,     [r1]

    mov pc,     lr      @ 返回

 

copy_steppingstone_to_sdram:

    @ 將Steppingstone的4K數(shù)據(jù)全部復(fù)制到SDRAM中去

    @ Steppingstone起始地址為0x00000000,SDRAM中起始地址為0x30000000

    

    mov r1, #0

    ldr r2, =SDRAM_BASE

    mov r3, #4*1024

1:  

    ldr r4, [r1],#4     @ 從Steppingstone讀取4字節(jié)的數(shù)據(jù),并讓源地址加4

    str r4, [r2],#4     @ 將此4字節(jié)的數(shù)據(jù)復(fù)制到SDRAM中,并讓目地地址加4

    cmp r1, r3          @ 判斷是否完成:源地址等于Steppingstone的未地址?

    bne 1b              @ 若沒有復(fù)制完,繼續(xù)

    mov pc,     lr      @ 返回

 

memsetup:

    @ 設(shè)置存儲控制器以便使用SDRAM等外設(shè)

 

    mov r1,     #MEM_CTL_BASE       @ 存儲控制器的13個寄存器的開始地址

    adrl    r2, mem_cfg_val         @ 這13個值的起始存儲地址

    add r3,     r1, #52             @ 13*4 = 54

1:  

    ldr r4,     [r2], #4            @ 讀取設(shè)置值,并讓r2加4

    str r4,     [r1], #4            @ 將此值寫入寄存器,并讓r1加4

    cmp r1,     r3                  @ 判斷是否設(shè)置完所有13個寄存器

    bne 1b                          @ 若沒有寫成,繼續(xù)

    mov pc,     lr                  @ 返回

 

 

.align 4

mem_cfg_val:

    @ 存儲控制器13個寄存器的設(shè)置值

    .long   0x22011110      @ BWSCON

    .long   0x00000700      @ BANKCON0

    .long   0x00000700      @ BANKCON1

    .long   0x00000700      @ BANKCON2

    .long   0x00000700      @ BANKCON3  

    .long   0x00000700      @ BANKCON4

    .long   0x00000700      @ BANKCON5

    .long   0x00018005      @ BANKCON6

    .long   0x00018005      @ BANKCON7

    .long   0x008C07A3      @ REFRESH

    .long   0x000000B1      @ BANKSIZE

    .long   0x00000030      @ MRSRB6

    .long   0x00000030      @ MRSRB7


關(guān)鍵字:S3C2440  SDRAM  執(zhí)行程序 引用地址:S3C2440 跳到 SDRAM 中執(zhí)行程序

上一篇:存儲控制器與外設(shè)之間的關(guān)系
下一篇:S3C2440 nand sdram啟動時代碼的運行轉(zhuǎn)移過程

推薦閱讀

第001節(jié)段的概念重定位的引入S3C2440的CPU可以直接給SDRAM發(fā)送命令、給Nor Flash發(fā)送命令、給4K的片上SDRAM發(fā)送命令,但是不能直接給Nand Flsh發(fā)送命令假如把程序燒寫到Nand Flsh上,即向Nand Flsh燒入* bin* 文件,CPU是無法從Nand Flsh中取代碼執(zhí)行的。為什還可以使用NAND啟動?上電后,Nand啟動硬件會自動把Nand Flsh前4K復(fù)制到SRAM;CPU從0地址...
STM32F407ZG(參考正點原子)串口配置一. 串口操作相關(guān)庫函數(shù)(省略入口參數(shù))void USART_Init(); //串口初始化:波特率,數(shù)據(jù)字長,奇偶校驗,硬件流控以及收發(fā)使能void USART_Cmd();//使能串口void USART_ITConfig();//使能相關(guān)中斷void USART_SendData();//發(fā)送數(shù)據(jù)到串口,DRuint16_t USART_ReceiveData();//接受數(shù)據(jù),從DR讀取接受到的數(shù)據(jù)F...
專注于引入新品并提供海量庫存的電子元器件分銷商貿(mào)澤電子 (Mouser Electronics) 自豪地宣布連續(xù)第二年榮獲其重要合作伙伴Amphenol Corporation頒發(fā)的卓越電子商務(wù)類大獎 ,用以表彰貿(mào)澤在2019年突出的銷售業(yè)績增長。Amphenol Corporation是互連行業(yè)的全球知名企業(yè),貿(mào)澤庫存有Amphenol及其32個產(chǎn)品部門的全系列產(chǎn)品,可在貿(mào)澤官網(wǎng)Mouser.cn上輕松訂購...
本篇詳細(xì)的記錄了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外設(shè),讀取SHT30溫濕度傳感器的數(shù)據(jù)并通過串口發(fā)送。1. 準(zhǔn)備工作硬件準(zhǔn)備開發(fā)板首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是STM32L4的開發(fā)板(BearPi):SHT30溫濕度傳感器SHT30溫濕度傳感器是一個完全校準(zhǔn)的、現(xiàn)行的、帶有溫度補償?shù)臄?shù)字輸出型傳感器,具有 2.4V-5.5V 的寬電壓支持,使用II...

史海拾趣

問答坊 | AI 解惑

想要課件。。謝謝

老師把I2C總線串行擴展技術(shù)的課件,我看看,還有程序。。。。。謝謝…

查看全部問答∨

電子大賽D題請進

本帖最后由 paulhyde 于 2014-9-15 09:08 編輯 39914530  …

查看全部問答∨

用鐵通網(wǎng)和大局域網(wǎng)做遠(yuǎn)程監(jiān)控的親身經(jīng)歷

轉(zhuǎn)自:中安網(wǎng) 論壇 深圳小姚 以上兩個圖的IP地址(121.34.95.55)分別從路由器上和IP138.com得到,如一至說明你本地的IP地址是公網(wǎng)IP地址,是可以做端口應(yīng)射和域名綁定的,大家可以試一下,很簡單。 關(guān)于用鐵通網(wǎng)和大局域網(wǎng)做遠(yuǎn)程監(jiān)控的經(jīng) ...…

查看全部問答∨

請教PXA3XX GPIO中斷的一個問題

新接觸PXA303 CPU,在使用中發(fā)現(xiàn)GPIO1中斷檢測不到, 1. 通過配置GPIO1輸出方波,示波器可以檢測到,說明硬件連接應(yīng)該沒有問題,但是配置為輸入則檢測不到高低電平 2. 配置別的GPIO,可以檢測到中斷,會運行相應(yīng)的中斷處理函數(shù),只有配置GPIO1時檢測不 ...…

查看全部問答∨

arm 匯編問題

MACRO     MTC15   $cpureg, $cp15reg     mcr p15, 0, $cpureg, $cp15reg, c0, 0     MEND 這段匯編什么意思? MTC15 是干什么的?…

查看全部問答∨

SMU的程序存儲器和測試序列發(fā)生器如何加速測試進程?

Andrew Armutat 產(chǎn)品市場部 吉時利儀器公司  2601型單通道系統(tǒng)源表[1]           2602型雙通道系統(tǒng)源表[2]   作為SMU的程序存儲器和測試序列發(fā)生器如何加速測試進程的例子 ...…

查看全部問答∨

求基于TMS320F2812的圖形點陣液晶屏及鍵盤控制的原理圖 pcb 軟件流程及代碼

求基于TMS320F2812的圖形點陣液晶屏及鍵盤控制的原理圖 pcb 軟件流程及代碼 用DSP控制液晶屏和鍵盤,模擬簡單功能示波器界面。能顯示波形、電壓值、頻率;能通過鍵盤調(diào)節(jié)顯示的波形,電壓幅值以及頻率。原理圖 pcb 軟件流程及代碼  郵箱 ...…

查看全部問答∨

關(guān)于C6RUN

我是一名在校大學(xué)生,我現(xiàn)在正在做畢業(yè)設(shè)計,題目是《TI DSP c6run 工具功能分析》。但是我現(xiàn)在遇到很大困難。我是按照TI wiki 上的方法裝的。是DVSDK下用C6RUN。按照步驟中有一個設(shè)置環(huán)境變量。我linux一點都不懂。完全不會設(shè)置。希望有達(dá)人能幫幫 ...…

查看全部問答∨
小廣播
設(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