一、为什么使用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可以发光。
五、代码编写
-
#define GPBCON 0x56000010 定义宏地址
-
#define GPBDAT 0x56000014 定义宏地址
-
light_led:
-
ldr r0, =GPBCON 读取GPBCON地址中的值到r0
-
ldr r1, =0x15400 设置r1使用GPIB5、6、7、8
-
str r1, [r0] 将r1写到r0中的值所指向的位置
-
-
ldr r0, =GPBDAT 继续读取GPBDAT
-
ldr r1, =0x6bf 这里设置了8位和6位亮,5位和7位灭
-
str r1, [r0] 将r1写到r0中的值所指向的位置
-
mov pc, lr 返回到bl light_led
阅读(788) | 评论(0) | 转发(0) |