新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 第一個裸奔程序——跑馬燈

第一個裸奔程序——跑馬燈

作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
經(jīng)過前段時間的準(zhǔn)備,現(xiàn)在終于開始正式寫ARM程序了。本著先易后難的原則,先寫無操作系統(tǒng)的ARM裸奔程序,以便熟悉s3c2440的內(nèi)部結(jié)構(gòu),此后再編寫有操作系統(tǒng)的程序。
第一個程序就從最最簡單的點亮開發(fā)板上的四個LED開始,使這四個并排擺放的LED從一端向另一端依次被點亮,從而呈現(xiàn)出跑馬燈的效果。四個LED連接到了B口的5到8引腳,輸出低電平時被點亮,下面就是程序代碼:

//定義三個寄存器
#define rGPBCON(*(volatile unsigned *)0x56000010)//Port B control
#define rGPBDAT(*(volatile unsigned *)0x56000014)//Port B data
#define rGPBUP(*(volatile unsigned *)0x56000018)//Pull-up control B

void delay(int);//延時函數(shù)

void Main(void)
{
int light;
int i;
rGPBCON = 0x015550;//定義PB5~PB8為輸出
rGPBUP= 0x7ff;//使PB上拉功能失效
light = 0x10;
light = light<<1;
rGPBDAT = ~light;//第一個LED被點亮
delay(500000);//延時一段時間
//主程序死循環(huán)
while(1)
{
//從一端向另一端
for (i=0;i<3;i++)
{
light = light<<1;
rGPBDAT = ~light;
delay(500000);
}
//返回
for (i=0;i<3;i++)
{
light = light>>1;
rGPBDAT = ~light;
delay(500000);
}
}
}
//延時函數(shù)
void delay(int a)
{
int k;
for(k=0;k;
}


程序很簡單,其中Main函數(shù)是在2440啟動代碼執(zhí)行完后開始被執(zhí)行。由于該程序沒有用到MMU_SetAsyncBusMode、MMU_SetFastBusMode和RdNF2SDRAM,所以為了正確編譯該程序,只需把啟動代碼中相關(guān)的地方注釋掉即可。

在這里,把ADS的相關(guān)配置介紹一下,這些內(nèi)容是比較重要的。下面是需要修改的內(nèi)容:
在Target Settings中的Post-linker中選擇ARM fromELF,因為我們需要把ELF文件格式轉(zhuǎn)化為下載到flash中所必須的二進制文件。
在Language Settings中的所有語言的Target下的Architecture or Processor,選擇ARM920T,因為s3c2440是ARM920T內(nèi)核。
在ARM Linker中的Output中的RO Base填寫0x30000000,因為在開發(fā)板上SDRAM是從0x30000000地址開始。在Layout中的Object/Symbol中填寫2440init.o,它是啟動文件的目標(biāo)文件,在Section中填寫Init,它是在啟動文件中我們所定義的入口代碼段的名稱。
在ARM fromELF中的Output format選擇Plain binary,并在Output file name中填寫任意以bin為后綴的輸出文件名。


關(guān)鍵詞: 裸奔程序跑馬

評論


技術(shù)專區(qū)

關(guān)閉