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

  想要用按键点亮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. 基于SAP Kyma的订单编排增强介绍

    尽管有一万个舍不得,2018年还是无可挽回地离我们远去了. 唯有SAP成都研究院的同事和我去年在网络上留下的这些痕迹,能证明2018年我们曾经很认真地去度过每一天: SAP成都研究院2018年总共87 ...

  2. 在windows平台上构建自己的PHP(仅适用于php5.2)

    构建步骤 1, 安装vs2008 2, 安装windows sdk 6.1 3, 下载php 5.2源码,可以从此处获取Releases(先不要解压) 4, 下载bindlib_w32.zip,htt ...

  3. RabbitMQ的事件总线

    RabbitMQ的事件总线 在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容.下面的类图描述了我们已经实现的组件及其之间的关系,貌似系 ...

  4. 指数循环节&欧拉降幂

    证明:https://www.cnblogs.com/maijing/p/5046628.html 注意使用条件(B的范围) 例题: FZU1759 HDU2837 ZOJ1674 HDU4335

  5. SOJ1029 Humble Numbers (枚举)

    A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, ...

  6. ThinkPHP3.2.3快速入门:基础篇

    一.安装 thinkphp无需安装,只需将从官网上下载的压缩包解压后,把所有文件放到localhost根目录里就行了 二.压缩包中文件简述 :应用程序文件夹.自己所写的文件都放在这个文件夹里面 :公用 ...

  7. angular.js和ionic框架搭建一个webApp

    原文地址:http://www.jianshu.com/p/ea0dcf1d31c9

  8. 学习“CC攻击”

    什么是CC攻击? 网上有一个定义:攻击者借助代理服务器生成指向受害主机的合法请求,实现拒绝服务攻击的攻击方式称为CC(Challenge Collapsar)攻击.[据说CC的原意为Chanlleng ...

  9. UglifyJS 压缩选项

    UglifyJS 压缩选项 1.使用逗号运算符连接简单语句 2.使用点符号代替中括号属性     foo [“bar”]→foo.bar 3.删除逻辑上走不到的代码 4.删除调试代码    debug ...

  10. Faster Alternatives to glReadPixels and glTexImage2D in OpenGL ES

    In the development of Shou, I’ve been using GLSL with NEON to manipulate image rotation, scaling and ...