TQ210——按键(中断查询法)

发布者:真实幻想最新更新时间:2020-12-06 来源: eefocus关键字:TQ210  按键 手机看文章 扫描二维码
随时随地手机看文章

底板上有8个独立按键,可分别使用查询法和中断法控制按键。通过原理图可知:按键按下,GPIO检测到低电平,松开时高电平。


直接查询法程序的实现简单,但是效率很低,CPU一直在查询,啥事也干不了。中断查询法程序的实现较为复杂,但是效率高。


GPIO寄存器(GPH0CON,GPH0DAT),外部中断寄存器(EXT_INT_0_CON,EXT_INT_0_MASK),中断通道选择(VIC0INTSELECT),中断使能(VIC0INTENABLE),中断向量地址(VIC0VECTADDR0,VIC0VECTADDR1),清除中断向量(EXT_INT_0_PEND)


.global _start                                   /*声明一个全局的标号 */

.global key_isr

_start:

       /* 设置栈,以调用c函数 */

       ldr   sp, =0x40000000       

 

       /* 开总中断       */

       mrs r0,cpsr

       bic r0,r0, #0x00000080           /* 清楚第7位,IRQ中断禁止位,写0使能IRQ */

       msr cpsr,r0

 

       bl main                                     /* 跳转到C函数去执行 */

 

halt:

       b halt

 

key_isr:

       /* 计算返回地址:PC的值等于当前执行的地址+8,

       ** 当CPU正要执行某条指令时(还未执行),被中断,

       ** 这是这条刚要执行的指令的地址刚好=PC-4 */

       sub lr,lr, #4

       stmfd sp!,{r0-r12, lr}      /* 保护现场 */

       bl key_handle

       /* 恢复现场 */

       ldmfd sp!,{r0-r12, pc}^         /* ^表示把spsr恢复到cpsr */

#define GPC0CON               *((volatileunsigned int *)0xE0200060)

#define GPC0DAT               *((volatileunsigned int *)0xE0200064)

 

#define GPH0CON               *((volatileunsigned int *)0xE0200C00)

#define GPH0DAT               *((volatileunsigned int *)0xE0200C04)

 

#define EXT_INT_0_CON         *((volatileunsigned int *)0xE0200E00)

#define EXT_INT_0_MASK        *((volatileunsigned int *)0xE0200F00)

 

#define VIC0INTSELECT         *((volatileunsigned int *)0xF200000C)

#define VIC0INTENABLE         *((volatileunsigned int *)0xF2000010)

 

#define VIC0VECTADDR0         *((volatileunsigned int *)0xF2000100)

#define VIC0VECTADDR1         *((volatileunsigned int *)0xF2000104)

 

#define VIC0ADDRESS          *((volatile unsigned int*)0xF2000F00)

 

#define EXT_INT_0_PEND       *((volatileunsigned int *)0xE0200F40)

 

extern void key_isr(void);

 

void key_handle()

{     

       volatileunsigned char key_code = EXT_INT_0_PEND & 0x03;

      

       VIC0ADDRESS= 0;                    /* 清中断向量寄存器 */

       EXT_INT_0_PEND&= ~0x03;   /* 清中断挂起寄存器 */

      

       if(key_code == 1)             /* key1 */

       {

              GPC0DAT&= ~(0x01 << 3);      /* toggleLED1 */

              GPC0DAT|= 1 << 3;   /* toggle LED1 */

       }     

       else if(key_code == 2)      /* key2 */

       {

              GPC0DAT&= ~(0x01 << 4);      /* toggleLED1 */

              GPC0DAT|= 1 << 4;   /* toggle LED1 */

       }

             

}

 

int main()

{

       GPC0CON&= ~(0xFF << 12);

       GPC0CON |=0x11 << 12;                             /*配置GPC0_3和GPC0_4为输出:LED1和LED2 */

       GPH0CON |=0xFF << 0;                              /*配置GPH0_0和GPH0_1为外部中断:key1和key2 */

      

       EXT_INT_0_CON&= ~(0xFF << 0);

       EXT_INT_0_CON|= 2 | (2 << 4);                    /*配置EXT_INT[0]和EXT_INT[1]为下降沿触发 */

       EXT_INT_0_MASK&= ~3;                             /* 取消屏蔽外部中断EXT_INT[0]和EXT_INT[1] */

      

       VIC0INTSELECT&= ~3;                              /*选择外部中断EXT_INT[0]和外部中断EXT_INT[1]为IRQ类型的中断 */

      

       VIC0INTENABLE|= 3;                               /*使能外部中断EXT_INT[0]和EXT_INT[1] */

      

       /* 当EXT_INT[0]触发中断,即用户按下key1时,

       ** CPU就会自动的将VIC0VECTADDR0的值赋给VIC0ADDRESS并跳转到这个地址去执 */

       VIC0VECTADDR0= (unsigned int)key_isr;

       VIC0VECTADDR1= (unsigned int)key_isr;

      

       while (1);

      

       return 0;

}


裸机编程编译的时候一定要加16字节的头信息,编译生成的bin文件通过SD卡或者TFTP的方法下载到开发板。


关键字:TQ210  按键 引用地址:TQ210——按键(中断查询法)

