1. 程式人生 > >Bootloader系列(二)vivi bootloader解析

Bootloader系列(二)vivi bootloader解析


    在地址0x0的地方存放著如下程式碼:
@ 0x00: Reset
bReset
    這句會跳轉到Reset的地方執行,順序如下:
    1. 關閉watchdog
@ disable watch dog timer
movr1, #0x53000000
movr2, #0x0
strr2, [r1]


    2. 禁用中斷
@ disable all interrupts
movr1, #INT_CTL_BASE
movr2, #0xffffffff
strr2, [r1, #oINTMSK]
ldrr2, =0x7ff
strr2, [r1, #oINTSUBMSK]


    3. 初始化系統時鐘
@ initialise system clocks
movr1, #CLK_CTL_BASE
mvnr2, #0xff000000
strr2, [r1, #oLOCKTIME]


@ldrr2, mpll_50mhz
@strr2, [r1, #oMPLLCON]
#ifndef CONFIG_S3C2410_MPORT1
@ 1:2:4
movr1, #CLK_CTL_BASE
movr2, #0x3
strr2, [r1, #oCLKDIVN]


mrcp15, 0, r1, c1, c0,
[email protected]
read ctrl register 
orrr1, r1, #[email protected] Asynchronous  
mcrp15, 0, r1, c1, c0, [email protected] write ctrl register


@ now, CPU clock is 200 Mhz
movr1, #CLK_CTL_BASE
ldrr2, mpll_200mhz
strr2, [r1, #oMPLLCON]
#else
@ 1:2:2
    mov r1, #CLK_CTL_BASE
    ldr r2, clock_clkdivn
    str r2, [r1, #oCLKDIVN]


    mrc p15, 0, r1, c1, c0, 0       @ read ctrl register
    orr r1, r1, #0xc0000000     @ Asynchronous
    mcr p15, 0, r1, c1, c0, 0       @ write ctrl register


    @ now, CPU clock is 100 Mhz
    mov r1, #CLK_CTL_BASE
    ldr r2, mpll_100mhz
    str r2, [r1, #oMPLLCON]
#endif
blmemsetup
        請注意,最後一句是跳轉語句,跳轉到記憶體初始化的地方,同時把下一句的地址儲存到R14,當記憶體初始化結束後就可以用movpc, lr這句來返回。

    4. 記憶體控制器配置
ENTRY(memsetup)
@ initialise the static memory 

@ set memory control registers
movr1, #MEM_CTL_BASE
adrlr2, mem_cfg_val
addr3, r1, #52
1:ldr r4, [r2], #4
strr4, [r1], #4
cmpr1, r3
bne1b

movpc, lr

    5. 開啟LED
@ All LED on
movr1, #GPIO_CTL_BASE
addr1, r1, #oGPIO_F
ldrr2,=0x55aa
strr2, [r1, #oGPIO_CON]
movr2, #0xff
strr2, [r1, #oGPIO_UP]
movr2, #0x00
strr2, [r1, #oGPIO_DAT]

    6. UART初始化
@ set GPIO for UART
movr1, #GPIO_CTL_BASE
addr1, r1, #oGPIO_H
ldrr2, gpio_con_uart
strr2, [r1, #oGPIO_CON]
ldrr2, gpio_up_uart
strr2, [r1, #oGPIO_UP]
blInitUART         -------------- 同樣是跳轉到InitUART

相關推薦

Bootloader系列vivi bootloader解析

    在地址0x0的地方存放著如下程式碼: @ 0x00: ResetbReset     這句會跳轉到Reset的地方執行,順序如下:     1. 關閉watchdog@ disable watch dog timermovr1, #0x53000000movr2, #0x0strr2, [r1]  

Java原始碼解析系列ArrayList原始碼解析

備註:以下都是基於JDK8 原始碼分析 ArrayList簡介        ArrayList 是一個數組佇列,相當於 動態陣列。與Java中的陣列相比,它的容量能動態增長。它繼承於AbstractList,實現了List, RandomAccess, Clonea

SpringBoot系列啟動原理解析

要想了解開一輛車首先你要知道,這輛車的駕駛座在哪,以及它是如何啟動的。接下來我們就一起了解一下SpringBoot的啟動原理,之前說過這是SpringBoot入口那麼下面來看幾個註解------ @SpringBootApplication 我們不難發現@SpringBoot

faster rcnn pytorch 復現系列:generate_anchors原始碼解析

目錄​ 1. 總函式 generate_anchors 2. 函式分功能寫,首先是ratios的實現,其次是scale的實現 3. anchor2WHXY函式+WsHsXsYs2anchors函式[s表示複數] 4.  _ratio_enum(anchor,r

Fragment全解析系列:正確的使用姿勢

Fragment是可以讓你的app縱享絲滑的設計,如果你的app想在現在基礎上效能大幅度提高,並且佔用記憶體降低,同樣的介面Activity佔用記憶體比Fragment要多,響應速度Fragment比Activty在中低端手機上快了很多,甚至能達到好幾倍!如果你的app當前或以後有移植平板等平臺時,

Spring Boot乾貨系列配置檔案解析

Spring Boot使用“習慣優於配置”(專案中存在大量的配置,此外還內建了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的專案快速執行起來。所以,我們要想把Spring Boot玩的溜,就要懂得如何開啟各個功能模組的預設配置,這就需要了解Spring Boo

爬蟲系列——網頁解析Jsoup

     Jsoup是一款Java的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。  

SpringBoot基礎實戰系列springboot解析json與HttpMessageConverter

# SpringBoot解析Json格式資料 ### @ResponseBody 注:該註解表示前端請求後端controller,後端響應請求返回 `json` 格式資料前端,實質就是將java物件序列化 #### 1.建立Controller 注:springboot預設就已經支援返回`json`格式資料,

雪飲者 決策樹系列決策樹應用

ssi 字符串長度 mes pla 選擇 font com vector nac   本篇以信息增益最大作為最優化策略來詳細介紹決策樹的決策流程。   首先給定數據集,見下圖    註:本數據來源於網絡 本篇將以這些數據作為訓練數據(雖然少,但足以介紹清楚原理!),下圖是決

數據結構系列算法

nal log 如何 空間復雜度 計算 youdao 最好 時間 bsp 高斯求和 計算1+2+...+100 算法的概念就不多說了 強調一點就是,沒有通用的算法,就像永遠沒有銀彈,所有的算法都有自己的適用領域 評判算法好壞的方法 復雜度用大O表示,又分為時間復雜度

【原創】源碼角度分析Android的消息機制系列——ThreadLocal的工作過程

機制 simple hand 這就是 數據存儲 read etc lena 並且 ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 在上一篇文章中,我們已經提到了ThreadLocal,它並非線程,而是在線程中存儲數據用的。數據存儲以後,只能在指定的線程中獲取到數據

MySQL系列

sql read 註意 出現 back 總結 lba 區別 不同 MySql 事務 目錄 MySQL系列(一):基礎知識大總結 MySQL系列(二):MySQL事務 MySQL系列(三):索引 什麽是事務(transaction) 保證成批操作要麽完全執行,要麽完全不

Linux系統運維常見面試簡答題系列14題

local 企業 nginx服務 簡答題 ip協議 php out gin 報錯 1. /var/log/messages日誌出現kernel:nf_conntrack:tablefull,dropping packet,請問是什麽原因導致的,如何解決? 此報錯為iptab

Linux VPS/服務器建站系列- 常見的國內雲服務器商家

數據中心 log 中心 相互 網站 能說 之前 體積 選擇 繼續接"Linux VPS/服務器建站系列(一)- 哪些人需要用服務器建站"文章,既然我們開始決定選擇VPS、服務器作為項目用途。在準備實際的操作之前,筆者先準備羅列國內和國外的常見雲服務器商家。因為服務器商家和方

SpringMVC系列: 註解@RequestMapping、@PathVariable

ann handler -- back 聯合 ppi 根目錄 處理方法 ati 一、@RequestMapping 1.@RequestMapping除了能修飾方法,還能修飾類(1)修飾類:提供初步的請求映射信息,相對於web請求的根目錄(2)修飾方法:提供進一步的細分映射

Docker系列鏡像管理

nginx orm lda cast anaconda rip search fff spa 2.1 查看鏡像 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docke

JDBC詳解系列之加載驅動

red mar mys ons try path 替換 host man ---[來自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- ??在JDBC詳解系列(一)之流程中

詳解YUV系列--YUV422

proc 衍生 watermark term fff 本質 image 描述 采樣 hi,各位小夥伴,小編又來了嘍,今天該給大家分享一下YUV422嘍,還是老規矩,老套路哦: 一、文字描述采樣格式:YUV422的采樣格式,簡單理解就是一個2*2的像素塊中,對於4個像素點,采

容器開啟數據服務之旅系列:Kubernetes如何助力Spark大數據分析

容器 控制臺 摘要: 容器開啟數據服務之旅系列(二):Kubernetes如何助力Spark大數據分析 (二):Kubernetes如何助力Spark大數據分析 概述 本文為大家介紹一種容器化的數據服務Spark + OSS on ACK,允許Spark分布式計算節點對阿裏雲OSS對象存儲的直接訪問。

FuelPHP 系列 ------ route 路由

ray align 文件中 數字 eve 區分 creat 內容 ont FuelPHP 中,默認可以通過 /controller_name/function_name 這種方式來訪問,也可以通過自定義路由來訪問。 路由配置在 /fuel/app/config/rout