第一個(gè)裸奔程序——跑馬燈
第一個(gè)程序就從最最簡(jiǎn)單的點(diǎn)亮開(kāi)發(fā)板上的四個(gè)LED開(kāi)始,使這四個(gè)并排擺放的LED從一端向另一端依次被點(diǎn)亮,從而呈現(xiàn)出跑馬燈的效果。四個(gè)LED連接到了B口的5到8引腳,輸出低電平時(shí)被點(diǎn)亮,下面就是程序代碼:
//定義三個(gè)寄存器
#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í)函數(shù)
void Main(void)
{
int light;
int i;
rGPBCON = 0x015550;//定義PB5~PB8為輸出
rGPBUP= 0x7ff;//使PB上拉功能失效
light = 0x10;
light = light<<1;
rGPBDAT = ~light;//第一個(gè)LED被點(diǎn)亮
delay(500000);//延時(shí)一段時(shí)間
//主程序死循環(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í)函數(shù)
void delay(int a)
{
int k;
for(k=0;k;
}
程序很簡(jiǎn)單,其中Main函數(shù)是在2440啟動(dòng)代碼執(zhí)行完后開(kāi)始被執(zhí)行。由于該程序沒(méi)有用到MMU_SetAsyncBusMode、MMU_SetFastBusMode和RdNF2SDRAM,所以為了正確編譯該程序,只需把啟動(dòng)代碼中相關(guān)的地方注釋掉即可。
在這里,把ADS的相關(guān)配置介紹一下,這些內(nèi)容是比較重要的。下面是需要修改的內(nèi)容:
在Target Settings中的Post-linker中選擇ARM fromELF,因?yàn)槲覀冃枰袳LF文件格式轉(zhuǎn)化為下載到flash中所必須的二進(jìn)制文件。
在Language Settings中的所有語(yǔ)言的Target下的Architecture or Processor,選擇ARM920T,因?yàn)閟3c2440是ARM920T內(nèi)核。
在ARM Linker中的Output中的RO Base填寫0x30000000,因?yàn)樵陂_(kāi)發(fā)板上SDRAM是從0x30000000地址開(kāi)始。在Layout中的Object/Symbol中填寫2440init.o,它是啟動(dòng)文件的目標(biāo)文件,在Section中填寫Init,它是在啟動(dòng)文件中我們所定義的入口代碼段的名稱。
在ARM fromELF中的Output format選擇Plain binary,并在Output file name中填寫任意以bin為后綴的輸出文件名。
評(píng)論