上一篇:TQ210——S5PV210串口通信
下一篇:TQ210——S5PV210中断体系

推荐阅读最新更新时间:2024-11-13 08:53

单片机一般按键的设计
一、机械按键的抖动 键盘,作为向系统操作人员的干预指令的接口,以其特定的按键序列代表着各种确定的操作命令,所以,准确无误的辨认每个键的动作和其所处的状态,是系统能否正常工作的关键。多数键盘的按键多使用机械式弹性开关,一个电信号通过机械触点的断开,闭合过程完成高低电平的切换。由于机械触点的弹性作用,一个按键开关在闭合及断开的瞬间必然伴随着一连串的抖动,其波形如图所示: 抖动过程的长短是由按键的机械特性决定,一般是10~20ms。为了使CPU对一次按键动作只确认一次,必须消除抖动的影响,可以从硬件及软件两个方面着手。本文只介绍软件方面的防抖。 软件防抖的思路:当第一次检测到有建按下时,先用软件延时(10~2
[单片机]
基于51单片机+DS1302万年历+LCD1602显示+按键播报时间+温控风扇+按键控灯
前段时间做了一个 基于51单片机的万年历加温度控制风扇以及按键播报时间。在这里做一下笔记。 准备硬件 1:51单片机(我这里用的是STC89C52) 2:语音播报模块(我这里用的是SYN6288) 3:DS1302时钟模块 4:DS18B20温度模块 5:LCD1602显示屏 6:L298N电机驱动 7:蜂鸣器 8:电机 9:按键 5个 10:灯 功能介绍 功能: 1:修改时间 2:修改日期(软件自动校正日期) 3:闹钟模式 4:温度控制风扇速度 5:调节灯亮度 6:播报时间 主界面设置 下面是大概的流程图 位置不够没画全。。。 由于代码较多,这里就不全部贴出来了。 修改时间 当我们进入到修改时间的界面,我们屏幕得
[单片机]
基于51单片机+DS1302万年历+LCD1602显示+<font color='red'>按键</font>播报时间+温控风扇+<font color='red'>按键</font>控灯
独立按键和矩阵键盘驱动原理
No.1 按键分类与输入原理 按键按照结构原理科分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送人累加器,然后通过跳转指令转
[单片机]
独立<font color='red'>按键</font>和矩阵键盘驱动原理
STM32学习:按键控制LED
前言 涉及知识点:上下拉电阻,stm32_GPIO工作模式,stm32按键控制,GPIO电平读取,宏定义 内容:两个按键控制两个LED灯亮灭。 一、所用知识点复习 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 1、stm32工作模式(注意上下拉输入的区别) 2、按键抖动与常见按键接法 按键抖动: 按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。 抖动时间的长短由按键的机械特性决定
[单片机]
STM32学习:<font color='red'>按键</font>控制LED
51单片机-按键部分(3)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 1
[单片机]
单片机按键扫描程序和显示程序及延时程序解析
//程序中没有做按键去抖,也没有考虑多个键同时按下的情况。 //最低两位数码管显示相应的按键(如按下S10,在显示10;按下S25,则显示25) //无按键按下的时候显示FF //按键跟按键的扫描结果满足如下关系: //按键扫描结果(result)按键扫描结果 //K100XE7K180XB7 //K110XEBK190XBB //K120XEDK200XBD //K130XEEK210XBE //K140XD7K220X77 //K150XDBK230X7B //K160XDDK240X7D //K170XDEK250X7E #include//包含 单片机 内部资源预定义 __CONFIG(0x1832); //芯片配
[单片机]
单片机<font color='red'>按键</font>扫描程序和显示程序及延时程序解析
S3C2440 Linux驱动移植——按键
开发板:TQ2440 内核版本:2.6.32 1. 硬件链接图 四个输入引脚: EINT0-----( GPF0 )----INPUT---K4 EINT2-----( GPF2 )----INPUT---K3 EINT4-----( GPF4 )----INPUT---K2 EINT1-----( GPF1 )----INPUT---K1 2. 相关的数据结构 移植所需要的数据结构位于include/linux/gpio_keys.h中。 #ifndef _GPIO_KEYS_H #define
[单片机]
S3C2440 Linux驱动移植——<font color='red'>按键</font>
基于MCU的电容感应式触摸按键方案
  1 引言   电容式触控技术在厨房设备中的应用已经有几年了,例如在烤箱和煎锅的不透明玻璃面板后面采用分离按键实现。这些触摸控制键逐渐替代了机械按键,因为后者具有使用寿命短、不够卫生等方面的问题, 电容式感应技术由于具有耐用、较易于低成本实现等特点,而逐渐成为触摸控制的首选技术。此外,由于具有可扩展性,该技术还可以提供其它技术所不能实现的用户功能。在显示屏上以软按键方式提供用户界面,这通常被称为触摸屏。触摸输入滚动/指示功能器件,例如iPod音乐播放器上的点击式转盘,这类器件在消费市场已经获得广泛的认可,正在逐渐出现在更多的消费设备市场。有两种基本类型的滚动器件:第一种是绝对报告类型,提供直接位置输出报告;另外一种是相对类型,
[单片机]
基于MCU的电容感应式触摸<font color='red'>按键</font>方案
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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