本文是对韦东山嵌入式第一期学习的记录之一,如有您需要查找的信息,可以继续往下阅读。

  想要用按键点亮LED灯,就需要知道按键和LED灯的相关信息,这样才可以进行之后的操作。阅读JZ2440的原理图,可以得到以下信息(见下方图片)



JZ2440开发板用到了S2,S3,S4三个按键,nLED1,nLED2,nLED4三盏LED灯,它们对应的寄存器位分别是:

按键:S2(EINT0)——GPF0  S3(EINT2)——GPF2  S4(EINT11)——GPG3

LED:  nLED1——GPF4  nLED2——GPF5  nLED4——GPF6

知道这些之后,需要进一步了解相应寄存器的信息,阅读S3C2440的芯片手册,可以得到以下信息(见下方图片)

                      GPFCON和GPFDAT寄存器

                      GPGCON和GPGDAT寄存器

对于LED:需要设置GPFCON的GPF4/5/6,让它们变成输出引脚【GPFCON的bit8/9设为0b01,bit10/11设为0b01,bit12/13设为0b01】

对于按键:需要设置GPFCON的GPF0(s2键),GPF2(s3键)以及GPGCON的GPG3(s4键),让它们变成输入引脚【GPFCON的bit0/1设为0,bit4/5设为0,GPGCON的bit6/7设为0】

  由于GPFCON与GPFDAT是对应的,GPGCON与GPGDAT是对应的,根据芯片手册关于GPFDAT和GPGDAT的描述(上面的图片)可知:

当端口配置为输入时,相应的位为针状态。当端口配置为输出时,引脚状态为与相应的位相同。 当端口配置为功能引脚时,将读取未定义的值。

由此可以知道:

  按键的状态对应GPFDAT中位0和位2的值以及GPGDAT中位3的值,LED的状态对应GPFAT中位6/5/4的值

  按键和LED一样,平时电位都处于拉高状态,对应着松开和熄灭(也就是1),当按键按下时,或者LED点亮时,对应着低电位(也就是0)

因此,GPFDAT寄存器和GPGDAT寄存器也需要进行相关的设置(程序中体现)。

  接下来仅对C程序进行解析:

 #include "s3c2440_soc.h"                         //写好了寄存器地址的宏,C程序中直接写寄存器名称即可
int main(void)
{
int val1,val2;
/*设置GPFCON的GPF4/5/6,让它们变成输出引脚*/
GPFCON &=~((<<)|(<<)|(<<)); //先让GPFCON的GPF4/5/6清零
GPFCON |=((<<)|(<<)|(<<)); //配置好GPFCON的GPF4/5/6,让它们变成输出引脚 /*设置GPFCON的GPF0(s2键),GPF2(s3键)以及GPGCON的GPG3(s4键),让它们变成输入引脚*/
GPFCON &=~((<<)|(<<));
GPGCON &=~(<<); /*按下点亮*/
while()
{
val1=GPFDAT;
val2=GPGDAT;
if(val1 & (<<)) //判断S2键是否按下,对应GPF6的LED灯
{
GPFDAT |=(<<); //此时S2键为松开,LED应该熄灭
}
else
{
GPFDAT &=~(<<); //此时S2键为按下,LED应该点亮
}
if(val1 & (<<)) //判断S3键是否按下,对应GPF5的LED灯
{
GPFDAT |=(<<); //此时S3键为松开,LED应该熄灭
}
else
{
GPFDAT &=~(<<); //此时S3键为按下,LED应该点亮
}
if(val2 & (<<)) //判断S4键是否按下,对应GPF4的LED灯
{
GPFDAT |=(<<); //此时S4键为松开,LED应该熄灭
}
else
{
GPFDAT &=~(<<); //此时S4键为按下,LED应该点亮
}
}
return ;
}

  整个C程序到此就写完了,连同其他文件(start.S / s3c2440_soc.h / makefile 本文没有附上)一起上传到linux编译后,得到的bin文件,烧写到JZ2440开发板上,经过验证,按键按下时,对应的LED亮,松开时熄灭。

