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

//作者:昊天

//

//功能:在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. JQuery动态隐藏和显示DIV

    <head> <script language="javascript"> function HideWeekMonth() { $("#tt1& ...

  2. poscms仿站知识点总结(一)

    最近在做基于poscms系统的企业站仿站项目,这个系列用于总结项目中遇到的一些前端问题,至于poscms,待我摸透之后再总结... 进入正题吧,仿站,首先是用仿站小工具把要仿的模板站扒下来,有时候会出 ...

  3. I.MX6 Android 5.1 纯Linux、U-Boot编译

    /***************************************************************************** * I.MX6 Android 5.1 纯 ...

  4. MyBatis典型的错误org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    XXXmapper.java(接口) XXXmapper.xml(结果集映射) //此两个文件要在统一包下,且xml中的namespace是唯一的,为了区分须写成 该xml的全路径

  5. 深入分析AIDL原理

    深入分析AIDL原理 分类: Android2011-11-18 17:29 6522人阅读 评论(1) 收藏 举报 descriptorcallbackservicenullinterfaceser ...

  6. C# 浅拷贝与深拷贝(复制)

    在有些时候,我们需要从数据库读取数据填充对象或从硬盘读取文件填充对象,但是这样做相对耗时.这时候我们就想到了对象的拷贝.本文即以实例形式解析了C#浅拷贝和深拷贝的用法. C#中有两种类型变量,一种 是 ...

  7. wifi文件传输

    步骤: 1.下载CocoaHTTPServer 2.解压后,将CocoaHTTPServer-master目录下的Core导入工程. 3.打开Samples/SimpleFileUploadServe ...

  8. python SQLAlchemy自动生成models文件

    1.安装SQLAcodegen pip install sqlacodegen 2.执行 sqlacodegen mysql://root:123456@127.0.0.1:3306/test > ...

  9. jquery调用spring mvc接口返回字符串匹配

    背景:有个增删改页面,用jquery祭出ajax异步调用接口,spring mvc响应对象是个json字符串,jquery根据响应结果判断,如果删除成功给出提示.那么问题来了,接口里响应的字符串怎么匹 ...

  10. 让Delphi XE5跟其他版本的Delphi共存

    找到Delphi XE5的安装根目录  ....  \Program Files (x86)\Embarcadero\RAD Studio\12.0\bin下的cglm.ini文件, 打开cglm.i ...