前言linux
CUbieboard2板載兩個LED,一個綠色的,一個藍色的,其中綠色LED經過三極管與PH20管腳鏈接,藍色LED經過三極管與PH21管腳鏈接,這裏只以藍色LED爲例,電路原理圖如圖1和圖2所示。工具
圖1 LED所使用的管腳oop
圖2 LED與三極管鏈接圖spa
由此可知,當PH21輸出高電平時,三極管處於導通狀態,從而藍色LED會被點亮;當PH21輸出低電平時,三極管處於截止狀態,藍色LED熄滅。code
1、目的blog
編寫第一個裸機程序,點亮板載的藍色LED。it
2、源代碼說明io
程序很簡單,已給出詳細註釋,直接看代碼好了,以下所示:編譯
1 /* 2 * (C) Copyright 2014 Conan Liang <lknlfy@163.com> 3 * 4 * a very simple source to set the blue led on for Cubieboard2. 5 * 6 */ 7 8 /* GPIO reg addr */ 9 #define SUNXI_PIO_BASE 0x01C20800 10 #define SUNXI_PIO_PH_CFG2_BASE (SUNXI_PIO_BASE + 0x104) 11 #define SUNXI_PIO_PH_DAT_BASE (SUNXI_PIO_BASE + 0x10C) 12 13 /* global entry point */ 14 .globl _start 15 _start: b reset 16 17 reset: 18 ldr r0, =SUNXI_PIO_PH_CFG2_BASE 19 /* before write, read the reg value into r1*/ 20 ldr r1, [r0] 21 /* blue led is connected to PH21 */ 22 ldr r2, =(0xf << 20) 23 mvn r3, r2 24 /* clear 4 bits for PH21*/ 25 and r1, r1, r3 26 /* set PH21 for output function */ 27 orr r1, r1, #(0x1 << 20) 28 str r1, [r0] 29 30 /* set PH21 output 1(high value), so the blue led is on */ 31 ldr r0, =SUNXI_PIO_PH_DAT_BASE 32 ldr r1, [r0] 33 orr r1, r1, #(1 << 21) 34 str r1, [r0] 35 loop: 36 b loop
3、驗證function
使用arm-linux-gnueabihf工具編譯後生成led.b文件,再使用mksunxiboot工具在led.b文件前面加上一個頭部,最終生成led.bin文件,使用如下命令將led.bin文件燒寫到TF中:
#sudo dd if=./led.bin of=/dev/sdb bs=1024 seek=8
將TF卡插入Cubieboard2,上電便可看到藍色LED被點亮。效果如圖3所示。
圖3 效果圖