前言
CUbieboard2板载两个LED,一个绿色的,一个蓝色的,其中绿色LED通过三极管与PH20管脚连接,蓝色LED通过三极管与PH21管脚连接,这里只以蓝色LED为例,电路原理图如图1和图2所示。
图1 LED所使用的管脚
图2 LED与三极管连接图
由此可知,当PH21输出高电平时,三极管处于导通状态,从而蓝色LED会被点亮;当PH21输出低电平时,三极管处于截止状态,蓝色LED熄灭。
一、目的
编写第一个裸机程序,点亮板载的蓝色LED。
二、源代码说明
程序很简单,已给出详细注释,直接看代码好了,如下所示:
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 0x01C2080010 #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 _start15 _start: b reset16 17 reset:18 ldr r0, =SUNXI_PIO_PH_CFG2_BASE19 /* 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, r224 /* clear 4 bits for PH21*/25 and r1, r1, r326 /* 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_BASE32 ldr r1, [r0]33 orr r1, r1, #(1 << 21)34 str r1, [r0]35 loop:36 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 效果图
新闻热点
疑难解答