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

  想要用按键点亮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. C#中的"?"和"??"

    摘自:http://www.cnblogs.com/zxjyuan/archive/2009/10/27/1590795.html 如果你看到C#中的“?”问号脑袋里便充满问号,那么这个贴子便是为你而 ...

  2. SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的

    大家如果使用我github上的这段代码创建S/4HANA的生产订单时,一定会发现,我在代码里并没有硬编码来指定生产订单的ID,然而运行时会发现我在系统里配置的这个2800被自动使用了,这是怎么做到的呢 ...

  3. 41. First Missing Positive (sort) O(n) time

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  4. Radmin自动连接 c#版 带源码

    实现原理:1.利用radminview 自带命令 2.大漠绑定插件. 附图: 源码下载:http://files.cnblogs.com/eastday/Radmin%E8%87%AA%E5%8A%A ...

  5. BZOJ3503:[CQOI2014]和谐矩阵(高斯消元,bitset)

    Description 我们称一个由0和1组成的矩阵是和谐的,当且仅当每个元素都有偶数个相邻的1.一个元素相邻的元素包括它本 身,及他上下左右的4个元素(如果存在). 给定矩阵的行数和列数,请计算并输 ...

  6. windows8安装msi软件提示2503错误的解决办法

    windows8以后的版本安装msi软件(比如nodejs.msi.Git.msi.python.msi.T ortoiseSVN.msi)的时候老师出现2503.2502的错误,究其原因还是系统权限 ...

  7. 同步Internet时间

    问题: 开启了  自动设置时间,时区  但问题仍然存在 回答: 勾选并不代表真正同步成功  执行timedate.cpl如图设置 记得点击立即更新  时间不同步可能是时间服务器问题 换一个就可以了

  8. Linux下rm -rf删除文件夹报错_ Device or resource busy

    1.错误信息 rm: cannot remove `speechd-centos_6.2-prtl-pred-mf34/modules/t2p/py/third/g2p/.nfs00000000039 ...

  9. [转]asp.net Request、Response 响应在此上下文中不可用

    这个问题一般是在页面中使用了Respons.Write()方法,虽然是继承了System.Web.UI.Page.但System.Web.UI.Page下的Response只有在asp.net页面里才 ...

  10. 使用Vue构建单页应用一

    一. 环境准备 1 安装Node.js  最好安装node.js-6.X.X 以上版本,https://nodejs.org/en/    我使用的是  v6.3.1 Current 版本.Node. ...