Cubieboard2裸机开发之(二)板载LED交替闪烁
2014-03-06 09:31
260 查看
[b]前言[/b]
电路原理在文章/article/5068191.html中已经说明,两个LED的原理图是一样的。要使两个LED交替闪烁,只需要在点亮蓝色LED,熄灭绿色LED之后延时一段时间,然后再点亮绿色LED,熄灭蓝色LED,延时一段时间,如此不断循环即可,过程如图1所示。
![](http://images.cnitblog.com/i/247269/201403/060924364569222.jpg)
图1 LED交替闪烁流程图
[b]一、目的[/b]
通过编写裸机程序,使板载的两个LED交替闪烁。
[b]二、源代码说明[/b]
程序比较简单,已给出详细注释,直接看代码好了,如下所示:
[b]三、验证[/b]
使用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交替闪烁。效果不好用图片展示,因此就不上图了。
电路原理在文章/article/5068191.html中已经说明,两个LED的原理图是一样的。要使两个LED交替闪烁,只需要在点亮蓝色LED,熄灭绿色LED之后延时一段时间,然后再点亮绿色LED,熄灭蓝色LED,延时一段时间,如此不断循环即可,过程如图1所示。
![](http://images.cnitblog.com/i/247269/201403/060924364569222.jpg)
图1 LED交替闪烁流程图
[b]一、目的[/b]
通过编写裸机程序,使板载的两个LED交替闪烁。
[b]二、源代码说明[/b]
程序比较简单,已给出详细注释,直接看代码好了,如下所示:
/* * (C) Copyright 2014 Conan Liang <lknlfy@163.com> * * two leds on Cubieboard2 flashing alternately * */ /* 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, green led is connected to PH20 */ ldr r2, =((0xf << 20) | (0xf << 16)) mvn r3, r2 /* clear 4 bits for PH21 & PH20*/ and r1, r1, r3 /* set PH21 & PH20 for output function */ orr r1, r1, #((0x1 << 20) | (0x1 << 16)) str r1, [r0] ldr r0, =SUNXI_PIO_PH_DAT_BASE loop: /* read the PH data reg */ ldr r1, [r0] /* clear PH.20(green led off) */ ldr r2, =(1 << 20) mvn r3, r2 and r1, r1, r3 /* set PH.21(blue led on) */ orr r1, r1, #(1 << 21) str r1, [r0] bl delay /* read the PH data reg */ ldr r1, [r0] /* clear PH.21(blue led off) */ ldr r2, =(1 << 21) mvn r3, r2 and r1, r1, r3 /* set PH.20(green led on) */ orr r1, r1, #(1 << 20) str r1, [r0] bl delay b loop /* never reach */ f: b f /* inaccurate delay */ delay: mov r5, #0 ldr r4, =0x3ffff d: sub r4, r4, #1 cmp r5, r4 bne d mov pc, lr
[b]三、验证[/b]
使用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交替闪烁。效果不好用图片展示,因此就不上图了。
相关文章推荐
- Cubieboard2裸机开发之(一)点亮板载LED
- Cubieboard2裸机开发之(三)C语言操作LED
- 嵌入式系统学习(五)-NanoPi2基础实例开发(裸机程序按钮控制LED灯)
- ARM裸机实现led循环闪烁
- 单片机控制继电器 使LED灯交替闪烁
- gec210 led裸机开发 汇编指令
- Exynos4412裸机开发系列教程--LED流水灯
- ARM裸机开发(一)LED控制
- 用Keil-MDK开发TQ2440裸机程序入门教程——LED流水灯实现
- Eclipse开发调试ARM裸机程序(二)LED_从ARM到GNU
- GEC210 LED裸机开发 c语言实现 ADS方式
- OK6410裸机开发之LED灯
- 裸机开发之点亮LED
- 嵌入式Linux裸机开发(一)——点亮Led
- Cubieboard2裸机开发之(五)看门狗操作
- 用Keil-MDK开发TQ2440裸机程序入门教程——LED流水灯实现
- 【STM32F429开发日志】+hello led(闪烁led灯)
- 控制两个、LED灯交替闪烁【警灯】
- 使用Energia开发MSP430 LAUNCHPAD学习笔记1--LED闪烁
- iTOP4412裸机开发——LED