ADS1 2的工程建立與配置以及其中檔案的分析

2021-06-21 23:09:44 字數 3977 閱讀 6144

一:

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年的...