Cubieboard2裸机开发之(二)板载LED交替闪烁

前言

       电路原理在文章http://www.cnblogs.com/lknlfy/p/3583806.html中已经说明,两个LED的原理图是一样的。要使两个LED交替闪烁,只需要在点亮蓝色LED,熄灭绿色LED之后延时一段时间,然后再点亮绿色LED,熄灭蓝色LED,延时一段时间,如此不断循环即可,过程如图1所示。

         图1 LED交替闪烁流程图

一、目的

       通过编写裸机程序,使板载的两个LED交替闪烁。

二、源代码说明

     程序比较简单,已给出详细注释,直接看代码好了,如下所示:

 1 /*
 2  * (C) Copyright 2014 Conan Liang <lknlfy@163.com>
 3  *
 4  * two leds on Cubieboard2 flashing alternately
 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, green led is connected to PH20 */
22     ldr r2, =((0xf << 20) | (0xf << 16))
23     mvn r3, r2
24     /* clear 4 bits for PH21 & PH20*/
25     and r1, r1, r3
26     /* set PH21 & PH20 for output function */
27     orr r1, r1, #((0x1 << 20) | (0x1 << 16))
28     str r1, [r0]
29 
30     ldr r0, =SUNXI_PIO_PH_DAT_BASE
31 loop:
32     /* read the PH data reg */
33     ldr r1, [r0]
34     /* clear PH.20(green led off) */
35     ldr r2, =(1 << 20)
36     mvn r3, r2
37     and r1, r1, r3
38     /* set PH.21(blue led on) */
39     orr r1, r1, #(1 << 21)
40     str r1, [r0]
41     
42     bl delay
43 
44     /* read the PH data reg */
45     ldr r1, [r0]
46     /* clear PH.21(blue led off) */
47     ldr r2, =(1 << 21)
48     mvn r3, r2
49     and r1, r1, r3
50     /* set PH.20(green led on) */
51     orr r1, r1, #(1 << 20)
52     str r1, [r0]
53 
54     bl delay
55     b loop
56     /* never reach */
57 f:
58     b f
59 
60 /* inaccurate delay */
61 delay:
62     mov r5, #0
63     ldr r4, =0x3ffff
64 d:
65     sub r4, r4, #1
66     cmp r5, r4
67     bne d
68     mov pc, lr

三、验证

        使用arm-linux-gnueabihf工具编译后生成led2.b文件,再使用mksunxiboot工具在led2.b文件前面加上一个头部,最终生成led2.bin文件,使用以下命令将led2.bin文件烧写到TF中:

#sudo dd if=./led2.bin of=/dev/sdb bs=1024 seek=8

     将TF卡插入Cubieboard2,上电即可看到两个LED交替闪烁。效果不好用图片展示,因此就不上图了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值