JZ2440开发板:用按键点亮LED灯(学习笔记)的更多相关文章

  1. NodeMCU手把手入门:配置NodeMCU ESP8266开发板环境及点亮LED灯

    之前一直在玩树莓派,最近实验室买了些NodeMCU就想着玩一玩,没想到挺有意思的.其实树莓派能实现的功能,它大部分也可以,价格比派也便宜不少,舍不得买派的同学可以先买这个开发板玩一玩. 本文主要介绍了 ...

  2. JZ2440裸机点亮LED【学习笔记】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 一.我们首先来做第一个实验,用汇编语言点亮板子上的LED. 1.1 LED的原理图 从下面的原理图可知LED1是 ...

  3. JZ2440开发板:修改ARM芯片时钟(学习笔记)

    想要修改ARM芯片的时钟,需要去查询芯片手册和原理图,获取相关的信息(见下方图片) 首先来看时钟的结构图 根据结构图可以看出,时钟源有两种选择:1. XTIpll和XTOpll所连接的晶振 2. EX ...

  4. JZ2440开发笔记(5)——通过按键点亮LED

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

  5. Linux学习 :移植U-boot_2016.09到JZ2440开发板

    一.下载源码:ftp://ftp.denx.de/pub/u-boot/ 二.初始化编译: ①新建一个单板: cd board/samsung/ cp smdk2410 smdk2440 -rf   ...

  6. Linux学习 :移植U-boot_2012.04.01到JZ2440开发板

    一.下载U-boot源码:ftp://ftp.denx.de/pub/u-boot/ 二.uboot的启动过程: 部分硬件初始化——>加载完整uboot到RAM——>跳转到第二阶段入口开始 ...

  7. JZ2440开发板:UART(串口)使用(学习笔记)

    查看UART在硬件上的信息,阅读JZ2440原理图可以看到: JZ2440开发板的UART0是可以跟USB相接的,用于打印调试,UART1,UART2两个串口用来外接模块.所以本文仅对UART0进行操 ...

  8. 基于JZ2440开发板编写bootloader总结(一)

    凡走过必留下痕迹,学点什么都会有用的. 本系列博文总结了自己在学习嵌入式Linux编程过程中的收获,若有错误,恳请指正,谢谢! --参考教材韦东山系列教材 bootloader 是一个用于启动linu ...

  9. Jz2440开发板熟悉

    title: Jz2440开发板熟悉 tags: ARM date: 2018-10-14 15:05:56 --- 概述 外部晶振为12M Nand Flash 256M,Nor Flash 2M, ...

随机推荐

  1. LVM逻辑卷的管理和使用

    本篇将从头到尾演示一遍逻辑卷的管理. 主要步骤 1.创建lv逻辑卷步骤     前提:先创建3个磁盘分区,类型为8e:         1.PV创建             pvcrete /dev/ ...

  2. July 19th 2017 Week 29th Wednesday

    Rather than envy others, it is better to speed up their own pace. 与其羡慕他人,不如加快自己的脚步. The envy of othe ...

  3. ZT北大青鸟营业额超20亿到不值一提 衰落的背后

    北大青鸟营业额超20亿到不值一提 衰落的背后 2013-10-18 08:18 王根旺  我要评论 (0) “北大青鸟是个悲剧!”说到曾经的IT培训业巨头,黑马导师.珍品网创始人曹允东惋惜道.在学大创 ...

  4. 关于LDA的文章

    转:http://www.zhizhihu.com/html/y2011/3228.html l  Theory n  Introduction u  Unsupervised learning by ...

  5. c++11 实现RAII特性

    参考文章https://blog.csdn.net/pongba/article/details/7911997 什么是RAII 技术?(参见百度百科相关条目) RAII(Resource Acqui ...

  6. Webpack笔记(三)——一款破产版脚手架的开发

    前些天一直在学习入门Webpack,后来尝试了自己搭建一下一个简单的React开发环境,后来就在想可不可以自己写一个简单的脚手架,以免每次搭建一个简单的开发环境都需要自己一个个的配置,这样很麻烦,使用 ...

  7. 16、SpringBoot-CRUD错误处理机制(3)

    3).将自己指定的数据携带出去 出现错误以后,会来到/error请求,会被BasicErrorController 进行处理 响应出去的数据是由 getErrorAttributes 得到的( Abs ...

  8. c++ 基础用法、基础知识以及一些常规的操作

    1.二叉平衡树:左子树和右子树的深度差小于等于1 2.二叉搜索树:左子树小于根节点的值,右子树大于根结点的值 3.队列:push(),pop(),front(),back(),empty(),size ...

  9. 为什么 window.location.search 为空?

    1,什么是window.location?示例 URL:http://b.a.com:88/index.php?name=kang&when=2011#first 属性 含义 值 protoc ...

  10. 报错Caused by: org.hibernate.AnnotationException: No identifier specified for entity:

    Caused by: org.hibernate.AnnotationException: No identifier specified for entity:. 原因: 1.没有给实体类ID 解决 ...