JZ2440开发笔记(5)——通过按键点亮LED
在JZ2440中,点亮LED就是给LED的控制位设置为输出,数据位设置为低电平,而通过按键点亮LED,就需要将按键对应的控制位设置为输出。
下面是JZ2440的3个LED电路图:

下面是JZ2440的3个按键的电路图

通过查找nLED_1,nLED_2,nLED_4对应的引脚,发现它们分别对应GPF4,GPF5,GPF6,如图:

通过查找EINT0,EINT2,EINT11对应的引脚,发现它们分别对应GPF0,GPF2,GPG3,如图:



由此,我们再去看2440的Datasheet,查看它们的控制位和数据位的信息,首先是GPF4,GPF5,GPF6的控制位信息,如图:

我们发现,当GPFCON寄存器的GPF4,GPF5,GPF6的控制位设置为01时,表示控制输出,这正是我们想要的。在看看它们的数据位是怎么设置的,如图:

由表格可知,当端口被配置为输出端口时,它的引脚状态和相应的位相同。也就是说,如果我想让LED1亮,那么我就要把它对应的GPF4配置为输出,然后将GPFDAT的第4位设置为0.
再看看按键对应的寄存器怎么配置,上面说到S2,S3,S4对应的控制寄存器相应的位是GPF0,GPF2和GPG3


