zoukankan      html  css  js  c++  java
  • 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交替闪烁。效果不好用图片展示,因此就不上图了。

  • 相关阅读:
    iOS 图像渲染原理
    胶水语言
    关于事件处理
    redux有价值的文档
    redux沉思录
    详解JavaScript中的Object对象
    js 类型系统的核心:元类型、原型链与内省机制
    范畴、类型、复合、函数式编程
    js的类型系统--js基于原型的基石是所有对象最终都能够类型自证
    windows下查看dns缓存和刷新缓存
  • 原文地址:https://www.cnblogs.com/lknlfy/p/3583822.html
Copyright © 2011-2022 走看看