剛拿到JZ2440開發板熟悉了它的程序燒錄之後,我想大家的做法肯定都差不多,肯定是準備自己的編程之旅了,當然第一個實驗肯定不能少了偉大 “點燈實驗”。
點亮LED非常簡單,爲了養成良好的學習習慣,還是一步一步來。
第一步:查看硬件連接圖(不管是什麼板子,這個硬件原理圖肯定是你的板子廠商提供給你的)
從我的原理圖中可以看出,我所用的開發板外接了三個LED燈,分別連接到GPF4、GPF5、GPF6管腳,並且當GPIO(通用輸入輸出口)輸出低電平時LED燈被點亮,輸出高電平時LED熄滅。
第二步:查看芯片手冊,獲取相關寄存器的配置,這個芯片手冊是由你所用的開發板上的Soc(CPU芯片)的生產廠商提供的,我的JZ2440開發板用的是S3C2440芯片,它是由三星公司基於ARM920T核設計的。
根據第一步的查找結果,我去芯片手冊上查到GPF相關的配置寄存器如下:
從上面的信息中很容易得出GPF4/5/6要設置爲輸出口功能時GPFCON 控制寄存器bit[13:8]的值需要設置爲:010101;點亮/熄滅三盞燈時需要設置GPFDAT寄存器bit[6:4]的值爲:000、111;GPFUP上拉寄存器不要想配置。
第三步編寫彙編程序:gpio_led.s
.text
.global _start
_start:
@關看門狗(對應地址是0x53000000),不然系統會不停的復位
ldr r0, =0x53000000
mov r1, #0x0
str r1, [r0]
@點亮三盞led燈
ldr r0, =0x56000050
mov r1, #0x00001500@bit[13:8]=010101
str r1, [r0]
ldr r0, =0x56000054
mov r1, #0x00000000@bit[6:4]=000
str r1, [r0]
MAIN_LOOP:b MAIN_LOOP
第四步編寫編譯鏈接程序Makefile
CFLAG = -Wall
gpio_led.bin : gpio_led.s
#編譯但不鏈接
arm-linux-gcc $(CFLAG) -g -o gpio_led.o -c gpio_led.s
#指定鏈接地址爲0x00000000,生成elf格式鏡像
arm-linux-ld -Ttext 0x00000000 -g gpio_led.o -o gpio_led_elf
#去除elf格式信息
arm-linux-objcopy -O binary -S gpio_led_elf gpio_led.bin
clean:
rm -rf gpio_led.bin gpio_led_elf *.o