由于按键是个输入设备,所以我们需要将GPF0,GPF2,GPG3的位设置为00。到此,LED和按键寄存器我们已经配置好了,下面看一下代码:
首先是一段汇编代码,由这段汇编代码引导到main函数,同时进行相应的硬件配置
.text
.global _start
_start:
ldr r0, =0x53000000 @ WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =* @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
@ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
bl main @ 调用C程序中的main函数
halt_loop:
b halt_loop
下面是主程序
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054) #define GPGCON (*(volatile unsigned long *)0x56000060)
#define GPGDAT (*(volatile unsigned long *)0x56000064) /*
* LED1,LED2,LED4对应GPF4、GPF5、GPF6
*/
#define GPF4_out (1<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2)) #define GPF4_msk (3<<(4*2))
#define GPF5_msk (3<<(5*2))
#define GPF6_msk (3<<(6*2)) /*
* S2,S3,S4对应GPF0、GPF2、GPG3
*/
#define GPF0_msk (3<<(0*2))
#define GPF2_msk (3<<(2*2))
#define GPG3_msk (3<<(3*2)) int main()
{
unsigned long dwDat;
// LED1,LED2,LED4对应的3根引脚设为输出,将这些位清零
//先把9,、9、10、11、12、13位清零,然后或操作设为输出01
GPFCON &= ~(GPF4_msk | GPF5_msk | GPF6_msk);
GPFCON |= GPF4_out | GPF5_out | GPF6_out; // S2,S3对应的2根引脚设为输入
GPFCON &= ~(GPF0_msk | GPF2_msk);
// S4对应的引脚设为输入
GPGCON &= ~GPG3_msk; while(){
//若Kn为0(表示按下),则令LEDn为0(表示点亮)
dwDat = GPFDAT; // 读取GPF管脚电平状态 if (dwDat & (<<)) // S2没有按下
GPFDAT |= (<<); // LED1熄灭
else
GPFDAT &= ~(<<); // LED1点亮 if (dwDat & (<<)) // S3没有按下
GPFDAT |= (<<); // LED2熄灭
else
GPFDAT &= ~(<<); // LED2点亮 dwDat = GPGDAT; // 读取GPG管脚电平状态 if (dwDat & (<<)) // S4没有按下
GPFDAT |= (<<); // LED3熄灭
else
GPFDAT &= ~(<<); // LED3点亮
} return ;
}
JZ2440开发笔记(5)——通过按键点亮LED的更多相关文章
- JZ2440开发板:用按键点亮LED灯(学习笔记)
本文是对韦东山嵌入式第一期学习的记录之一,如有您需要查找的信息,可以继续往下阅读. 想要用按键点亮LED灯,就需要知道按键和LED灯的相关信息,这样才可以进行之后的操作.阅读JZ2440的原理图,可以 ...
- JZ2440开发笔记(9)——位置无关代码设计【转】
b MAIN 和 ldr pc,=MAIN 的区别(谈到代码位置无关性) 看bootloader的时候经常看到这两种写法,不太明白区别,网上查了查.其实看了之后还是一头雾水? 其中,2和3 似乎是一个 ...
- JZ2440开发笔记(7)——2440启动方式
JZ2440的启动方式有两种,一种是从NOR FLASH中启动,还有一种就是从NAND FLASH中启动. 如果从NOR FLASH启动,CPU会访问NOR FLASH的0地址,而0地址位于BANK0 ...
- JZ2440开发笔记(6)——存储控制器
存储控制器与CPU及其它外设的关系 我们看到cpu上集成了一个存储管理器,外围的存储设备都接在这个存储管理器上.cpu负责发出命令,其它的一切工作都交给了存储管理器.那么存储管理器是如何来管理这些外设 ...
- JZ2440开发笔记(2)——minicom的安装和配置使用【转】
一.安装配置minicom 1.安装minicom lingd@ubuntu:~$ sudo apt-get install minicom 2.配置minicom lingd@ubuntu:~$ s ...
- JZ2440开发笔记(8)——FCLK、HCLK和PCLK
S3C2440中有三种时钟,分别是FCLK,HCLK和PCLK.这三种时钟的功能各不相同,其中FCLK主要是为ARM920T的内核提供工作频率,如图: HCLK主要是为S3C2440 AHB总线(Ad ...
- JZ2440开发笔记(4)——设置静态IP
1. 配置静态ip地址 $sudo vim /etc/network/interfaces 原有内容只有如下两行: auto lo iface lo inet loopback 向末尾追加以下内容: ...
- JZ2440开发笔记(3)——配置TFTP
第一步: 1.关闭ubuntu的防火墙 ufw disable2.卸载了iptables apt-get remove iptables 1.用iptables -F这个命令来关闭防火 ...
- JZ2440开发笔记(1)——arm-linux-gcc环境搭建
1 下载arm-linux-gcc-4.4.3安装包,http://arm9.net/download.asp 2 解压arm-linux-gcc-4.4.3-20100728.tar.gz,使用命令 ...
随机推荐
- [CSS]font- 属性
所有浏览器都支持 font 属性. 注释:任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit". 定义和用法 font 简写属性在一 ...
- Html学习_style属性应用
用style属性改变字体大小.颜色.字体.背景颜色和对齐方式 <!DOCTYPE html> <html> <head> <title>Putting ...
- 将TIBCO Host 实例注册为Windows服务
安装了TIBCO ActiveMatrix BPM及成功创建了ActiveMatrix Administrator 和 BPM Server后,每次都要手动启动tibcohost,比较麻烦,实际上TI ...
- Cent OS 常用 命令
1.开机自动联网操作 需要root权限 vim /etc/sysconfig/network-scripts/ifcfg-p4p1(p4p1 为网络链接名称)这个文件, 把ONBOOT="n ...
- Qt 5 常见错误汇总
1.没加 QT+=sql,需要再.pro文件中加上 2.无故崩溃,这个有多种原因,多为指针问题,例如,指针内存泄露,指针未开辟空间直接使用,UI还未建立就使用UI里面的东西..等等 3.Sql问题,有 ...
- Win8.1设置窗口背景颜色为护眼色
更改注册表 window+R --->输入regedit(点击确定后进入注册表编辑器) 需要修改以下两个地方,重启电脑生效: [HKEY_CURRENT_USER\Control Panel\C ...
- C# 操作mongodb 分组
c#操作mongodb的分组的简单例子: 1.首先要下载c#对应的mongodb驱动,官方下载地址:https://github.com/mongodb/mongo-csharp-driver/rel ...
- 异步IO模型和Overlapped结构
.NET中的 Overlapped 类 异步IO模型和Overlapped结构(http://blog.itpub.net/25897606/viewspace-705867/) 数据结构 OVERL ...
- [转载]C#中获取时间戳(UnixTime)的方法
.Net中没有封装获取时间戳(UnixTime,相对于1970年1月1日凌晨的毫秒数)的方法.因此本人写了如下方法实现. 提醒在摸索中的朋友,注意方法中的四舍五入.关于讨论四舍五入的方法,可以在这里找 ...
- vs2012+cmake+opencv+opencv unable to find a build program corresponding to "Visual Studio 12 Win64". CMAKE_MAKE_PROGRAM is not set
搜索了下,说什么的都有! 一,提示找不到 cmake-2.8.12.1 的 modles 卸载了cmake后发现 cmd 中的 cmake --version 还是 2.8.11.1 找到是我的cyg ...