一:
ads.12
的工程建立與配置
① 新建工程型別為 arm excuteable image。用於由 arm 指令的**生成乙個 elf 格式的可以執行映象檔案。
② 再把lib與inc資料夾拷貝到所建工程的資料夾中,inc資料夾中包含了很多.h檔案,其中.c檔案在lib中。(後面將對這些檔案的作用與含義進行分析)。
③ 把需要用到的函式所在的.c檔案新增到工程中,在簡單的現在預設工程中我們要新增這三個檔案,
2440init.s(是對板子的啟動初始化,有記憶體配置,中斷初始化,棧空間的分配,中斷時入棧與出棧的方式暫存器的儲存——這部分與具體的板子晶元都十分相關也是系統移植時需要關注的),並且要注意在初始化時跳入c語言的入口點bl main (在後面自己寫函式時,一定要寫為main不要寫成main,不然將找不到入口)。
2440lib.c檔案(裡面包含了對晶元的常規初始化,主要是io的初始化與時鐘頻率初始化要使用到的函式,有時候會有uart需要的一些函式,但是沒有的時候可以自己在內部加入,因此自己要寫一些十分基本和常用的函式時,可以把這些函式寫入到這個.c檔案中,但是是針對某個特殊晶元的的函式,eg:nand flash,iis,iic等的操作,最好要在另外建立他的.c檔案,這樣檔案結構會更加清楚)
2440slib.s檔案主要是對cp15這個協處理的配置(記憶體管理器),配置結束後使記憶體,cache,cpu協調工作,最開始也對lcd的一些記憶體區進行了分配等。
④ 建立自己的主函式檔案。(檔案名字可以是main.c但是裡面的函式一定是main)
⑤ 寫好自己的主函式後,再進行debug setting,主要設定的有五項:
target settings,其中有 target name (當前目標設定)linker(預設,是表示使用什麼聯結器),post-linker是鏈結後生成什麼檔案,設定為arm from elf(exe load flash)。
arm assembler 與arm c compiler 都把晶元型號配置為arm920t(即你開發板的型號),
arm linker
其中下面編譯的內容中可以去掉-map –list list.txt對程式執行沒影響,只是出現一些提示資訊。
arm from elf 中設定輸出檔案的名字。到此乙個完整的工程與配置都已經完成。
二、對乙個最簡單工程中的標頭檔案與一些函式作用的分析。
在main.c中一般要包含一下幾個標頭檔案
(def.h) 定義了一些資料型別,eg:#define u8 char 。目的是增強可移植性。
(option.h) ram,中斷,棧的基位址定義,與系統時鐘的定義
(2440addr.h) 定義了各種暫存器的位址。
(2440lib.h) 申明了2440lib.c中使用的函式,與其中用到的巨集定義。
(2440slib.h) 申明了2440slib.s中使用到的函式。
函式 port_init()中就是對a-j的埠進行了一般的初始化。要修改時可以對照著使用者手冊進行對應的修改。
下面還包括了四個與系統時鐘有關的函式,
[html]view plain
copy
<
span
style
="font-size:18px;"
>
void changempllvalue(int mdiv, int pdiv, int sdiv) //對mpll這個鎖相環進行配置
span
>
[html]view plain
copy
<
span
style
="font-size:18px;"
>
void changeclockdivider(int hdivn_val, int pdivn_val),
switch(pdivn_val)
rclkdivn
= (hdivn
<
<
1) | pdivn;
switch(hdivn_val)
if(hdivn!=0)
mmu_setasyncbusmode();
else
mmu_setfastbusmode();
} span
>
[html]view plain
copy
<
span
style
="font-size:18px;"
>
void changeupllvalue(int mdiv, int pdiv, int sdiv) //對upll這個鎖相環的配置
span
>
[html]view plain
copy
<
span
style
="font-size:18px;"
>
static void cal_cpu_bus_clk(void)
if(p)
pclk
= hclk
>
>
1;
else
pclk
= hclk
; if(s&0x10) //取divn_upll的值,0:fclk
= mpll
clock 1:
fclk
= hclk
cpu_freq
= hclk
; else
cpu_freq
= fclk
; val
= rupllcon
; //upll控制暫存器
m= (val
>
>
12)&0xff; //獲取mdiv
p= (val
>
>
4)&0x3f; //獲取pdiv s=
val&3; //獲取sdiv
upll
= ((m+8)*fin)/((p+2)*(1
<
<
s)); //計算出upll
uclk
= (rclkdivn&8)?(upll
>
>
1):upll; //控制uclk與upll的關係
} span
>
對這幾個函式使用方式:
[html]view plain
copy
<
span
style
="font-size:18px;"
>
//給出了能產生 200m,300m,400m,440m幾種頻率的演算法,設定好mpll_val與key
//再通過函式changempllvalue與changeclockdivider把他們傳遞進去
//最後再進行cal_cpu_bus_clk,()時鐘的最後確定 i=
2; //don't use 100m!
//boot_params.cpu_clk.val= 3
; switch ( i )
//init fclk
=400m
, so change mpll first
changempllvalue((mpll_val>
>
12)&0xff, (mpll_val
>
>
4)&0x3f, mpll_val&3);
changeclockdivider(key, 12);
cal_cpu_bus_clk();
span
>
解決ads1 2的破解問題
1.將crackads12.rar解壓後的license.dat檔案分別拷貝的安裝目錄如 c program files arm adsv1 2和c program files arm adsv1 2 licenses兩個目錄下 2.在c盤根目錄下建立flexlm目錄,並將1中的license.da...
基於ADS1 2下的ARM應用開發
1.巨集定義中volatile uint8 uint8等效於unsigned char,而volatile關鍵字主要作用是針對變數可能在編譯器控制之外被修改的情況,強制讓編譯器放棄對這個變數的優化。volatile 因為c編譯器的優化作用以及作業系統的cache等的影響,某些變數的值在記憶體中和暫存...
ADS 1 2在WIN7 64下的問題
如果你在win7 x64下安裝ads就會有,warning l6301w could not find file c program files error l6218 undefined symbol 好像庫都找不到了。問題就出在program files x86 那個括號上。ads是1997年的...