Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474974
  • 博文数量: 223
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2145
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-01 10:23
个人简介

该坚持的时候坚持,该妥协的时候妥协,该放弃的时候放弃

文章分类

全部博文(223)

文章存档

2017年(56)

2016年(118)

2015年(3)

2014年(46)

我的朋友

分类: 嵌入式

2016-09-26 21:06:09

一、为什么使用LED
在嵌入式系统软件(bootloader,kernel)开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时通常会采用LED来作为程序调试的重要手段。

二、 LED原理图-底板

LED的实质为发光二极管,当其两端电压差一定时,即处于导通状态(发光)。

三、GPIO
GPIO(General-Purpose Input /Output Ports)通用输入/输出端口。在嵌入式系统中, CPU经常需要控制许多结构简单的外部设备或者电路,这些设备通常只要求两种状态(开/关), 对这些设备的控制,使用传统的串口或者USB口就显得复杂所以,在嵌入式微处理器上通常提供了一种“通用可编程I/O端口”,也就是GPIO。

一个GPIO端口至少需要两个寄存器,一个是“控制寄存器”,用于选择该端口作为输入还是输出。另一个是存放数据的”数据寄存器”。

四、芯片手册GPIO部分
2440中的LED原理图
     
可以看出led1,led2,led3,led4中的nLed1、2、3、4分别是GPIOB中的5678位管脚


所以从芯片手册中学习到:GPIO中有4个寄存器,其中GPBCON(控制寄存器)、GPBDAT(数据寄存器)是我们需要的。

从图中可知IO口拉低点位就能使LED发光,所以先将GPB5、6、7、8设为01输出,然后再GPBDAT中设置为0000可以发光。

五、代码编写
  1. #define GPBCON 0x56000010                    定义宏地址
  2. #define GPBDAT 0x56000014                    定义宏地址
  3. light_led:
  4.     ldr r0, =GPBCON                        读取GPBCON地址中的值到r0
  5.     ldr r1, =0x15400                       设置r1使用GPIB5、6、7、8
  6.     str r1, [r0]                           将r1写到r0中的值所指向的位置

  7.     ldr r0, =GPBDAT                         继续读取GPBDAT
  8.     ldr r1, =0x6bf                          这里设置了8位和6位亮,5位和7位灭
  9.     str r1, [r0]                            将r1写到r0中的值所指向的位置
  10.     mov pc, lr                                返回到bl light_led


阅读(748) | 评论(0) | 转发(0) |
0

上一篇:关闭中断和关闭MMU

下一篇:时钟初始化

给主人留下些什么吧!~~