1. 程式人生 > >u-boot.2012.10——mini2440(二、啟動流程分析)

u-boot.2012.10——mini2440(二、啟動流程分析)

我們 分享 默認 從數據 中斷 改變 處理 mini2440 https

參考資料:https://blog.csdn.net/suiyuan19840208/article/details/7239949

1、第一階段功能

  * 硬件設備初始化

  * 加載u-boot第二段代碼到RAM空間

  * 設置好棧

  * 跳轉到第二段代碼入口

2、第二段代碼的功能

  * 初始化本階段使用的硬件設備

  * 檢測系統的內存映射

  * 將內核從Flash讀到RAM中

  * 為內核設置啟動參數

  * 調用內核

3 、u-boot第一階段代碼分析

我們在編譯完成之後,觀察頂層目錄有個u-boot.lds的鏈接腳本

* 經過編譯之後,查看文件u-boot.lds鏈接腳本,可以看到第一個鏈接文件是start.S

技術分享圖片

4、start.S

* 設置異常向量

當一個異常產生時,CPU根據異常號在異常向量表中找到對應的異常向量,然後執行異常向量處的跳轉指令,,CPU跳轉到對應的異常處理程序執行。

其中復位異常向量的指令“b start_code”決定了啟動後將自動跳轉到標號"start_code"處執行。

技術分享圖片

* CPU進入SVC模式

從數據手冊上可以看到10011就是設置為管理模式

技術分享圖片

技術分享圖片

* 設置控制寄存器的地址

技術分享圖片

* 關閉看門狗

技術分享圖片

* 屏蔽中斷

技術分享圖片

*設置時鐘

技術分享圖片

CPU上電幾毫秒後,晶振輸出穩定,FCLK=Fin(晶振頻率),CPU開始執行指令。但實際上,FCLK可以高於Fin,為了提高系統時鐘,需要用軟件來啟用PLL。這就需要設置CLKDIVN,MPLLCON,UPLLCON這3個寄存器。

CLKDIVN寄存器,CLKDIVN寄存器用於設置FCLK,HCLK,PCLK三者間的比例

技術分享圖片

設置CLKDIVN為5,就將HDIVN設置為二進制的10,由於CAMDIVN[9]沒有被改變過,取默認值0,因此HCLK = FCLK/4。

PDIVN被設置為1,因此PCLK= HCLK/2。因此分頻比FCLK:HCLK:PCLK = 1:4:8 。

FCLK提供給ARM920T的時鐘

HCLK 是提供給用於 ARM920T,存儲器控制器,中斷控制器,LCD 控制器,DMA 和 USB 主機模塊的 AHB總線的時鐘  

PCLK 是提供給用於外設如WDT,IIS,I2C,PWM 定時器,MMC/SD 接口,ADC,UART,GPIO,RTC 和SPI的 APB 總線的時鐘

FCLK與Fin的關系如下面公式:

技術分享圖片

MPLLCON寄存器用於設置FCLK與Fin的倍數。MPLLCON的位[19:12]稱為MDIV,位[9:4]稱為PDIV,位[1:0]稱為SDIV。

技術分享圖片

MPLLCON與UPLLCON的值可以根據參考:

技術分享圖片

MPLLCON=(0x7f<<12) | (0x02<<4) | (0x01) = 0x7f021

UPLLCON=(0x38<<12) | (0x02<<4) | (0x02) = 0x38022

u-boot.2012.10——mini2440(二、啟動流程分析)