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

发布者:温暖心情最新更新时间:2020-02-21 来源: eefocus关键字:JZ2440  开发笔记  按键点亮  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, =1024*4         @ 设置堆栈,注意:不能大于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(1){

            //若Kn为0(表示按下),则令LEDn为0(表示点亮)

            dwDat = GPFDAT;             // 读取GPF管脚电平状态

        

            if (dwDat & (1<<0))        // S2没有按下

                GPFDAT |= (1<<4);       // LED1熄灭

            else    

                GPFDAT &= ~(1<<4);      // LED1点亮

                

            if (dwDat & (1<<2))         // S3没有按下

                GPFDAT |= (1<<5);       // LED2熄灭

            else    

                GPFDAT &= ~(1<<5);      // LED2点亮

    

            dwDat = GPGDAT;             // 读取GPG管脚电平状态

            

            if (dwDat & (1<<3))         // S4没有按下

                GPFDAT |= (1<<6);       // LED3熄灭

            else    

                GPFDAT &= ~(1<<6);      // LED3点亮

    }


    return 0;

}


关键字:JZ2440  开发笔记  按键点亮  LED 引用地址:JZ2440开发笔记(5)——通过按键点亮LED

上一篇:JZ2440开发笔记(6)——存储控制器
下一篇:JZ2440开发笔记(4)——设置静态IP

推荐阅读最新更新时间:2024-10-22 07:55

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的控制位信息,如图:   我们
[单片机]
<font color='red'>JZ2440</font><font color='red'>开发</font><font color='red'>笔记</font>(5)——通过<font color='red'>按键</font><font color='red'>点亮</font><font color='red'>LED</font>
JZ2440笔记】裸机实验点亮LED
一、前言 最近在学韦东山的JZ2440开发板,于是记录下学习过程中的笔记。一般学程序写的第一个例子是打印“Hello World”,而学单片机的第一个例子一般都是点亮LED,学ARM的话如果从裸机开始学,也跟玩单片机差不多,从点亮LED开始。 二、实验步骤 1、目标 点亮开发板上的3个LED灯。 2、硬件连线 点亮LED需要S3C2440芯片的IO引脚GPF4、GPF5、GPF6输出低电平即可。 3、寄存器配置 和玩单片机一个套路,配置IO模式(GPFCON寄存器)和要输出的电平(GPFDAT)就行了。即GPFCON寄存器给0x00001500把GPF4、5、6配置成输出模式,GPFDAT给0x00
[单片机]
【<font color='red'>JZ2440</font><font color='red'>笔记</font>】裸机实验<font color='red'>点亮</font><font color='red'>LED</font>
jz2440裸机开发与分析: 点亮LED灯之C语言3
对于之前提出了栈这一概念下面我们要提出问题: 1.为何要使用栈 答:c函数要用 2.如何使用栈 答:a.保存局部变量 b.保存lr等寄存器 3.调用者如何传参数给被调用者 start.s .text .global _start _start: /* 设置内存: sp 栈 */ ldr sp, =4096 /* nand启动 */ // ldr sp, =0x40000000+4096 /* nor启动 */ mov r0, #4 bl led_on ldr r0, =100000 bl delay mov r0, #5 bl led_on halt: b halt c代码 void
[单片机]
jz2440裸机开发与分析: 点亮LED灯之C语言2
编译 链接 取反汇编 arm-none-linux-gnueabi-gcc -g -nostdlib -c -o led.o led.c arm-none-linux-gnueabi-gcc -g -nostdlib -c -o start.o start.s arm-none-linux-gnueabi-ld -Ttext 0 -g start.o led.o -o led.elf arm-none-linux-gnueabi-objcopy -O binary -S led.elf led.bin arm-none-linux-gnueabi-objdump -D led.elf led.dis 反汇编源码分析(led.
[单片机]
<font color='red'>jz2440</font>裸机<font color='red'>开发</font>与分析: <font color='red'>点亮</font><font color='red'>LED</font>灯之C语言2
jz2440裸机开发与分析: 点亮LED灯之C语言1
存储过程分析 开辟一块内存用来存放寄存器地址,之后间接的修改寄存器内部的数值 c语言代码 按照常规先写主函数点亮LED灯 int main() { unsigned int *pGPFCON = (unsigned int *)0x56000050; unsigned int *pGPFDAT = (unsigned int *)0x56000054; /* 配置GPF4为输出引脚 */ *pGPFCON = 0x100; /* 设置GPF4输出0 */ *pGPFDAT = 0; return 0; } 之前有MDK写到这里就可以了,MDK的启动代码最主要的目的为CPU分配各种模式下
[单片机]
<font color='red'>jz2440</font>裸机<font color='red'>开发</font>与分析: <font color='red'>点亮</font><font color='red'>LED</font>灯之C语言1
jz2440裸机开发与分析: 点亮LED灯之汇编语言
LED原理图及2440寄存器说明 汇编语言编写控制LED灯 .text /*.text部分是处理器开始执行代码的地方,指定了后续编译出来的内容放在代码段*/ .global _start; /*.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用;*/ /* 告诉编译器后续跟的是一个全局可见的名字*/ /*.global _start让_start符号成为可见的标识符,*/ /*这样链接器就知道跳转到程序中的什么地方并开始执行程序*/ _start: /*_start是一个函数的起始地址,也是编译、链接后程序的起始地址*/ ldr r0, =0x
[单片机]
<font color='red'>jz2440</font>裸机<font color='red'>开发</font>与分析: <font color='red'>点亮</font><font color='red'>LED</font>灯之汇编语言
jz2440裸板开发之GPIO:点亮一个led灯(1)
实验目的:点亮一个led灯。(使用arm汇编指令) 实验原理: 在这里点亮一个nLED_2,其对用的引脚是GPF5,在GPIO中,每个引脚对有配置寄存器和数据寄存器,对于本例其配置寄存器为GPFCON:0x56000050,和数据寄存器GPFDATA:0x56000054.要设置GPF5(GPF5为GPFCON的第十和十一引脚,【11,10】=01时为输出)为输出引脚,并根据电路原理图,可知是设为低电平,才能点亮LED2.所以 =0x00000400). =0x00000000 实验步骤: 在linux下编辑源程序,然后利用自己编写的Makefile来对源程序的编译和链接生成bin文件,最后通过文件传输到wi
[单片机]
msp430学习笔记_按键点亮LED
//在系统上实现按一次按键,对应的发光二极管状态改变一次 #include msp430x14x.h void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P2DIR = 0XfF; //全部P2口设置为输出 P2OUT = 0Xff; // 全部P2口设置为高电平 灯全灭 P1OUT = 0Xff; //P1口全部设置为高电平 P1DIR = 0Xf0; //全部P1口按键设置为输入,其他的为输出 P1IES = 0X0f; //P1口按键设置为下降沿触发 P1IFG = 0; //设置P1口全
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved