uboot 之led灯闪烁

发光管二极管的发光原理:

当发光二极管中流过的电流达到一定值时,二极管便会发光,一般情况下,这个电流值是3~10mA(稍微大于10mA也可以,不过最好不要大于20mA,否则二极管会被烧坏),所以我们要点亮发光二极管就是让他流过的电流在这个范围内。

发光二极管的 反向击穿电压约5伏。它的正向 伏安特性曲线很陡,使用时必须串联限流 电阻以控制通过管子的 电流。限流电阻R可用下式计算:
R=(E-UF)/IF
式中E为电源电压,UF为LED的 正向压降,IF为LED的一般工作电流。

 

我们可以在二极管的阳极端加上上拉电阻,并且加上VCC,阴极端接在单片机的接口。由电路知识可知,当阴极端为低电平时,二极管导通,发光。即单片机接口输出低电平时,二极管发光。所以,我们要点亮二极管,就是要让单片机接口输出低电平。

关于端口上拉寄存器(GPBUP)作用的问题

1) 通常用于输出时,需要上拉,以便增加输出电流的能力;

(s3c2440芯片手册有说明: GPBUP对应位是 0:使能; 1:禁止。GPBUP reset值是0x0)
2) 不需要上拉的情况较复杂,举例说,一种情况下是:如果做为A/D输入口,就不应该上拉,以免影响实际的输入电平;还有一种是:CPU低功耗睡眠状态,上拉电阻有可能切断,降低功耗(这取决于不同芯片).

3)上拉禁止:输出端相当于一个OC门或OD门
   上拉使能:输出端相当于一个推挽输出

 

http://www.jyguagua.com/?p=395

首先看原理图(LED):

通过看这个原理图,我们晓得如下:

1:nLED_1/2/3/4如果是低电平,那么LED将会点亮;

2:nLED_1/2/3/4对应的IO口是:GPB5/6/7/8

好的,那么我们看芯片手册,往往我们要看的是GPBCON, GPBDAT,GPBUP.

通过上面的手册,我们可以编码如下:

 

 控制 LED 闪烁:

 以下是本人在mini2440开发板自己亲自总结的点灯程序,我不知道你用的是什么开发板,相信以你的能力转换一下就可以解决了!要使他 “不停的闪烁”其实就是利用循环控制相应寄存器的输出输入状态!
@***************
@file:head.s
@功能:点亮两个led灯
@***************


@下面三行为工业流程,固定写法
.text
.global _start
_start:
    
ldr r0,=0x56000010     @将r0设置为GPBCON寄存器,并装载GPBCON寄存器的地址
ldr r1,=0x15400        @设置GPB5-8四个引脚为输出状态(CPU发出信号给GPB引脚)
str r1,[r0]            @把寄存器中的数据r1写道内存中去


ldr r0,=0x56000014     @将r0设置为GPBDAT寄存器,并装载GPBDAT寄存器的地址


 flash:
ldr r1,=0x180          @对GPBDAT寄存器的5-8位进行设置
str r1,[r0]            @把寄存器中的数据r1写道内存中去,四个灯的状态两不亮
bl wait                @跳转的同时保存下一条指令的地址给链接寄存器
ldr r1,=0x1e0           @对GPBDAT寄存器的5-8位进行设置
str r1,[r0]            @把寄存器中的数据r1写道内存中去,四个灯的状态全不亮
bl wait
b flash
@下面一个循环(相当延时)
wait:
ldr r2,=0xfff0
loop:
subs r2,r2,#1
bne loop
mov pc,lr                @利用链接寄存器跳回去
stop:
b stop

 

 我的代码:

/* add for my2440 led set  */

#ifdef CONFIG_S3C2440
#define GPBCON 0x56000010
#define GPBDAT 0x56000014

ldr r0,=GPBCON     /* set GPBCON to be output mode */
ldr r1,=0x15400
str r1,[r0]

ldr r0,=GPBDAT     /* set output data value  */

flash:
ldr r1,=0x160      /* set the third led on, the other led off  */
str r1,[r0]
bl wait
ldr r1,=0x80
str r1,[r0]
bl wait
b flash

wait:
ldr r2,=0xfff0
loop:
subs r2,r2,#1
bne loop
mov pc,lr

#endif


 

 

 

 

 

 

 

 

 

 

 

http://page.renren.com/601407746/note/848699398?op=next&curTime=1338033600000

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值