//菜鳥學嵌入式.
//這一個真正的全裸代碼。具體原理是這樣的:
//首先是設置到NAND Flash 啓動。當ARM 上電後,會自動讀取NAND Flash
// 0x0000000地址處執行代碼。我們將代碼編譯聯接地址也設爲0x0000000
//然後,用Jflash 燒寫時,燒寫到NAND Flash的0x0000000。那麼上電後就會
//執行你的代碼。
1:交叉環境的建立
按照 mini2440用戶手冊,175頁成功設置好 .
2:連上開發板與PC上的JTAG線.開發板接上電源,
設置從NAND FLASH啓動.(一定要確定是NAND FLASH啓動)
否則燒寫的時候不成功。
開啓開發板電源.
3:編譯 led_on.S
@******************************************************************************
@ File:led_on.S (引用:嵌入式linux應用開發完全手冊 韋東山 編著。)我做了一點改動。
@ 功能:LED點燈程序,點亮LED
@ mini2440 的LED口是 GPB5,GPB6,GPB7,GPB8.給它們送[低電平,則點亮 ][高電平,則點滅].
@ 它的配置地址是:0x56000010 我們將向這個地址中寫入值,將GPB5/6/7/8 這四個引腳設爲輸出口,
@ 它的數據地址是:0x56000014 我們向這裏面送相應的值就會相應的點亮相應的燈。
@ 比如送0x00000060 --> bit8,bit7 爲低電平,bit6,bit5 是高電平.因此led4,3亮,led2,1滅。
@******************************************************************************
.text
.global _start
_start:
LDR R0,=0x56000010 @ R0設爲GPBCON寄存器。此寄存器
@ 用於選擇端口B各引腳的功能:
@ 是輸出、是輸入、還是其他
MOV R1,#0x00015400 @ 設置GPB5,GPB6,GPB7,GPB8,爲輸出口 #表示後面的是立即數,0x表示是十六進制數。
STR R1,[R0] @ 將R1中的值,送到地z址:0x56000010中
LDR R0,=0x56000014 @ R0設爲GPBDAT寄存器。此寄存器
@ 用於讀/寫端口B各引腳的數據
MOV R1,#0x00000060 @ 此值改爲0x00000020,
@ 可讓LED1熄滅
STR R1,[R0] @ GPB5輸出0,LED1點亮
MAIN_LOOP:
B MAIN_LOOP
4:下面是Makefile文件內容。將它放在與led_on.S同一個文件夾下。
其中 arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf 這一句的意思是連接到0x0000000地址。
當你下載的時候,就是下載到nandflash中0x0000000處運行。(不知這樣理解是否準確)
這一句:arm-linux-objcopy -O binary -S led_on_elf led_on.bin 將elf格式文件,變成.bin文件,這個.bin
的二進制文件,是可以在mini2440開發板上運行的。
led_on.bin : led_on.S
arm-linux-gcc -g -c -o led_on.o led_on.S
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf
arm-linux-objcopy -O binary -S led_on_elf led_on.bin
clean:
rm -f led_on.bin led_on_elf *.o
5:注意。led_on.S 的後綴是一個大寫的S,而不是小寫的s.
進入剛纔,你保存文件的文件夾之後。
執行make.
make後會生成一個 led_on.bin文件。
6:將光盤裏jflash2440.tgz解壓.會生成一個Jflash文件夾
將剛纔的led_on.bin文件複製到 Jflash
執行如下語句: ./Jflash-s3c2440 led_on.bin /t=5 /d=0
出現第一個提示時輸入:5 --表示燒寫的flash類型是 64M的k9s1208
出現第二個提示時輸入: 0 --表示從第k9s1208 program
出現第三個提示時輸入: 0 --表示從第0塊燒寫。然後就是燒寫的過程.
再出現提示時輸入 : 2 --表示退出燒寫。
7:關掉開發板的電源,再開啓電源。你發現燈亮了。