//*****************************************************************

//作者:昊天

//

//功能:在ok6410板子上跑裸板程序,用四个按键控制四个led灯的两灭及蜂鸣器的叫声,

//    
 当按键1按下时(此时为低电平)点亮led1同时蜂鸣器响,当松手时,led1灭及蜂鸣器不响
   

//    
 以此类推剩下三个键

//时间:2012/12/13   22:01

//******************************************************************

//蜂鸣器---GPF15

#define GPFCON   (*(volatile unsigned
*)(0x7f0080a0))

#define GPFDAT   (*(volatile unsigned
*)(0x7f0080a4))

#define GPFPUD   (*(volatile unsigned
*)(0x7f0080a8))

//按键(6个)---GPN0--GPN5

#define GPNCON   (*(volatile unsigned
*)(0x7f008830))

#define GPNDAT   (*(volatile unsigned
*)(0x7f008834))

#define GPNPUD   (*(volatile unsigned
*)(0x7f008838))

//LED(四个)----GPM0--GPM3

#define GPMCON  (*(volatile unsigned long
*)(0x7F008820))

#define GPMDAT  (*(volatile unsigned long
*)(0x7F008824))

#define GPMPUD   (*(volatile unsigned long
*)(0x7F008828))

void msDelay(volatile unsigned int time)

