學習ARM開發 11

2021-04-13 21:45:23 字數 1704 閱讀 8210

學習arm開發(11)

昨天又是星期天,在家裡又可以對那塊開發板進行軟體研究了。

由於前幾次,把編譯好的uboot寫到flash老是執行不了。那麼怎麼辦呢?思考了很久,也檢視

了源程式,還是沒有發現問題。也許那個uboot的源程式太大,有很多的編譯開關,還有很多驅

動程式選擇,所以一頭霧水,不知怎麼辦好。到了這個時候,只有從頭開始跟蹤了。就是盡可

能地跟蹤程式執行到那裡。

因而依次地進行下面的檢查:

1. 檢查設定的倍頻是否對。

2. 檢查程式寫到flash的資料是否對。

3. 檢查設定ram是否對。

4. 檢查設定串列埠的波特率是否對。

一般進行四部份檢查就找出大體的問題。我首先查了一下,我的開發板上的晶振是10mhz輸入,

那麼我要倍頻到60mhz,所以就要計算它的倍頻係數。當然最快的辦法,就是用三星提供的

pllset.exe工具,五秒鐘就搞定了。經過檢查,發現我的倍頻係數不對,所以重新設定倍頻系

數。一般設定過倍頻系後,都要調整串列埠波特率、sdram的重新整理頻率。設定好倍頻係數後,接著

,就要計算串列埠的波特率,這個三星的s3c44b0的手冊有計算公式。比如9600,就是拿60mhz進

行分頻得到的。

這次設定好後這些東西之後,就把uboot編譯後,再寫到flash執行,還是不行。偶都在痛苦中

,為什麼還不行呢。後來我想想,把uboot的編譯位址改到0x00000000執行,就是在flash執行

,不拷貝到sdram中執行。結果是可以執行一段,串列埠有東西輸出來,我的設定的led也可以顯

示。蜂鳴器也不響。說明這個串列埠的設定已經對,那麼系統的倍頻也對了。但uboot的堆疊我沒

有改,所以只能跑到沒有使用到堆疊的**。

接著,我還需要改回到0x0c100000的基位址執行。經過用ads中的axd除錯,單步跟蹤。又是一

件痛苦的事情,發現axd只能單步跟蹤,設定斷點,或者其它除錯都不行,如果在後面設定了斷

點,選擇執行,發現到斷點,還停不下來的。

呵呵。。。。。。。除錯就是這樣的,不是樣樣都順手。既然只能單步執行,就老老實實地單

步除錯了,經過30多分鐘的單步執行,f8都已經按得手軟。最後才跟蹤到出錯的位址,發現內

存設定不對。主要是sdram的設定不對,檢視了載入位址的出錯了。發現了這個載入位址出錯,

偶也沒有更好的辦法解決之前,就只好把算好的值,依次地用ldr載入到r1-r13,共13個暫存器

裡。接著讓axd全速執行,程式就可執行了。原來出錯就是沒有把sdram的引數載入正確,讓我

除錯了三天。

通過乙個多小時的除錯,串列埠可以顯示了,uboot的很多命令也可執行了。但還沒有調通usb口

,也沒有網路介面。後面的工作,就是先調通網路介面。我的開發板用的網路晶元是rtl8019as

,這個我也沒有怎麼看過,得好好找點資料,了解了解這個ic,然後找乙份linux的rtl8019的

驅動程式出來看看,再決定怎麼樣調通rtl8019,由於rtl8019要用到中斷,就要先檢查s3c44b0

設定,否則到最後都沒有辦法除錯。

通過開發板的除錯,與skyeye相比,主要的區別是在sdram的頻率,串列埠的頻率,還有中斷的功

能,都有很大的不同。因此,在skyeye上能執行的,在開發板,就不一定可以執行,就是這個

原因。

學習ARM開發20 21

學習arm開發 20 os的任務切換 有了前面的tick中斷,那麼基本的任務切換條件已經是 萬事俱備,只欠東風 了。不過,這個 東風 也是很難搞得懂的,只有不斷地通過實踐才會找到合適的方法。現在我就需要去找這個東風了,就是解決不同的任務切換的問題。從簡單到複雜,這是任何事物的認識過程,也是行之有效的...

學習ARM開發 5

學習arm開發 5 蔡軍生 2005 07 16 寫於深圳 上一次說到要學習uboot的 但在看之前,首先要知道目標機器的程式設計資源,這裡的資源,是指s3c44b0所提供的執行程式的資源,對任何嵌入式軟體開發,都首先要對硬體有乙個很好的了解,這跟pc機的程式設計是大不一樣的。因為pc機都已經發展了...

學習ARM開發 9

學習arm開發 9 上一次把引導的彙編看完,已經準備c的執行環境,下面就開始學習c的源程式,從start.s檔案裡到跳檔案 lib arm board.c裡執行.引導程式從彙編start.s裡跳到這裡執行。蔡軍生 2005 07 19 void start armboot void 宣告乙個全域性指...