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

前言

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

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

         图1 LED交替闪烁流程图

一、目的

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

二、源代码说明

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

 1 /*

 2  * (C) Copyright 2014 Conan Liang <[email protected]>

 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交替闪烁。效果不好用图片展示,因此就不上图了。

 

你可能感兴趣的:(IE)