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

//作者:昊天

//

//功能:在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. OC-常见归档总结

    /*****  该文一共总结了以下六种文件操作   1.NSKeyedArchiver. 2.对类对象进行归档 <NSCoder>协议 3.文件管理类 NSFileManger  4.对文 ...

  2. 剑指offer--27.包含min函数的栈

    时间限制:1秒 空间限制:32768K 热度指数:252822 本题知识点: 栈 算法知识视频讲解 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为 ...

  3. Android WebView remote debugging

    /***************************************************************************** * Android WebView rem ...

  4. HihoCoder1620: 股票价格3 (单调队列 or DP)

    股票价格3 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在关注股票,为了计算股票可能的盈利,他获取了一只股票最近N天的价格A1~AN. 小Hi想知道,对于第 ...

  5. IQ信号理解

    可参考http://wenku.baidu.com/link?url=Y3plyK9lgl96QowljJkWhgVaUGbH11j178DkId_vcl9z1V5cjl9ycTiB4Ym4iaypL ...

  6. ACM学习历程—HDU5701 中位数计数(中位数 && 计数排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=5701 这是这次百度之星初赛2B的第六题.之前白山云做过类似的题,省赛完回来,我看了一下大概就有这样的思路:首先枚 ...

  7. LOJ10034 图书管理

    题意 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需要支 ...

  8. 动态可缓存的内容管理系统(CMS)

    摘要:内容管理系统(CMS)在各大商业站点和门户站点中扮演着重要的角色,是内容有效组织和快速发布极为重要的基础平台.目前主流的内容发布系统都使用静态页面进行内容发布,在我们的实际使用过程中我们深切的感 ...

  9. Oracle数据文件和临时文件的管理

    一.数据文件概述在Oracle数据库中,SYSTEM和SYSAUX表空间至少需要包含一个数据文件,此外还将包含多个其他表空间及与其相关的数据文件和临时文件.Oracle的数据文件和临时文件是操作系统文 ...

  10. CENTOS7配置静态IP后无法ping通外部网络的问题

    我今天想谈论的并不是如何配置静态IP,这样的话题已经有好多高手再谈. 我想谈的是为什么,我按照他们的教程无论如何也要发生各种问题,没办法连接外网的问题. 先给大家看我的最终版配置方案:我只修改了一个文 ...