{

volatile unsigned int i;

volatile unsigned int j;

for(i=0;i<200000;i++)

{

for(j=0;j

}

}

 void GPIO_Init(void)

 {  //初始化buzzer

GPFCON = GPFCON &
(~(0x1<<(31)));  
//最高位31至0

GPFCON = GPFCON | (0x1<<(2*15));
     //第30位置1
  这样01表示输出

GPFPUD = GPFPUD &
(~(0x3<<(2*15)));  
//上拉电阻禁用

GPFDAT = GPFDAT & 0x7fff;  
//第16管脚输出为0  也就是buzzer不响

 

//初始化按键

GPNCON = GPNCON &
(0xffffffff<<12);

  GPNPUD = GPNPUD &
(0xffffffff<<12);

  GPNDAT = GPNDAT |
(~(0xffffffff<<6));

 

  //led初始化

    GPMCON = GPMCON |
(0x00001111);

    GPMPUD = GPMPUD
&
(0xFFFFFFFF<<8);

    GPMDAT = GPMDAT |
(~(0xfffffff0));

    

    

 }

 void BeepOff(void)

{

GPFDAT = GPFDAT &0x7fff;

}

void BeepOn(void)

{

GPFDAT = GPFDAT | 0x8000;

}

unsigned int KeyScan(void)

{

  

    if((GPNDAT
& 0x3f)==0x3e)

  return 1;  //说明按键1按下

else if((GPNDAT & 0x3f)==0x3d)

  return 2;  
//说明有按键2按下

else if((GPNDAT & 0x3f)==0x3b)

  return 3;  
  //说明有按键3按下

else if((GPNDAT & 0x3f)==0x37)

  return 4;  
   //说明有按键4按下

else

  return 0;  
 //说明没有按键按下

  

}

void KeyTest(void)

{

   unsigned int
KeyStatus;

   while(1)

   {

   
KeyStatus=KeyScan();

     

    switch(KeyStatus)

    {

    case
0:BeepOff(); 

     
    GPMDAT = GPMDAT |
0x0000000f;

     
    break;

    case 1:GPMDAT = (GPMDAT
& 0xfffffffe);   //1键按下点亮led1
     
     
  

     
     
  BeepOn();    
     
     
     
   

     
    break;

    case 2:GPMDAT = GPMDAT
& 0xfffffffd;

     
     
  BeepOn();

     
     
  break;

    case 3:GPMDAT = GPMDAT
& 0xfffffffb;

     
     
  BeepOn();

     
     
  break;

     
 case 4:GPMDAT = GPMDAT &
0xfffffff7;

     
     
  BeepOn();

     
     
  break;

    }

     

     

   }

}

void main(void)

{

GPIO_Init();

    BeepOff();

    KeyTest();

    

}

下面是启动代码init.o:

PRESERVE8

IMPORT main

AREA init,CODE,READONLY

ENTRY

CODE32

START

ldr r0,=0x70000000

orr r0,r0,#0x13

mcr p15,0,r0,c15,c2,4

ldr r0,=0x7E004000

mov r1,#0

str r1,[r0]

ldr sp,=8*1024

bl main

     
      END

6410裸板程序,led、蜂鸣器、按键…的更多相关文章

  1. 【arm学习】我的第一个裸板程序

    初学ARM感觉写个裸板程序还真的不容易,可能是没有用到ADS,keil之类的开发平台的缘故吧.编译,链接过程在linux平台上完成,这样学起来更有实感,还能顺便熟悉linux环境,以及命令,何乐而不为 ...

  2. 第8课.第一个ARM裸板程序(点亮led)及申引

    1.原理图 2.芯片手册 3.几条汇编代码 1.ldr:读内存 ldr R0, [R1] 假设R1的值是x,读取地址x上的数据(4字节),保存到R0中 ldr R0, =0x12345678 (4字节 ...

  3. JZs3c2440裸板程序GPIO操作总结

    分别用汇编,汇编+C两种方式 ***************************************汇编编程led_on.s********************************** ...

  4. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...

  5. ARM裸板开发:04_MMU 链接地址与运行地址不一致时,(SDRAM)初始化程序地址无关码问题的分析

    ARM裸板开发过程,程序的链接地址设置为为0x30000000,而前期的启动代码以及相关硬件的初始化代码需要在内部iRAM(steppingstone,起始地址0x0)的4K中运行.链接地址与运行地址 ...

  6. S5PV210裸板驱动:启动

    以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...

  7. 裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  8. arm裸板驱动总结(makefile+lds链接脚本+裸板调试)

    在裸板2440中,当我们使用nand启动时,2440会自动将前4k字节复制到内部sram中,如下图所示: 然而此时的SDRAM.nandflash的控制时序等都还没初始化,所以我们就只能使用前0~40 ...

  9. uboot-tiny4412启动流程(下)----如何将自己的裸板测试程序加入uboot中启动测试

    今天在工作上搞了一天高通的芯片uboot程序,目的是希望将一个裸板的程序移植到uboot中,并且开机让它运行.这个芯片是NXP4330,目前是高通的一个芯片,基于ARM-contexA9架构,那么就跟 ...

随机推荐

  1. 谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明

    <foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层 ...

  2. 激活函数之ReLU/softplus介绍及C++实现

    softplus函数(softplus function):ζ(x)=ln(1+exp(x)). softplus函数可以用来产生正态分布的β和σ参数,因为它的范围是(0,∞).当处理包含sigmoi ...

  3. SQLServer流水号自动生成

    最近给客户做生成条码的功能时,碰到个问题,需要根据数量自动生成流水号,然后加上客户指定的前缀,组合成条码. 折腾了一会,最后通过个存储过程实现. --@Prefix 指定前缀,@InitialVal ...

  4. C++11新特性之字节对齐、多参数模版、placement new

    1. 内存对齐 #pragma pack(push, 1) struct A { char a; int b; double c; ]; }; #pragma pack(pop) #pragma pa ...

  5. 定时框架quartz的一些问题总结

    1 什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单 ...

  6. linux操作系统安全防护

    Linux系统攻防对抗实践 一.实践内容 在Metasploit渗透攻击框架软件中寻找一个针对Linux系统服务的渗透攻击模块,在网络安全攻防实验环境中部署有漏洞的环境(如渗透利用第三方网络服务,需要 ...

  7. asp.net core microservices 架构之eureka服务发现

    一 简介 微服务将需多的功能拆分为许多的轻量级的子应用,这些子应用相互调度.好处就是轻量级,完全符合了敏捷开发的精神.我们知道ut(单元测试),不仅仅提高我们的程序的健壮性,而且可以强制将类和方法的设 ...

  8. .NET面试题总结

    1.c#垃圾回收机制 从以下方面入手展开:  1.压缩合并算法   2.代的机制  3.GC调用终结器 2.委托和事件 先说它的定义:委托的本质是类,类型安全的指针,然后从用途上考虑,事件是包装的委托 ...

  9. self = [super init]

    Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 返回 ...

  10. 【1】基于quartz框架和Zookeeper实现集群化定时任务系统

    (1)quartz本身可以支持集群化,是基于数据库做协调,现在构想基于zookeeper做协调实现集群化定时系统 流程图如下: