历史上的今天
返回首页

历史上的今天

今天是:2025年02月21日(星期五)

正在发生

2020年02月21日 | JZ2440开发笔记(5)——通过按键点亮LED

2020-02-21 来源:eefocus

  在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;

}


推荐阅读

史海拾趣

AIM - American Iron and Metal公司的发展小趣事

在电子行业的初期,AIM主要以传统的铁和金属加工业务为主。然而,随着电子技术的迅猛发展,公司管理层意识到转型的必要性。AIM开始投资研发,逐步将业务扩展到电子元件和设备的制造领域。通过引进先进的生产线和技术人才,AIM成功开发出一系列高性能的电子零部件,逐渐在市场中站稳脚跟。

ESS [ESS Technology,Inc]公司的发展小趣事

ESS一直将技术创新作为公司发展的核心动力。通过不断投入研发资源,ESS在音频芯片、视频技术、传真/调制解调器技术等领域取得了多项重要突破。这些技术创新不仅提升了ESS产品的性能和品质,还为公司在市场中赢得了更多竞争优势。同时,ESS还积极与全球知名企业和研究机构合作,共同推动半导体芯片技术的创新和发展。正是这种持续的技术创新和不懈的追求卓越,使ESS在电子行业中始终保持领先地位。

中科银河芯(GXCAS)公司的发展小趣事
为了使三极管进入饱和区,需要给基极提供足够的电流。
Box Enclosures公司的发展小趣事

在市场竞争日益激烈的背景下,Box Enclosures公司意识到单打独斗难以取得更大的突破。于是,公司开始积极寻求与其他企业的战略合作。通过与一家知名电子设备制造商的合作,Box Enclosures成功将其产品集成到对方的产品中,共同开拓市场。这种合作不仅提升了公司的知名度,还为其带来了更多的商业机会和合作伙伴。

Adafruit公司的发展小趣事

Box Enclosures公司自创立之初,就明确了自己的定位——专注于为电子行业提供高品质的机箱和外壳产品。公司始终坚持严格的质量控制标准,从原材料采购到生产工艺,每一个环节都力求精益求精。这种对品质的执着追求,使得Box Enclosures的产品在市场上赢得了良好的口碑,逐渐在电子行业中占据了一席之地。

C.K TOOLS公司的发展小趣事

随着电子行业的快速发展,不同企业对生产工具的需求也日益多样化。C.K TOOLS敏锐地捕捉到了这一市场变化,开始提供定制化服务。他们根据客户的具体需求,量身定制工具,满足电子制造过程中的特殊需求。这种定制化服务不仅提高了客户的生产效率,也进一步巩固了C.K TOOLS在电子行业中的地位。

问答坊 | AI 解惑

PCB设计技巧百问(1-10)

1、如何选择PCB板材? 选择PCB板材必须在满足设计需求和可量产性及成本中间取得平衡点。设计需求包含电气和 机构这两部分。通常在设计非常高速的PCB板子(大于GHz的频率)时这材质问题会比较重要。 例如,现在常用的FR-4材质,在几个GHz的频率时 ...…

查看全部问答>

碰到一个问题关于EP2C35

上周调试时,碰到一个问题,同一个程序在两块相同的硬件表现为不同的现象。一块正常,一块不正常。为啥?…

查看全部问答>

如何判断USB HOST功能正常与否

调了好长时间的OTG的HOST功能. 现在有点眉目,但是如何判断HOST功能已经正常了? 现在U盘插上去后,灯闪了一下就灭了. 打印消息说, 已探测到外部设备插入,而且识别了设备的速度,然后就等待port的状态变化... 这种现象正常吗? 我 ...…

查看全部问答>

WINCE下驱动项目外包

现有两个WINCE下驱动项目外包: 1、S3C2416下驱动16C554多串口芯片的驱动程序 2、S3C2416的声音驱动(芯片的驱动代码有2442平台下的可以做参考) 有意者请加QQ嵌入式外包群:48348107 谢谢各位!…

查看全部问答>

WINCE的补丁文件哪里有下载啊

WINCE的补丁文件哪里有下载啊…

查看全部问答>

串口传输的奇怪问题

Hi all 由于使用芯片的升级,公司使用的vxworks(5.4)的BSP包也随之升级,使用的是tornado2.02 现在目标板的bootrom烧进去,可以正常启动 可是不知道为什么,下载vxworks的映像文件的时候常常出错,提示 rpccore target server can\'t decode arg ...…

查看全部问答>

看到许多朋友抱怨LPC17xx的资料难找,发一套全套示例代码

这是一套基于LPC17XX各个模块的示例代码,开发环境是基于KEIL MDK的,我现在用LPC1756做开发,也是初次接触。 这套资料还比较齐全,给了我不少帮助,希望对你们有用。…

查看全部问答>

[求助]谁能发个64脚的STM32,protel原理图器件库啊

                                 谁能发个48/64脚的STM32,protel原理图器件库啊?想做块板玩玩~~~非常感谢…

查看全部问答>

2011年竞赛题目分析

本帖最后由 paulhyde 于 2014-9-15 04:02 编辑 2011年的国赛题目已经出来了。我大致看了一下,今年的题目大致可以分为四类,比以前分的类要少。下面大致说一下个人的理解。 今年的题目大致可分为四类:电源类、控制类、放大类、仪器仪表类。其中 ...…

查看全部问答>

求个cc2530套件下载地址

求个cc2530套件下载地址,本人装了一个但说应用程序初始化(0xc0000135)失败,不知道怎么解决??求大侠指点,3q…

查看全部问答>