初學JZ2440之GPIO彙編點燈

        剛拿到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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章