前言
CUbieboard2板载两个LED,一个绿色的,一个蓝色的,其中绿色LED通过三极管与PH20管脚连接,蓝色LED通过三极管与PH21管脚连接,这里只以蓝色LED为例,电路原理图如图1和图2所示。
图1 LED所使用的管脚
图2 LED与三极管连接图
由此可知,当PH21输出高电平时,三极管处于导通状态,从而蓝色LED会被点亮;当PH21输出低电平时,三极管处于截止状态,蓝色LED熄灭。
一、目的
编写第一个裸机程序,点亮板载的蓝色LED。
二、源代码说明
程序很简单,已给出详细注释,直接看代码好了,如下所示:
/* * (C) Copyright 2014 * * a very simple source to set the blue led on for Cubieboard2. * */ /* GPIO reg addr */ #define SUNXI_PIO_BASE 0x01C20800 #define SUNXI_PIO_PH_CFG2_BASE (SUNXI_PIO_BASE + 0x104) #define SUNXI_PIO_PH_DAT_BASE (SUNXI_PIO_BASE + 0x10C) /* global entry point */ .globl _start _start: b reset reset: ldr r0, =SUNXI_PIO_PH_CFG2_BASE /* before write, read the reg value into r1*/ ldr r1, [r0] /* blue led is connected to PH21 */ ldr r2, =(0xf << 20) mvn r3, r2 /* clear 4 bits for PH21*/ and r1, r1, r3 /* set PH21 for output function */ orr r1, r1, #(0x1 << 20) str r1, [r0] /* set PH21 output 1(high value), so the blue led is on */ ldr r0, =SUNXI_PIO_PH_DAT_BASE ldr r1, [r0] orr r1, r1, #(1 << 21) str r1, [r0] loop: b loop
三、验证
使用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 效果图
转自http://www.cnblogs.com/lknlfy/p/3583806.html